【攻防世界】ez_curl

news/2024/9/23 5:19:50

ez_curl

题目来源

攻防世界  NO.GFSJ1188

题解

是一个PHP的代码审计

img

同时还提供了一个附件app.js,打开后内容如下

img

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 jsondatas = {"headers": ["xx:xx\nadmin: true"],        "params": {"admin": "true"}}for i in range(1020):datas["params"]["x" + str(i)] = ijson1 = json.dumps(datas)
print(json1)

其中datas中的headers可以构造为上面提到的第二种方法,也是可行的。
将运行得到的body使用POST方法进行传参,即可得到flag

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/46856.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Java基础面试题下

# Java基础面试题(下) > lecture:波哥 # 一、String相关面试题 ## 1. 为什么 String 在 java 中是不可变的? - 如果不是不可变的:这种情况根本不可能,因为在字符串池的情况下,一个字符串对象/文字,例如 “Test” 已被许多参考变量引用,因此如果其中任何一个更改了值,…

Linux 中 grep -P 选项 perl正则 限制两侧进行匹配

001、[root@PC1 test3]# echo "Hello, my name is aming."|grep -P (?<=Hello, ).*(?= aming.) Hello, my name is aming. 002、

python的描述符(器)是如何工作的?

当一个class 中定义了__get__, __set__, __delete__三个函数中的任意一个,那么这个class就可以被成为描述符。当在python中使用点 . 来调用某个属性的时候,其load attr的顺序如下图所示。 关于描述符中instance 和owner的解释 class Name:def __get__(self, instance, o…

jenkins连接k8s

目录Jenkins连接k8s集群1. Kubernetes插件简介2. Kubernetes插件使用2.1 kubernetes的连接参数3. 测试4. 错误原因 Jenkins连接k8s集群默认Jenkins是有2个执行器的,我们也可以通过增加节点的方式去让他拥有更多的执行器,连接固定节点的方法比较简单,按照他的步骤一步步来就好…

软件工程 期末总结博客作业

0 公开可看的成果展示 leango alpha阶段燃尽图 2038_online仓库地址 软件工程初期的代码精读结对作业 小米便签之AS的部署 1 回顾 1.1 对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么? 达成期待的:在之前系统学习Java和数据库的知…