前言
今天本来应该过6.1儿童节的,恰巧昨天和mrx渗透的一个站上传还没有绕过,早上mrx和我就开始重新看看,先说一下背景,首先通过弱口令进了后台,经过一番寻找发现了如下配置
看到这个,已经胸有成竹,接下来就是常规的加上php后缀,并且上传一波,于是我来了一发如下:
waiting了很久有waf检测 我直接 cancle了,接下来就是有趣的绕waf,我绕了3个小时,各种奇葩姿势都弄出来了,比如下图
都改成这个鬼样子了 还是过不鸟 尝试过各种一般用的过waf的方法:
1.jpg.php 1.php.jpg 1.php%00.jpg filename=1.jpg filename=1.php Content-Disposition: form1-data; name="Filedata"; filename="3.php" Content-Disposition: form-data; name="filename"; filename="3.jpg" .php filename="垃圾数据 30w".jpg.php
因为系统是windwos的 利用windows特性 文件如果以::$DATA结果那么这部分自动会被去掉 所以配置允许后缀为php::$DATA,拿去发包,waf直接检测到,我改为 ::data 就可以发包但是返回保存出错,同理我利用? . 等windows特性尝试绕过(如果这些特殊字符比如? . ! 等在文件名结尾的时候有一定几率被直接去掉),把这些特殊字符作为文件结尾进行尝试结果全部以失败告终,失败原因都是和下面这个图片一样
尝试用长文件名截断同样失败
等等等等 还尝试了各种后缀
pht,php,phtml,php3,php4,php5,php6,php7,aspx,asmx,asp,jsp,jspx
我的心情如下:
全都告以失败,弄到了前一天的晚上12点,还是拿不下,于是洗澡睡了.........
第二天 也就是 6.1儿童节 又开始一杯茶一包烟一个破站绕一天.........
正文
其实前一天晚上我就想到了这种方法,但是嫌麻烦就没试,今天没办法了,实在是绕不过,于是尝试使用这种方法,利用内网ip或者是ip白名单来绕过waf,如果两个服务器在同一个内网,那么他们之间互相访问可能并不会经过waf在的服务器,又或者是ip白名单的原因导致这样有可能绕过waf,因为之前拿过和这个站同属一个体系的另外一个站,所以我想试试这种方法,我在已经拿到shell的那个站上(可以出网),ping 现在这个站 解析的ip 并不是内网ip 心中有一丝灰暗掠过....管他的,只有试试了,说明一下已经被getshell的站我称为A站,A站为linux环境,现在这个还没拿下的称为B站.
首先我要在A站上弄一个socks代理 然后通过这个代理我去访问B站,然后上传,因为A站是在内网,所以我先尝试用web代理,用的是这个Neo-reGeorg,流量加密版 reGeorg,但是用之前我就感觉成功率不高,因为php版本的这个代理不是很好用,之前没有使用成功过,不过asp,aspx的倒是很好用,我将本地端口8888与A站上的tunnel.php 建立连接 然后我用burp走 8888 端口,结果失败,连接有问题,这是预料之中的,那就换一种代理方法,既然可以出网,可以用ew 让他 与我的公网vps 建立连接,然后我通过我的vps对应的端口走代理,这里就不详述了,因为当时觉得这种方法比较麻烦,既然我已经有一个shell并且可以执行命令了,而且有curl,那我为什么不直接通过curl 来发post包上传呢 于是搜索了一下curl的使用方法,如果要用curl传文件 必须要用 -F 选项 使用了-F参数,curl会以multipart/form-data的方式发送POST请求。-F以key=value的形式指定要上传的参数,如果是文件,则需要使用key=@file的形式
然后现在我的vps上测试了一下直接给B站发上传包成功了,ok,咱们直接上A站发包
sessid=1590980086 和 moudl=content 都是上传包需要的
可以看见我们成功绕过了waf,因为之前上传如果是php后缀都是直接封掉不会有返回包,现在没有被封,说明已经绕过了waf,这两台机器应该在同一内网,但是为什么会出现上传类型不允许呢,而且我已经在配置中设置了允许php后缀,如果看过我前面审计发卡平台文章的兄弟应该已经明白了,虽然设置了允许php后缀,但是我猜测后台应该是大概长个样子:
$store=['jpg','png','php'] #类似这样 如果我设置了允许php后缀 那么 php就会被加入这个数组 $ext视为获取的文件后缀名 if(in_array($ext,$store)&&$ext!="php"&&$ext!="php3"&&$ext!="pht"...){ 类似这样 上传操作 } else{ echo "上传类型不允许"; }
这样子的话就很好绕过了,在windwos条件下 文件名称最后如果有空格那么是会被去掉的,利用这个特性就可以轻松绕过,配置一下允许上传的后缀
然后上传
到这里我以为基本已经拿下 访问之 没想到404 难道没传上去? 于是我把php后缀换成了p 方法完全一样 在配置中增加 p空格 然后上传 访问发现是成功去掉最后的空格并且上传成功了的 那应该就是设置了配置文件 设置某个目录下 访问php文件就返回 404 那这时候需要跨目录去别的目录,我发现上传包中的 module参数的值 content是被放到了 上传后的文件路径中 我加入 ../ 发包 一发入魂 成功跨目录
蚁剑访问之 看到了 绿色的成功连接 心中一丝舒爽........
站群的截图就不放了 执行命令一发whoami 哦哟
end
这应该是个梦把.......