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拆解、二进制、缓冲区溢出等等,花了太多时间

 

posted @ 2021-11-04 23:06  XuepengZ  阅读(163)  评论(0编辑  收藏  举报