zoukankan      html  css  js  c++  java
  • skyler实战渗透笔记(十)—IMF

    skyler实战渗透笔记:

    笔记是为了记录实战渗透学习过程,分享渗透过程思路与方法。

    请注意:

    对于所有笔记中复现的终端或服务器,都是自行搭建环境或已获授权渗透的。使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。

    0x00 前言

    0x01 信息收集

    0x02 渗透get shell

     

    0x00 前言

    欢迎来到我的第一个Boot2Root虚拟机“IMF”。国际货币基金组织是一个情报机构,你必须侵入所有的旗帜,并最终扎根。旗子一开始很容易,随着你的进步变得越来越难。每个标志都包含对下一个标志的提示。我希望你喜欢这个虚拟机,并学到一些东西。

     困难:初学者/温和

     

    0x01 信息收集

    老规矩,找一下目标机器

    确定IP,看看端口

    0x02 渗透get shell

    就开了一个80端口,那么访问下看看,根据前面背景,有很多flag并且从易到难一步一步循环递进的,那么话不多说,开启F12,每个页面都搜一遍flag:

    搜到第一个flag,发现是个base64,解密看下:

    提示是all the files,看了下每个页面的js文件,第三个明显是base64加密,但是解不出来,看前面两个也像是,那么组合起来试下:

     

    解出来flag2,并且也是个base64加密的字符串,解码看下:

     

    解出来没太看明白啥意思,那么直接访问试试:

    发现是个登录窗口,有一个登录表单,随便填个admin/123登录抓包看下:

     

    发现注释里说明了,sql没法工作,采用硬编码密码的方式,那么说明密码直接写在代码里,并且应该是使用字符串对比来进行判断是否相等。另外看了下返回信息,提示用户名不对:

     

    那么看来用户名不是user,从网页上找一下:

    发现了三个用户名,分别试了下,rmichaels可以用,使用这个发现提示密码不对: 

      

    如果是硬编码的,猜测他使用了strcmp函数,strcmp()是对于相等的字符串返回0,不同的字符串返回非0,但如果比较非字符串,strcmp()将返回null。在php中null==0是true。使得数组看起来与硬编码的密码字符串匹配。

    所以此处传一个数组,将pass字段重命名为pass[]

    用户名使用rmichaels,将pass字段重命名为pass[],成功获取到了flag3

    看到了flag3,并且给了个跳转。这里burpsuite查看跳转不方便,我们从firefox里构造post请求

    点击这个链接,跳转到了另一个页面:

     

    随便点了点,没什么发现,但是看到url里带参数不停地在变,简单尝试一手:单引号

     

    OK,存在sql注入,那么放进sqlmap泡一下: 

     

    提示cookie无效,那么从真实环境里抓包复制cookie并在sqlmap里指定: 

     

      跑出来结果确实存在sql注入

      

    那么继续跑表看下:

    sqlmap -u http://192.168.245.151/imfadministrator/cms.php?pagename=upload --cookie "PHPSESSID=sq62aeus2872qoiep9rhtl3mb2" --current-db

    sqlmap -u http://192.168.245.151/imfadministrator/cms.php?pagename=upload --cookie "PHPSESSID=sq62aeus2872qoiep9rhtl3mb2" -D admin --tables

    sqlmap -u http://192.168.245.151/imfadministrator/cms.php?pagename=upload --cookie "PHPSESSID=sq62aeus2872qoiep9rhtl3mb2" -D admin -T pages --columns

    sqlmap -u http://192.168.245.151/imfadministrator/cms.php?pagename=upload --cookie "PHPSESSID=sq62aeus2872qoiep9rhtl3mb2" -D admin -T pages --dump

    发现了两个图片的路径,尝试访问下第一个:

     有个二维码,扫一下:

    扫出来发现是一个flag4

    解开base编码:

     应该就是一个上传页面了,访问下:

    先传一个一句话木马试试:

    不支持php文件,那么应该只能传图片类的,随便找个图片在后面加上一句话语句,做个一句话图片马:

    好吧,还有waf,看来一句话是不管用,得找个过waf的木马,这里选择kali自带的weevely

    复制做出来的text.php里的内容,利用gif欺骗的原理,在木马前面加上GIF89a:

    然后把后缀改成gif,上传成功:

    成功传上去后,查看响应中包含了图片的路径:

    尝试用weevely连接,链接成功:

    weevely http://192.168.245.151/imfadministrator/uploads/2b88488881a7.gif zxp

    看到目录下有个flag5的文件,查看下:

    解码一下:

     agent,代理服务,看来下面要通过代理连进来,那先找一下本地的代理文件:

    find / -name agent &2>/dev/null (这里用&2>把报错的信息输出到黑洞里,防止干扰视线)

    执行一下这两个文件:

    查看当前监听的端口:

    发现多了一个7788,说明代理在执行

    但是重新用nmap扫描,发现还是扫不出这个端口来,猜测应该也是隐藏了,需要knock敲门按序列访问端口来解开iptable的隐藏规则:

    到/usr/local/bin目录下查看access_codes发现端口序列:7482 8279 9467

    尝试用knock敲门试下:

    敲开了7788端口。尝试nc访问下:

    需要一个agent ID。那这个ID只能从agent本身来入手了,先尝试把agent拿下来:

    复制到web目录,直接在kali中wget访问下载:

    是个ELF可执行文件,那么用ltrace跟踪下程序堆栈看看:

    fgets取一个前台输入的数据,先随便输入一个看看:

    发现程序是通过strncmp函数对比输入和写死的一个数字ID,那么这个48093572应该就是agentID了

     这边ID正确,其中选项2和3可以让用户输入内容,
    如此看来是要通过缓冲区溢出7788端口的agent程序,这边用二进制修改exp
    为该程序创建一个利用程序,首先为msfvenom有效负载创建一个shellcode

     利用二进制py修改exp进行提权
    将文件写入本地agentsploit.py中

    flag6{R2gwc3RQcm90MGMwbHM=}

    Gh0stProt0c0ls

    这台靶机,涵盖了知识量挺大的,从熟悉BP、写木马、gdb拆解、二进制、缓冲区溢出等等,花了太多时间

  • 相关阅读:
    流程控制引擎组件化
    (七):C++分布式实时应用框架 2.0
    (六):大型项目容器化改造
    (五):C++分布式实时应用框架——微服务架构的演进
    (四):C++分布式实时应用框架——状态中心模块
    (三):C++分布式实时应用框架——系统管理模块
    (二): 基于ZeroMQ的实时通讯平台
    (一):C++分布式实时应用框架----整体介绍
    分布式压测系列之Jmeter4.0第一季
    选择 NoSQL 需要考虑的 10 个问题
  • 原文地址:https://www.cnblogs.com/Shepherdzhao/p/15501670.html
Copyright © 2011-2022 走看看