0x1 分析
打开页面 得到源码 整理
1 | #!/usr/bin/python |
三个路由:
/
→ 展示源码/geneSign
→ 根据param
生成数字签名/De1ta
→ 在cookie中获取action, sign
,并getparam
(过滤了 gopher 和 file ) 然后新建Task
并执行task.Exec
21#
根据传入的ip生成沙盒文件夹29#
根据 param 和 action 检查签名是否有效30#
如果 action 中有scan
则执行83#
,将结果写入 /{sandbox}/result.txt40#
如果 action 中有read
则读取 result.txt 并回显
0x2 攻击方法
由于86#
urllib.urlopen可以以文件名作为参数打开,尝试scan code.txt
然后 read
由于数字签名校验,我们需要先获取sign再向/De1ta
发请求 scan方法可以直接通过/geneSign → 63#
获取,但是 read 方法不行
且生成需要secret_key
(16个随即字节) 不考虑爆破
但同时发现30#
和40#
判断用的是in
而不是is
可能有攻击点 尝试拼接
很明显 向/De1ta
发请求时 action=readscan
这样既会读又会写 向/geneSign
请求时只要在param的末尾加上read
这样生成的sign就和53#
生成的sign相同 绕过检测
0x3 exp
1 | import requests |