目录
1.数据库注入 - access mysql mssql oracle mongodb postgresql等
2.数据类型注入 - 数字型 字符型 搜索型 加密型(base64 json)等
案例演示-墨者-SQL注入漏洞测试(POST&sqlmap)
知识点
1、数据表现格式类型注入
2、SQL注入数字&字符&搜索&编码&加密等
3、明确 SQL 盲注延时&布尔&报错
sqlmap参考资料
sqlmap使用:https://www.cnblogs.com/bmjoker/p/9326258.html
sqlmap文档手册:https://sqlmap.kvko.live/
扫描,利用工具等都不会自动判断数据类型,格式等,所以即使有漏洞也测不出来,具体还是需要人工的去观察,进行工具的修改或加载插件再次探针才可以。
SQL注入类型介绍
1.数据库注入 - access mysql mssql oracle mongodb postgresql等
2.数据类型注入 - 数字型 字符型 搜索型 加密型(base64 json)等
数字型:0-9,在开发程序里,数字通常不需要单引号,所以不需要闭合
字符型:a-z 中文 标点符号,字符需要单引号或双引号进行概括。那么在sql注入中需要考虑到符号的闭合,才能进行注入。
搜索型:搜索文章或者数据,在基础上加入了通配符,需要考虑到闭合通配符。
编码型:数据以编码值传递。数据进行编码接受处理:发送编码值,对方常会进行解码后带入数据在进行sql注入。所以在注入时,我们也要尝试对注入的payload进行编码后提交。
加密型:数据以加密的密文去发送
格式型:JSON 数据的表现形式是json的格式,通常也用单引号闭合。
3.提交方式注入 - get post cookie http头等
get:通常在url中进行参数的传递
post:利用post传参工具或者在数据包底部进行传参
cookie:在cookie信息中进行传参
http头:在http头部进行传参
4.查询方式注入 - 查询 增加 删除 更新 堆叠等
盲注
介绍
盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
解决的问题:常规的联合查询注入不行的情况
1、查询方式增删改查四种特性决定,部分是不需要进行数据取出和显示,所以此类注入
基本上需要采用盲注才能正常得到结果(黑盒测试可以根据功能判断注入查询方式)
2、查询方式增删改查四种特性决定应用功能点(会员注册,删除新闻,修改文章等)
分类&条件
-基于布尔的 SQL 盲注-逻辑判断-有数据库输出判断标准 :regexp,like,ascii,left,ord,mid
-基于时间的 SQL 盲注-延时判断-无条件 :if,sleep
-基于报错的 SQL 盲注-报错回显时可以进行报错注入-有数据库报错处理判断标准:floor,updatexml,extractvalue
报错注入参考资料: https://www.jianshu.com/p/bc35f8dd4f7c
详细解释
数据类型注入-字符型&搜索型&编码型&JSON型
字符型
select * from inkbamboo where a='g' 假设这条语句为代码中查询的sql语句
simple' order by 16--+ 该语句是要进行注入的语句
select * from inkbamboo where a='simple' order by 16--+' 语句融合
融合语句解释:'simple'被闭合了,order by 16进行了列数的查询,--+注释了后面的 ' ,这样就形成了注入。
搜索型
select * from inkbamboo where name like '%$s%' 假设这条语句为代码中查询的sql语句
%' UNION+ALL+SELECT+1,database,2,3,4,5 and '%'=' 该语句是要进行注入的语句
select * from inkbamboo where name like '%%' UNION+ALL+SELECT+1,database,2,3,4,5 and '%'='%' 语句融合
融合语句解释:'%%'进行了闭合,UNION+ALL+SELECT+1,database,2,3,4,5为database的查询语句,and '%'='%'进行了与运算让后面数据直接为真,这样'%'就只进行了运算,不会起到其他作用。
编码型
http://localhost:8080/blog/news.php?a=MQ== 假设这为某页面的url
1 union select 1,database(),3,4,5,7 注入语句
MSB1bmlvbiBzZWxlY3QgMSxkYXRhYmFzZSgpLDMsNCw1LDc= base64编码
http://localhost:8080/blog/news.php?a=MSB1bmlvbiBzZWxlY3QgMSxkYXRhYmFzZSgpLDMsNCw1LDc= 融合语句
融合语句解释:url是以==结尾的,那么证明a所接受的参数为base64编码,那么后面的得注入语句也要遵循base64编码的格式。
JSON型
原理:下面是一个简单的json格式数据,当把数据取出来时,并不会取出双引号,而且取出来的值默认是以单引号包含的。所以在进行注入时需要考虑单引号闭合。
提交方式注入&post注入案例
<?php
header("Content-Type: text/html; charset=utf-8");
$get=$_GET['g'];
$post=$_POST['p'];
$cookie=$_COOKIE['c'];
$request=$_REQUEST['r'];
$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。
$host=$_SERVER['HTTP_HOST'];
$user_agent=$_SERVER["HTTP_USER_AGENT"];
$ip=$_SERVER["HTTP_X_FORWARDED_FOR"];
案例演示-墨者-SQL注入漏洞测试(POST&sqlmap)
手工注入
进行登录并抓包,可以发现时post传参,那么就要利用post方式进行注入
name=mozhu' order by 3#
代码解释:mozhu' 进行字符串闭合,利用order by 3查询列数,#注释掉后面的 '
order by 4直接报错,而3显示的是账号密码错误,证明列数为3
name=mozhu' and 1=2 union select 1,2,3#
这道题在报出显示位的阶段就可以直接获取flag
SQLMap方式
将抓包的数据复制到文件中,在注入点出添加*表示在该位置进行注入,在将文件放到sqlmap工具的目录中
在cmd直接使用python调用sqlmap,-r代表指定文件
通过得到的数据可以知道是MySQL数据库5.0版本,并且获取一个payload,将payload放到数据包中执行后,获取flag。
盲注
SQL-盲注&布尔&报错&延时
黑盒角度:如果是从黑盒角度需要依靠功能点进行分析,功能点不同面向的SQL语句不同
白盒角度:从代码审计的角度去查看需要查看功能语句、函数或页面,根据不同的sql语句注入方法也不同
查询-select-布尔盲注
需要有数据输出,根据注入语句的返回值来进行数据的猜测,通过一些函数进行对数据的猜解
黑盒角度:通过查询操作寻找有没有select操作
插入-insert-报错盲注
当数据有错误回显时可以进行报错盲注
黑盒角度:通过插入操作寻找有没有insert操作
更新-update-报错盲注
当数据有错误回显时可以进行报错盲注
黑盒角度:通过修改操作寻找有没有update操作
删除-delete-延时盲注-举例
需要有页面的回显来进行时间的判断-yyds
黑盒角度:通过删除操作寻找有没有delete操作