循环嵌套函数GetShell
函数妙用
code-breaking_easy-phplimit函数的巧妙搭配
参考文章
- https://www.kingkk.com/2018/11/Code-Breaking-Puzzles-%E9%A2%98%E8%A7%A3-%E5%AD%A6%E4%B9%A0%E7%AF%87/#get-defined-vars
- https://xz.aliyun.com/t/6316
- https://www.cnblogs.com/BOHB-yunying/p/11616311.html
Exp
1 |
|
ByteCTF boring_code
参考文章
分析
源码
1 |
|
1.第一步
第一步需要绕过preg_match
的检测,网上见到的payload都是通过购买域名,url跳转等方法进行绕过。其实可以通过代码绕过。
我的方法
1 |
|
compress.zlib
绕过data协议的检测,@
使data:
被解释为用户名和密码,baidu.com/baidu.com
中只要包含/
就会被解释为合法的media-type
其他方法
购买一个 xxxxbaidu.com 的域名
百度网盘链接
这种方法的思路是将恶意代码上传到百度网盘 , 然后通过百度网盘的下载链接来绕过 baidu.com 的主机名限制 .
将一个恶意脚本上传到百度网盘( 这里以 phpinfo() 为例 )
通过开发者工具( F12 ) , 在 network 选项卡中可以找到目标文件的链接
百度爬虫
其原理大概就是 : 百度的搜索引擎爬虫会爬到你的个人站点 , 当你在百度上点击自己站点时 , 并不是直接访问 . 而是利用百度的重定向机制 , 将你的网址转换成
http://www.baidu.com/link?url=xxxxxxxxxxxxxxx
, 通过这个链接可以绕过第一层防御并且拿到你站点上的恶意脚本 .
2.第二步
我们要获取.
,可以通过获取.
的ascii码,然后通过chr
函数得到。写了个脚本:
1 |
|
主要使用了反射检测函数的参数。
payload
crypt
函数的返回值最后一位可能为.
1
if(chdir(next(scandir(chr(ord(strrev(crypt(serialize(array())))))))))readfile(end(scandir(chr(ord(strrev(crypt(serialize(array()))))))));
localeconv
函数
循环嵌套函数GetShell
https://theganlove.github.io/2024/08/31/循环嵌套函数GetShell/