Hackinglab解密关第一题”以管理员身份登录系统“解题思路

以管理员身份登录系统 分值: 450

以管理员身份登录即可获取通关密码(重置即可,无需登录)
通关地址
补充说明:假设除了admin用户,其它用户的邮箱都可被登录获取重置密码的链接。
 
这道题提示很明显了,伪造admin重置密码的链接,发送这个链接重置管理员密码即可拿到key。
 
首先随便输个邮箱重置密码试一下,抓包发现包里存在三个参数,一个是cookie里面的Cookie: PHPSESSID,由于我对php并不了解,因此又换了一个邮箱重置密码,抓包测试该cookie会不会变,发现不会变,那么关键点多半不在cookie里面。第二个参数是username,这个没什么好说的,伪造请求的时候改成admin就好了,但是单独改了这个参数之后将请求发出去,发现并无卵用,于是看向第三个参数:
sukey,该参数在返回的重置密码的超链接里面。数了数该参数的位数,32位,长得又像md5,因此初步推测是将某种信息进行md5之后的值。那么,将admin重置密码链接的sukey爆破出来,伪造一个请求不就可以拿到key了吗。难点在于怎么找到这个sukey
首先猜测sukey是将用户名进行md5之后得到的哈希值,来做一个小小的验证:随便输入一个邮箱:123@163.com,获取该邮箱重置密码请求的sukey,拿到https://www.somd5.com/上一解密,结果是1523349779
????????
和想象中的123@163.com完全不一样,因此猜测不是将用户名md5之后的结果。
这时候不懂就问百度,百度的结果说像是一个时间戳,那么猜测sukey是将时间戳进行md5之后的哈希值。
时间戳的哈希的话,完全可以生成一个时间戳哈希的字典,逐一进行爆破。
由于我对php的时间戳并不了解,因此我的思路是将当前获得的一个时间戳设置为起点,每次将其+1,计算哈希之后存入文件。比如说我当前获得的时间戳是1523349779,那么就计算区间(1523349779,1523349779+400]中每个整数的哈希值并存入文件(我猜测每次+1就是+1s,如果是毫秒或者更小,我们再将区间拉大并逐一计算哈希就好了),python代码如下:
import hashlib
def md5String(str):
    myMd5 = hashlib.md5()
    myMd5.update(str)
    myMd5_Digest = myMd5.hexdigest()
    return myMd5_Digest

if __name__ == '__main__':
    f = open("md5.txt","wr")
    for i in range(1523349779,1523349779+400,1): #此处写你捕获的时间戳的值
        f.write(md5String(str(i)))
        f.write("\n")
    f.close()

计算得到的hash如下:

然后我们将重置密码的get请求送往Intruder,将sukey=§c447352e51484367f7073f9ce06cc019§设置为载荷,将username设置为username=admin(当然,之前你需要先向服务器发送一个重置admin密码的请求),在payloads里面的payload Options [simple list]里面点击load,将txt文本里面的hash加载进去,然后点击start attack.

等待爆破的过程中点击length对返回的请求做一个排序,当爆破到正确的hash的时候会发现有一个response的长度格外的与众不同:

点击response就可以看到flag了。

当然,厉害的也可以自己写python脚本,一边生成hash一边发送请求并对返回结果进行判断。我没有这个本事,只能用burpsuite进行爆破。

转载于:https://www.cnblogs.com/Kog-Maw/p/8780721.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值