看我如何绕过waf,拿下某985(母校)某系统

2020-06-09 约 223 字 预计阅读 2 分钟

声明:本文 【看我如何绕过waf,拿下某985(母校)某系统】 由作者 nglsth 于 2020-06-09 09:31:27 首发 先知社区 曾经 浏览数 23 次

感谢 nglsth 的辛苦付出!

前言

这个说来话长,先是学弟发现了弱口令,然后有可恶的waf,然后一起来绕一波,然后还有一波番外情节,先来描述一下番外情结

番外篇
在渗透这个系统的过程中,我抓包在js发现了被注释掉的另外一个网站,手滑顺手访问之,发现竟然和我学校的这个平台一模一样,因为学校有waf所以我就先搞这个一样的平台,同样弱口令进入后台,任意文件上传,getshell 一气呵成 然后 绕了bypassdisable 用的是
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD 这个大哥的脚本 这位大哥我是真的佩服 他在freebuf发的文章我也全部看过,真的厉害 回到正题 getshell后我发现这竟然是运维的服务器,后面提了一波权,非常可惜的是,redis反弹root权限shell回来后,我添加完用户,退出shell 去连ssh 发现密码不对..... 同时 我ps -ef 看了一下 瞬间 我的心中有一万只草泥马飞过, 我想一拳锤爆电脑,....redis被打下线了....我苦苦等待了几天,还是没有上线,......机会一去不复返.............运维的机器上有很多宝藏,以后日站可以找找运维的站,一般都会搭建相同的环境,当然比最后线上的脆弱许多.好了不bb太多了 说正文把

正文

进后台后,找到上传点,首先我发现改后缀后重新发包生成的文件的后缀没有变化,我第一次后缀是.jpg 第二次改成.x 但是显示上传成功还是jpg 此时有一丝不安涌上心头

接着我想是不是上图中的moudle值影响 然后我改了moudle值 发包 咦 上传成功 然后返回文件还是jpg 不慌 继续
然后我改了文件内容 在一发包 嘿嘿 返回文件后缀变成 x了 此时 心中已经是胸有成竹(应该是判断了文件内容,一样的话就不变,之前也没注意文件名..只盯着后缀了) 好像已经日下来了一样(没想到后面绕waf饶了好久)......

刚开始的时候 我发现只要一个包被waf检测到 那直接封几个小时.....我擦了...有这么变态的吗.................然后第一天果断放弃 玩玩游戏什么的不香吗.....

第二天晚上 有点无聊 打开burp 打开浏览器 访问之 , 这次我发包学聪明了,之前一发恶意包 然后wating 好久 然后connect reset 然后凉凉,这次我发现只要在waiting 我直接cancle 我发现这样竟然不会马上封我 可能因为 我提前断开连接了? 还是什么原因不知道 这样就可以继续fuzzing了
刚开始尝试就给我当头一棒 waf直接检测 <?php 不能出现php标签, 我想 这玩个屁, 只有用php短标签碰一碰运气了 关于php短标签 我是从百度上找的:
当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php 和 ?>,这告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被 PHP 解析器忽略。
PHP 也允许使用短标记 <? 和 ?>,但不鼓励使用。只有通过激活 php.ini 中的 short_open_tag 配置指令或者在编译 PHP 时使用了配置选项 --enable-short-tags 时才能使用短标记
因为需要开启一个配置选项,所以说只能是碰碰运气,没想到还真可以,发了个

<? echo 1111; ?>

浏览器访问只有1111出现,嘿嘿,讲到这儿又要说一下怎么绕过 filename='xxxxx.php' 这个地方waf的检测了,也就是如何上传php文件 开始试了几种

'xx.jpg.php' 'xxx.php.jpg'  截断 还有各种后缀 phtml pht php3 php4 Php 
filename='xxxxx.jpg';filename='xxxxx.php'

还有几种奇奇怪怪的模式 等等发现都绕不过 这时候想起来从别人那学到的垃圾数据,你别说,垃圾数据真给力,我生成了30w个1,发包! 一发入魂,成功让waf崩溃或者说waf对filename的长度没有处理什么的 如下图:

接下来继续说php文件的内容如何绕过waf,经过漫长的尝试我发现 eval() 不能出现 而且很多函数 比如 file_get_contents() 都是不能直接出现的 不过有一些函数可以通过

$a="file_"+"get_"+"contents"; $a();

这种方式来利用 但是不是所有函数都可以 什么 eval file_put_contents 都不行 本来准备利用 file_put_contents来写文件的这条路也不行了
还想到了 无字母shell

可惜直接传不行 需要在后面加一个左括号 ( 或者 右括号 ) 可能检测了括号的匹配对数 然后我尝试 注释掉多余的括号 但是发现 加了注释就绕不过了 ....
思考的时候,瞅了瞅以前绕waf的一些东西(所以说收集一些免杀东西什么还是有用的),直接放上去都不太行,不过我发现了一个比较关键的 那就是利用注释来进行混淆 几次尝试后发现

eval(/*-/*-*/$p/*-/*-*//*-/*-*//*-/*-*/);

这个不会被拦截,终于,我看到了希望,只要eval不被拦,什么都有戏,然后就是 如何构造这个$p了 直接

$p=$_GET['x'];$p=$_POST['x'];$p=$_SERVER['X']

这样都是不行会被封, 不过嘛还有 php//:input 关于php//:input流,我从百度找的介绍:
php://input :
php://input 是个可以访问请求的原始数据的只读流。 POST 请求的情况下,最好使用 php://input 来代替 $HTTP_RAW_POST_DATA

通过他能获取参数就是 那么基本的小马就形成了 如下:

我是希望利用上面这个小马来写文件,下面这个图是测试的phpinfo 就是上面这个图去掉file_put_contents的版本 具体的截图我找不到了...将就一下........


成功 发现disable了一些东西 刚开始也尝试过写cmd马 也没写成功 看来成功了也没用 给禁掉了

然后直接发包

file_put_contents('1.php',base64_decode('流量加密小马内容'))

还是我太天真了 直接给我封了 过不去 看来还需要一层加密 多加一层base64就ok

测试一下

nice!

直接写流量加密小马!

蚁剑访问之 看到了 绿色的连接成功 心中一丝舒爽涌上心头

end
写完这个文章也已经12点过了,过几天把漏洞交给学校.附赠一枚上面的小马,有需要的可以拿走.

关键词:[‘渗透测试’, ‘渗透测试’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now