前言:
战队里的石头师傅给了一个靶机让我们玩玩,反正我也菜,试试靶机正好可以自我学习一下,所以话不多说我们直接开始吧。
正文:
打开靶机之后,看起来好像没什么东西可以操作,简单的先进行目录和端口扫描一波。使用nmap -sS 简单的扫描了一下,发现好像没什么可以用的。但是在目录扫描里发现了一些有用的东西。把4xx和5xx的过滤掉之后,如下
一看这目录,这不是wordpress嘛,感觉进入wp-login.php页面看看有没有弱口令,但是尝试了一些弱口令(失败 ,感觉这条弱口令这条路走不通,再看看别的目录,还有一个/wp-includes/的目录里面感觉有不少东西,但是仔细点进去发现都是空白的,所以暂时放一边。还是再去看看那个登陆框那边有什么东西吧(毕竟只有那个地方感觉有东西了。
wordpress在印象中有很多历史漏洞,所以如果我们可以知道这个wordpress的系统版本的话,应该就可以去网上找对应的文章了。
之前看文章有见过在network里面泄露框架版本信息的所以一看好像的确泄露了什么,这个4.6 应该是wordpress的版本吧...
wordpress 版本 4.6 + 登陆框
找到了这篇文章:https://xz.aliyun.com/t/2301
这下终于有思路了,本以为照着文章复现就可以了没想到后面出现了一些非预期的问题. .(还是我太菜了
复现过程:
根据文章所说,漏洞页面出现在http://redteam.0xc2.cn/wp-login.php?action=lostpassword 这个页面。
这个漏洞的原理主要是这样的,由于这个页面是一个找回密码的页面,漏洞出现的组件是class.phpmailer.php 由于linux系统命令sendmail
进行邮件发送,命令格式为:sendmail -t -i -fusername@hostname
,sendmail -t -i似曾相识,之前写过putenv绕过disabled_function 也是利用了sendmail -t -i
这里由于 sendmail文件可以发现它是一个链向exim4的软链接文件,所以我们可以利用sendmail -be 这样来读取一些变量的数据,然后截取。
空格 转化成 ${substr{10}{1}{$tod_log}}
/ 转化成 ${substr{0}{1}{$spool_directory}}
然后后面我就按照文章的payload来了,但是试了之后怎么弄都不对,因为文中是返回状态码301,而我这里返回的则是200。当时的我就觉得非常的古怪...
还去docker弄了环境试了试admin发现docker可以,为啥这个网页不行...
现在回想当初真的是够蠢的...返回的信息都没怎么看,主要还是没有admin的账号,试了试 root Admin admin123 这种之后发现都不行, 后面机缘巧合输入了test,成了!接下来的就是按着来了
也就是我遇到的第二个坑...
按照文中的payload,我这里就是不行,就非常的古怪...卡了我一个上午...至今还是没想通,后面会结合poc分析一下到底是哪里的问题..
想了一下,明白了我们这里不能远程发送到服务器下,我在看了poc之后发现poc里面也是localhost,所以我们需要在攻击机上执行payload,而不是第三方机子来使得数据发送到攻击机上..
实在没办法,所以只能先用一手poc
进行反弹shell命令执行
获取了flag和入群的题目..
爆破
由于之前那题ctf题目的影响觉得只要符合就可以了...所以就开始瞎爆破..(自己蠢
但是问了群主,群主说让我从一开始爆破,于是写了个小脚本..
import hashlib
from numba import jit
# @jit(nopython=True)
for i in range(100000000):
res = hashlib.md5(str(i)).hexdigest()
if res[:6] == "1024cc":
print(i)
break
Code language: PHP (php)
但是好慢...我这里很久都没有出结果,所以还是用之前的那个脚本,人工改了一下
import itertools
import string
import hashlib
import time
def burp(x):
code = ' '
strlist = itertools.product(string.digits,repeat=7)
for i in strlist:
code = i[0] + i[1] + i[2] + i[3] + i[4] + i[5] + i[6]
encinfo = hashlib.md5(code.encode('utf-8')).hexdigest()
if encinfo[:6] == x:
print(code)
if __name__ == '__main__':
start = time.time()
code = "1024cc"
burp(code)
end = time.time()
print(end-start)
Code language: JavaScript (javascript)
这样速度快,我一位位的添加就可以了 最终获得了入群密码..