正则绕过


isset表示存在得到的code这个变量,然后将传递进来的code值,赋值给变量code
preg_match函数用于执行一个正则表达式匹配
这里过滤掉了变量code中的字母和数字。
但是我们需要对eval中的code传入命令,需要用到system ls cd /等等
因此这里需要想办法绕过preg_match变量
这里利用异或绕过
经过一次get传参会进行一次URL解码,所以我们可以将字符先进行url编码再进行异或得到我们想要的字符
%A0^%FF=>_
%B8^%FF=>G
%BA^%FF=>E
%AB^%FF=>T
同时需要了解到PHP5中,assert()是一个函数,我们可以用=assert;_()这样的形式来执行代码。但在PHP7中,assert()变成了一个和eval()一样的语言结构,不再支持上面那种调用方法。
在PHP5当中assert()的作用和eval()相似都是执行,但是eval是因为是一个语言构造器而不是一个函数,不能被可变函数调用,所以这种拼接的方法只能用assert而不能用eval

利用代码

可以得到php的版本为5.6.36

因此可以写作${%ff%ff%ff%ff^%a0%b8%ba%ab}{%aa}来代表get传参得到的值
然后可以令%aa=system
这里使%aa=system,然后带上()
()内容是执行的命令,这里可以再次利用${%ff%ff%ff%ff^%a0%b8%ba%ab}{%bb}
将%aa换为%bb,然后令%bb=cd /;ls
得到文件夹,剩下的直接cat即可

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2024 John Doe
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信