写了一个多月的各种方案,终于抽个空可以做点技术活了
测试一个单位,其中一个官网,点进去一看,质朴中透露着一股有问题的气息,看了一下架构:IIS PHP,美妙的组合。
迅速定位到了一个点可能存在注入,但是,有waf:
这么老的站,没注入你设waf干嘛?此地无银三百两,肯定有注入,上网搜一下wts-waf,一搜发现,绕过很简单,空格改成 即可,于是乎,我尝试了一下:
???
还有限制,大概是因为 = ,改成 like:
成了啊,这不妥妥有注入?
Sqlmap一把梭
然后。。。
IP没了,sqlmap一片红。。。仿佛是目标在说
这封IP,是不是访问太多太快了?
写个脚本,sleep(3),慢点就慢点吧,暴个库名收工吧。结果还是封,那手注吧,于是我被waf锤了一下午,总结出一下边界触点:
- 联合查询注入select后面不能跟字符
- 不会报错
- 时间盲注不能用sleep函数
- 不能用/**/
- 这一类会被拦截
- 。。。。
第二天清早起床,拥抱阳光,我又觉得我行了,还是绕绕吧,手工fuzz一下关键词,结果发现一个神奇组合可以使用:--
select后面跟上-- ,即union select -- 1,2,3-- 即可绕过:
感人肺腑
Union联合查询找到表:
于是通过这个方法,顺便花了一块钱解密md5,成功拿到后台管理员密码
在后台一顿乱翻,找到一个点可以上传文件:
和其他的上传点一样,这个上传点也是有很多限制的,比如只允许上传.jpg、会对上传内容做静态查杀,仔细去测试上传的包:
第一个filename是对上传文件进行命名,第二个attachPath,是上传路径,第三个是正常的上传核心内容,filename的值会决定后端如何比较文件内容
既然是IIS PHP,肯定是先试试00截断,果然成了。。。
而且还真能访问到:
当然这是一个带着phpinfo的马,这是不是可以内网整整了?
现实当然没有这么简单,这么简单的话就不需要写这篇了,没过两分钟,马没了,00截断上传php文件也不行了。。。
再上传回包是:
从我这张全是马赛克的图里,老司机们应该能迅速反应过来,代码的后端逻辑其实是先将上传的文件重命名为x.tmp存在缓存文件夹中,再重命名为我们之前filename设定的名字移动到指定的web目录下。
所以对方应该是做了策略,使php文件无法在缓存文件夹下落地!
揣摩一下对方的思想,应该是黑名单吧?
那我试试 phtml、php3、php4、php5…
果然都不行。
我灵机一动
IIS的,传个ASPX试试,结果显示 “脚本不支持” ,传个asp,结果和传php一样。那就试试ashx、asmx、ascx、cer…
果然 cer可以:
然后:
第二天,马没了,密码改了,注入不行了,我哭了。。。
作为全公司最努力的致力于发展台球事业的员工,怎么能就此被打倒?
Fuzz一下sql注入,它把information_schema给?️了
???
由于某些不可抗力,后续无实际测试图,但是本地搭了个环境,写一下怎么做的去绕过这个规则:
payload:
-1 union select 1,`2`,1 from(select 1,2,3 union select * from user)a limit 1,1--
这样就可以做到只要知道表名就可以不用information_schema注入出数据,那如果我之前就没有获取到表名呢?
那就使用 payload uid=1 and exists(select * from user1)--
使用payload uid=1 and exists(select * from user)--
配合上之前的绕过规则,再花一块钱,又可以获得管理员的密码了...