声明:该篇文章仅供学习网络安全技术参考研究使用,请勿使用相关技术做违法操作。本公众号的技术文章可以转载,能被更多人认可本文的创作内容属实荣幸之至,请在转载时标明转载来源即可.也欢迎对文章中出现的不足和错误进行批评指正!
实战打靶系列第 26 篇文章
kali的IP:192.168.56.102
靶机IP:192.168.56.111
主机发现
使用nmap进行主机发现
这里发现192.168.56.111为新增加的IP,即为靶机IP。
端口扫描
主要使用你马屁、进行存活端口探测,包括端口服务的版本,操作系统等信息
这里看到靶机开放了22,23,80端口。
22端口运行着ssh服务,23端口运行着一个不常见服务,但是23端口可以使nc链接,80端口运行着http服务。
web渗透
使用浏览器查看80端口的http服务,发现是一个登陆界面。
针对登录界面,首先使用弱口令进行尝试,发现账号密码为admin/admin123,同时也可以使用sql注入万能语句进行密码绕过,这里万能语句的位置在username栏中,也可以使用hydra进行爆破,hydra对不存在验证码的http表单爆破很有效果。
这里首先找到我们提交的数据会提交到哪一个文件中。
第二要找到用户数据的提交格式及内容
第三要找到验证失败的返回相应特征。
这些信息足够hydra进行爆破和判断,使用hydra进行爆破。
这里也成功得到密码。进入后台并没有发现可以直接利用的漏洞点。
查看也面源代码,发现了一个全新的参数地址
是一个可以进行文件上传的站点。上传一个webshell,这里使用kali自带的webshell
上传完成后,在页面源代码中发现了上传的地址,
对webshell进行访问触发。
成功触发。
提权
信息收集
信息 收集并没有有用的信息,发现我们有root目录的访问权限,并发现了一个名字为win的文件,
文件里面使用wine运行了一套windows的可执行程序,Wine是一个可在Linux和其他操作系统上运行Windows应用程序的兼容层。它模拟所有必要的Windows环境和API,使得Windows应用程序可以在Linux中运行,而不需要任何Windows环境或虚拟机。简单来说,wine可以将windows可执行程序的语句逐条翻译成linux系统可以理解的语句。
在win文件中提到的路径中我们发现了两个文件
将文件下载下来放到windows环境中运行。
缓冲区溢出的利用
首先查看系统进程,
运行exe程序以后,再次查看进程,发现系统开启了23端口,
程序运行结果如图:
使用kali连接端口发生发送数据,这里手动发送数据太慢了,直接使用脚本,
这里使用2000个字符导致报错,使用msf-pattern_create生成一个2000个长度的字符串用于定位。理论上这个方法可行,但是实际上不知道为什么这里的字符串传不进去。我们换一种思路,首先生成1800个0,再用msf-pattern_create生成一个200长度的字符串,再进行查找。具体如下
经过调整以后成功获得偏移量,偏移量为1902,也就是说,1903,1904,1905,1906为EIP的位置,这里调整exp进行验证。
这里看到eip全部被B覆盖,接下来要查询坏字符。
可以使用github上面的脚本badchars进行生成所有字符,在用脚本传进去,传到我们要放置语句的地方,通过返回结果查看是否存在坏字符。
从00到ff之间有间隔,所以肯定有坏字符。经过测试,所有的坏字符为x4dx4fx5fx79x7ex7f。eip寄存器里面放着下一条语句执行的寄存器的位置,我们通过输入字符发现缓冲去溢出以后字符会先覆盖eip,后覆盖esp。所以我们能写入语句的位置使esp,所以在eip寄存器中要实现将程序跳转到esp中,但是eip中只能存放下一条语句的位置,所以我们要在程序中找到一条这样的语句,语句的功能使跳转到esp中,将这条语句的地址写入eip中,当程序进入eip以后就会执行跳转指令,跳到esp中执行恶意语句。明确思路以后就要进行操作。在汇编语言中语句jmp esp表示跳转到esp中,但是寄存器里面不可能存放一条语句,他存放的是语句的操作码,操作码都是固定的,可以直接搜索得到,也可以使用工具msf-nasm_shell实现,msf-nasm_shell是Metasploit框架中包含的一个交互式的汇编语言环境。
得到机器码以后要在程序中找到存在跳转语句的地方。在调试器左下角调用python脚本显示所有模块,
选择其中false多的选项,这里使用第二个,再在这个模块里面搜索jmp esp指令。
这里有两个地址里面的内容都是jmp esp,选择一个地址放在eip的位置上。继续构造payload,使用msfvenom生成paypoad。
-p指定生成payload的类型,-f c是指定payload以c语言源码的形式输出出来,-b指定的是payload中不能出现的字符,这里都是刚刚发现的坏字符,不管在什么语言里面,x00都表示截断,是坏字符,最后一个参数的意思表示如果程序崩溃,就以线程的形式结束程序。构造如图所示的最终利用脚本。
这里eip中 地址和我们寻找的地址相反,这里存在一个小端显示的问题,可以自己搜索,在加payload之前要添加几个字符表示划过,不要让payload和eip挨得太近,防止出现问题。注意要将IP地址修改为靶机地址,我们不是要渗透我们的windows机器。这里进行连接测试。
成功反弹shell,但是看起来是windows的shell,使用dir查看发现就是linux的根目录。
其实这里是将win的z盘映射在了linux的根目录中,至此靶机渗透测试结束。
参考资料:
https://www.aqniukt.com/goods/show/2434?targetId=16289&preview=0
原文始发于微信公众号(0x00实验室):VulnHub靶机- school | 红队打靶
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论