极客挑战2021-breakout-wp
题目代码
1 |
|
代码分析
代码会将v
和!-__)^
进行异或,所以我们需要构造出一个值,异或后为函数名
脚本如下
1 |
|
所以v
的值就为@^,:[*
接下来是一个MD5的截断比较,找一个MD5后前6位为666666
的值即可,例如oT7mgbJMTNyh9qWYQT2d
code就是要执行的内容了
现在将三部分连接在一起
成功执行phpinfo
绕过disable_function
有了phpinfo,肯定要看一下disable_functions
可以看到常用的system等基本都被禁用了
1 |
|
那么我们就需要绕过disable_function
先用蚁剑连上,方便操作
绕过disable_function有很多种方法,但这里大都被禁用了,所以最后采用的是利用 LD_PRELOAD 环境变量来绕过
首先下载绕过代码
需要用到如下这4个文件
bypass_disablefunc.php:一个用来执行命令的 webshell。
bypass_disablefunc_x64.so或bypass_disablefunc_x86.so:执行命令的共享对象文件,分为64位的和32位的。
bypass_disablefunc.c:用来编译生成上面的共享对象文件。
对于bypass_disablefunc.php,如果有权限就上传到web目录直接访问,无权限的话可以传到tmp目录后用include等函数来包含,并且需要用 GET 方法提供三个参数:
cmd 参数:待执行的系统命令,如 id 命令。
outpath 参数:保存命令执行输出结果的文件路径(如 /tmp/xx),便于在页面上显示,另外该参数,你应注意 web 是否有读写权限、web 是否可跨目录访问、文件将被覆盖和删除等几点。
sopath 参数:指定劫持系统函数的共享对象的绝对路径(如 /var/www/bypass_disablefunc_x64.so),另外关于该参数,你应注意 web 是否可跨目录访问到它。
在回过头来看题目,/var/www/html
目录是没有权限的,/tmp
目录可读可写,所以将文件上传到/tmp
目录下
在code中用文件包含调用bypass_disablefunc.php
然后GET传入三个参数
会发现无法执行
检查一下bypass_disablefunc.php中的代码
比较后发现mail("", "", "", "");
中的mail被禁用了
可以使用mail
的封装函数mb_send_mail
来绕过
成功绕过
执行ls /
后执行/readflag
即可拿到flag
绕过open_basedir
看到这个环境还不错,顺手试了一下绕过open_basedir
因为是静态靶机,所以能看到其他师傅的马,直接包含,不用在上传了
1 |
|
哈哈哈哈,在线聊天室
蚁剑连接
可以看到根目录文件了
总结
这一题考点很多,并没有表面那么简单,学到很多新姿势
特别鸣谢:@Hel1antHu5师傅
参考文章:绕过Disable Functions来搞事情