skyler实战渗透笔记(十)—IMF
skyler实战渗透笔记:
笔记是为了记录实战渗透学习过程,分享渗透过程思路与方法。
请注意:
对于所有笔记中复现的终端或服务器,都是自行搭建环境或已获授权渗透的。使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。
欢迎来到我的第一个Boot2Root虚拟机“IMF”。国际货币基金组织是一个情报机构,你必须侵入所有的旗帜,并最终扎根。旗子一开始很容易,随着你的进步变得越来越难。每个标志都包含对下一个标志的提示。我希望你喜欢这个虚拟机,并学到一些东西。
困难:初学者/温和
老规矩,找一下目标机器
确定IP,看看端口
就开了一个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拆解、二进制、缓冲区溢出等等,花了太多时间