0x1 分析
打开页面 得到源码 整理
1 | #!/usr/bin/python |
三个路由:
/→ 展示源码/geneSign→ 根据param生成数字签名/De1ta→ 在cookie中获取action, sign,并getparam(过滤了 gopher 和 file ) 然后新建Task并执行task.Exec21#根据传入的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 |





