ToB企服应用市场:ToB评测及商务社交产业平台
标题:
【攻防世界】ez_curl
[打印本页]
作者:
科技颠覆者
时间:
2024-6-23 16:00
标题:
【攻防世界】ez_curl
ez_curl
题目来源
攻防世界 NO.GFSJ1188
题解
是一个PHP的代码审计
同时还提供了一个附件app.js,打开后内容如下
app.js中:
req.query.admin.includes:要求在URL中admin字段的值不包含“false"子串(必须要有admin字段)
req.headers.admin.includes:要求在报文头部中admin字段的值包含“true”子串
解题思绪:向PHP文件发出请求,该PHP文件从POST的数据中拿到变量$url、$headers,向app.js发出请求。
绕过URL的判断
在PHP文件中可以看到URL由POST的params中的元素拼接而成,末了加上admin=false。
在NodeJS中有以下知识点:express的parameterLimit默认为1000,即当参数个数大于1000时,后面的参数将被截断。
当我们给params赋值的成员个数大于1000时,$url中参数的个数将大于1000,因此1000以后的参数将失效,即可让$url中admin=false被截断。
绕过headers的判断
对于php文件中的绕过,有两种方法。在做题时可以将两个文件放到当地进行调试,有利于学习NodeJS解析的效果(本文跳过此步调)
第一种
{"headers": ["xx:xx\nadmin: true"]}
复制代码
我们可以看到admin和true字符串都在第一个冒号后面,因此可以绕过PHP代码的检测,而在NodeJS解析时,会解析得到admin的字段为true.
第二种
{"headers": ["admin: x", " true: y"]}
复制代码
由于admin和ture出现在数组的两个元素中,因此可以绕过PHP文件的判断。在正常解析过程中,在键名中是不允许存在空格的,但NodeJS在遇到这类情况时是宽容的,会将其解析成
{"admin": "x true y"}
复制代码
即NodeJS会将分隔符直接去掉。
构造body
python代码如下
import json
datas = {"headers": ["xx:xx\nadmin: true"],
"params": {"admin": "true"}}
for i in range(1020):
datas["params"]["x" + str(i)] = i
json1 = json.dumps(datas)
print(json1)
复制代码
此中datas中的headers可以构造为上面提到的第二种方法,也是可行的。
将运行得到的body使用POST方法进行传参,即可得到flag
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4