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以后的参数将失效,即可让$urladmin=false被截断。

绕过headers的判断

对于php文件中的绕过,有两种方法。在做题时可以将两个文件放到本地进行调试,有利于学习NodeJS解析的结果(本文跳过此步骤)

第一种

{"headers": ["xx:xx\nadmin: true"]}

我们可以看到admintrue字符串都在第一个冒号后面,因此可以绕过PHP代码的检测,而在NodeJS解析时,会解析得到admin的字段为true.

第二种

{"headers": ["admin: x", " true: y"]}

由于adminture出现在数组的两个元素中,因此可以绕过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的更多相关文章

  1. CTF--web 攻防世界web题 robots backup

    攻防世界web题 robots https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=506 ...

  2. CTF--web 攻防世界web题 get_post

    攻防世界web题 get_post https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=0&id=5 ...

  3. 攻防世界 web进阶练习 NewsCenter

    攻防世界 web进阶练习 NewsCenter   题目是NewsCenter,没有提示信息.打开题目,有一处搜索框,搜索新闻.考虑xss或sql注入,随便输入一个abc,没有任何搜索结果,页面也没有 ...

  4. 【攻防世界】高手进阶 pwn200 WP

    题目链接 PWN200 题目和JarvisOJ level4很像 检查保护 利用checksec --file pwn200可以看到开启了NX防护 静态反编译结构 Main函数反编译结果如下 int ...

  5. XCTF攻防世界Web之WriteUp

    XCTF攻防世界Web之WriteUp 0x00 准备 [内容] 在xctf官网注册账号,即可食用. [目录] 目录 0x01 view-source2 0x02 get post3 0x03 rob ...

  6. 攻防世界 | CAT

    来自攻防世界官方WP | darkless师傅版本 题目描述 抓住那只猫 思路 打开页面,有个输入框输入域名,输入baidu.com进行测试 发现无任何回显,输入127.0.0.1进行测试. 发现已经 ...

  7. 攻防世界 robots题

    来自攻防世界 robots [原理] robots.txt是搜索引擎中访问网站的时候要查看的第一个文件.当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在, ...

  8. 【攻防世界】 高手进阶区 Recho WP

    0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...

  9. CTF -攻防世界-crypto新手区(5~11)

    easy_RSA 首先如果你没有密码学基础是得去恶补一下的 然后步骤是先算出欧拉函数 之后提交注意是cyberpeace{********}这样的 ,博主以为是flag{}耽误了很长时间  明明没算错 ...

  10. 攻防世界web新手区做题记录

    学校信安协会第一次培训结束后的作业,要求把攻防世界的web新手区题目做一遍并写题解. 第一题 view_source 查看源代码右键不能用,但是F12能用,于是找到源代码 输入到flag框即可 后来在 ...

随机推荐

  1. ThreeJs-07操控物体实现家具编辑器

    本章节实现效果,通过gui快速添加场景,家具,并且可以快速设置家具实现一个编辑器效果 一.基础设置与物体添加列表 用之前做过的一个案例来改 首先不要这个模型,然后换个背景颜色,并且添加一个网格辅助器 ...

  2. PDFSharp 常见问题

    PDFSharp 常见问题 PDFsharp: Frequently Asked Questions - PDFsharp and MigraDoc Wiki 1. PDFSharp 是什么? PDF ...

  3. Rapid SCADA v6安装常见问题

    用了很多年的Rapid SCADA v5,现在官网已经推出了v6,就简单写一下有关v6的安装指南吧. 本指南面向Windows用户,不适用于linux用户 步骤 从官网下载Rapid SCADA最新的 ...

  4. 2024年1月Java项目开发指南6:接口测试

    我们使用API Fox这款工具对接口进行测试. (你要是会其他的例如postman进行测试也行) https://apifox.com/ 新建一个项目,新增一个接口 因为这个接口没有参数,所以无需填写 ...

  5. gitlab16 gitlab-runner

    gitlab-runner verify --delete FederatedKMeansSecureModelInference gitlab-runner register  --url http ...

  6. Gitlab 实现仓库完全迁移

    方法一:最快 gitlab用url导入注意事项看图 方法二 首先需要在新的服务服务器上新建一个项目 然后用 Git Bash 执行以下命令 git clone --mirror 项目原代码仓库地址 / ...

  7. Qt/C++编写视频监控系统81-Onvif报警抓图和录像并回放

    一.前言 视频监控系统中的图文警情模块,是通过Onvif协议的事件订阅拿到的,通过事件订阅后,设备的各种报警事件比如入侵报警/遮挡报警/越界报警/开关量报警等,触发后都会主动往订阅者发送,而且一般都是 ...

  8. MFC-error C2589: “(”:“::”右边的非法标记

    MFC-error C2589: "(":"::"右边的非法标记 错误信息 出错语句 问题原因 解决办法 错误信息 ① 错误 C2589 "(&quo ...

  9. springboot的yml文件中如何配置redis?

    springboot的yml文件中如何配置redis? 解决方法: spring: #redis配置 redis: database: 0 timeout: 0 # Redis服务器地址 host: ...

  10. java中基于swing库自定义分页组件

    一个swing的分页组件,代码见附件. //用法如下:  Class Test{      JTable table ;      StatusBar statusBar ;      Test(){ ...