信息收集
1、存活主机探测
存活主机为192.168.23.137, 本机IP为192.168.23.129
如果只是内网可以用arp-scan -l
2、端口扫描
端口信息提取
3、详细信息扫描
sudo nmap -sT -sV -sC -O -p10000,9999 -p 192.168.23.137 -oA detail
看到9999,10000端口是开放的,abyss没查到是啥,中文是深渊的意思,还有就是开启了http服务,也看到是用python2.
再用udp扫描,看看有没有可用信息。
端口都是closed说明没有udp端口是开放的。
4、漏洞脚本扫描
脚本扫描没有可用信息
5、目录扫描
发现有很多返回的状态是404 ,需要加–hc 把404 过滤了
目前可看出有个bin目录,访问是个windows可执行文件,
下载下来,检查一些基本信息,看看是否不会是恶意软件
发现瑞星和越南一家公司报毒。
file 查看文件基本信息,是windows下的可执行文件,binwalk查看有没有被捆绑,没有捆绑文件,strings 查看一下字符串,看看有没特色字符串,发现shitstorm字符串,先记录下来。
将brainpan.exe拿到windows环境中运行,kali连接看看,显示ACCESS GRANTED.
在windows上显示 copied 10 bytes to buffer.
总结:扫描端口,漏洞等一些必要测试后,出来这个程序,其他没有发现任何可以利用的点,那唯一的可能就是这台靶机,就是需要我们利用换缓冲区溢出漏洞来拿下它。
漏洞测试
缓冲区溢出漏洞
当程序试图向缓冲区写入数据时,如果写入的数据量超过了缓冲区能够容纳的最大长度,就会发生溢出。溢出的数据可能会覆盖其他内存空间的数据,导致程序运行失败、系统崩溃或执行非授权指令。利用方式其实就找到被覆盖的返回地址,从而控制程序的执行流程,执行shellcode.具体实现步骤如下:
1、先找到能覆盖堆栈的大致数据值。先写个脚本,每三秒发一次数据,然后不叠加100.
利用python脚本完成操作。代码如下:
windows中用运行brainpan.exe程序,运行,kali中运行脚本。
windows上可以看出,大致在500-600之间。
2、找到溢出点的位置
修改python代码
buffer是用msf-pattern_create 生成的字符串,用于找到溢出点。
windows上使用Immunity Debugger打开brainpan.exe程序并运行。
发现Immunity Debugger的EIP为35724134,利用msf-pattern_offset -l 600 -q 35724134 找到位置为524, 在修改代码中buffer的部分。
a524是溢出点的位置,b4是放跳板指令的位置,c将放exp,这里要先将代码中buffer中的“C”的值乘500,看看可写入的空间最大值是否能够放下我的exp。
这里发现是468字节,可以我放下的exp的,另外还要找坏字符,在c语言中0x00的作用是截断,在使用时,提去除像00这样的坏字符。
3、找出坏字符
输出所有字符
在重新发送,然后在Immunity Debugger查看,在寄存器窗口,右键点击esp,在点击Follow in Dump,然后看内存窗口。
这里发现,出来0x00之外没有坏字节。
4、找到ESP , 即跳板指令
看一下jmp esp的操作码
用mona.py列出程序中所有模块,在从包括jmp esp汇报码的模块中找到对应地址。
找到地址为0x31172f3,在代码替换掉B*4的为jmp esp指令地址,因为是小端显示,所有要反写上地址。
5、生成payload
将payload 添加到代码中,运行查看,发现利用成功。
漏洞利用
1、换成linux系统shellcode,在攻击靶机试试。
然发现攻击也是成功,ip是对的。
权限提升
1、更改一下交互,
python -c “import pty;pty.spawn(‘/bin/bash’)”
在当前目录下,发现checksrv.sh. 打开后可以看出,它是用wine模拟器运行的brainpan.exe程序。
sudo -l 查看一下当前权限。
看到/home/anansi/bin/anansi_util 可以不用密码使用root运行。
运行后发现需要参数,添加 manual 查看 whoami 手册。
使用!/bin/bash成功提权。