前言:

战队里的石头师傅给了一个靶机让我们玩玩,反正我也菜,试试靶机正好可以自我学习一下,所以话不多说我们直接开始吧。

靶机地址:http://redteam.0xc2.cn/

正文:

打开靶机之后,看起来好像没什么东西可以操作,简单的先进行目录和端口扫描一波。使用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

但是好慢…我这里很久都没有出结果,所以还是用之前的那个脚本,人工改了一下

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)

这样速度快,我一位位的添加就可以了 最终获得了入群密码..

发表评论

电子邮件地址不会被公开。 必填项已用*标注