【攻防世界】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

【攻防世界】ez_curl的更多相关文章
- CTF--web 攻防世界web题 robots backup
攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...
- CTF--web 攻防世界web题 get_post
攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...
- 攻防世界 web进阶练习 NewsCenter
攻防世界 web进阶练习 NewsCenter 题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...
- 【攻防世界】高手进阶 pwn200 WP
题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...
- XCTF攻防世界Web之WriteUp
XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...
- 攻防世界 | CAT
来自攻防世界官方WP | darkless师傅版本 题目描述 抓住那只猫 思路 打开页面,有个输入框输入域名,输入baidu.com进行测试 发现无任何回显,输入127.0.0.1进行测试. 发现已经 ...
- 攻防世界 robots题
来自攻防世界 robots [原理] robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在, ...
- 【攻防世界】 高手进阶区 Recho WP
0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...
- CTF -攻防世界-crypto新手区(5~11)
easy_RSA 首先如果你没有密码学基础是得去恶补一下的 然后步骤是先算出欧拉函数 之后提交注意是cyberpeace{********}这样的 ,博主以为是flag{}耽误了很长时间 明明没算错 ...
- 攻防世界web新手区做题记录
学校信安协会第一次培训结束后的作业,要求把攻防世界的web新手区题目做一遍并写题解. 第一题 view_source 查看源代码右键不能用,但是F12能用,于是找到源代码 输入到flag框即可 后来在 ...
随机推荐
- Flutter Package: flutter_animate
Flutter package: flutter_animate A performant library that makes it simple to add almost any kind of ...
- 配置 Forwarded Headers Middleware
来自微软的说明:Configure ASP.NET Core to work with proxy servers and load balancers | Microsoft Learn. 通过该中 ...
- ng-alain: i18n
https://github.com/ng-alain/delon/blob/master/packages/theme/src/services/i18n/i18n.ts interface Ala ...
- 开源产品测评之 SQL 上线能力
背景 近期,我司准备引入一款 SQL 审核产品来供内部流程使用,解决目前 SQL 人工上线的流程管控问题,目标是对业内的开源产品进行调研,选型一款作为落地方案,后期如果内部有需求可能会进行二次开发.我 ...
- shell之变量默认值
{var:-default_value}当var 不存在,或者值为空时,返回default_value name不存在,返回了一个默认值,但是name并没有改变, 后续不可访问 $ set -u # ...
- jsch文件复制(拷贝)
public void copyFile(Session session, String sourceFile, String destinationFile) { ChannelExec chann ...
- rpc-java 生成代码路径设置
<plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf- ...
- 关于Qt数据库开发的一些冷知识
一.知识要点 Qt即支持库的形式直接和数据库通信,也支持ODBC数据源的形式和各种数据库通信,这样就涵盖了所有的情况. Qt数据库程序打包发布,所有前提:注意区分32/64位,你的程序是32位的就必须 ...
- Qt开发经验小技巧206-210
有时候需要对文本进行分散对齐显示,相当于无论文字多少,尽可能占满整个空间平摊占位宽度,但是在对支持对齐方式的控件比如QLabel调用 setAlignment(Qt::AlignJustify | Q ...
- Qt编写地图综合应用24-miniblink内核
一.前言 用Qt做项目过程中,遇到需要用到浏览器控件的项目,可能都会绕不开一个问题,那就是从Qt5.6版本开始mingw编译器的Qt构建套件,不再提供浏览器控件了,之前还可以用webkit控件,这下很 ...