CISCN2019 华北赛区 Day1 Web2 ikun

Posted by CoCo1er on 2019-09-23
Words 432 and Reading Time 1 Minutes
Viewed Times

CISCN2019-华北赛区-Day1-Web2-ikun

尝试

  • 首先注册账号,对于这种框架下的登陆框,压根没敢想过会有什么SQL注入。

  • 在页面中发现hint:需要购买lv6,但是翻了好几页都没有找到lv6,于是用python脚本来处理

    发现在181页可以购买lv6,但是价格太高无法购买

漏洞利用

薅羊毛逻辑漏洞

在页面中发现post表单,里面有对价格和折扣的定义。竟然前端处理,可以直接更改(也可以抓包后更改重放)。将折扣改成0.00000000000008,便可以低价购买到lv6

注意:这里不能直接将价格/折扣改成0,此处的逻辑漏洞应该有对0进行过滤,只能改成一个无限小的数来进行利用

JWT伪造

​ 购买lv6后,转跳至一个隐藏路由,显示需要admin才能访问。

​ 抓包发现有JWT,想到jwt伪造

将伪造的JWT替换后成功以admin登录,并在源码中发现www.zip

python反序列化

​ 在Admin.py中存在反序列化漏洞。这里涉及到一个库pickle,上网查了一下python反序列化,提到较多的就是这个pickle(还有YAML)

这里的Tonado框架中self.get_argument函数获取POST/GET来的become参数,并执行了pickle.loads()函数。这里就存在反序列化漏洞。

(初次接触到pickle反序列化,后续补篇博客详解一下原理)

exp:

1
2
3
4
5
6
7
8
9
10
import pickle
import urllib

class payload(object):
def __reduce__(self):
return (eval, ("open('/flag.txt','r').read()",))

a = pickle.dumps(payload())
a = urllib.quote(a)
print a

将结果替换become参数的值,得到flag回显