Home 重要sqlilab Mysql的基本知识 注释 方法 定义变量
Post
Cancel

重要sqlilab Mysql的基本知识 注释 方法 定义变量


这里有个文章,提供了思路:https://www.sqlsec.com/2020/05/sqlilabs.html

这里可以看到mysql的绝大部分函数: https://www.w3schools.com/sql/sql_ref_mysql.asp

注释

'-- ' , 两个--后面紧跟一个空格。 是最常用的SQLI注释。

在 url 中,--+ , --%20, --%23 , 前2个是"--空格", 第三个是  --# 的意思。

# 这个在SQLI中不常用。因为 # 以及后面的内容不会作为参数从客户端传给服务器

/* .. */

你看到的  payload中, --+, --# 则表示, 在-- 之后做一些事情。

/*! 可以执行的语句 */ 这个可以直接绕过WAF

union 把两个表的查询合并在一起,要求2个select的列名相同

select username as email from users union select email_id as email from emails
email
Dumb
Angelina
Dummy
secure
stupid
superman
batman
admin
admin1
admin2
admin3
dhakkan
admin4
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

定义变量  set 与 @your_var:=

SET @myindex=0;
SELECT id,username, @myindex:=@myindex+3 AS my_index FROM users;
会得到:

id	username	my_index
1	Dumb	3
2	Angelina	6
3	Dummy	9
4	secure	12
5	stupid	15
6	superman	18
7	batman	21
8	admin	24
9	admin1	27
10	admin2	30
11	admin3	33
12	dhakkan	36
14	admin4	39

普通函数, 直接在select 语句中使用即可。

SELECT SYSTEM_USER(), SESSION_USER(), USER(), VERSION(), CURRENT_USER(), DATABASE(), @@datadir, @@version_compile_os;

SYSTEM_USER()	SESSION_USER()	USER()	VERSION()	CURRENT_USER()	DATABASE()	@@datadir	@@version_compile_os
root@localhost	root@localhost	root@localhost	5.7.26-log	root@localhost	sqli	D:\phpstudy\Extensions\MySQL5.7.26\data\	Win32

concat 函数:把结果合并的一起 

例如: SELECT id, username, PASSWORD, CONCAT(id, "+", userNAME) AS full_name FROM users limit 3

可以看到:

1	Dumb	Dumb	1+Dumb
2	Angelina	I-kill-you	2+Angelina
3	Dummy	p@ssword	3+Dummy
4	secure	crappy	4+secure
5	stupid	stupidity	5+stupid
6	superman	genious	6+superman
7	batman	mob!le	7+batman
8	admin	admin	8+admin
9	admin1	admin1	9+admin1
10	admin2	admin2	10+admin2
11	admin3	admin3	11+admin3
12	dhakkan	dumbo	12+dhakkan
14	admin4	admin4	14+admin4

group_concat   把一组结果变成一个结果

SELECT GROUP_CONCAT(username, PASSWORD SEPARATOR '>>') FROM users;
GROUP_CONCAT(username, PASSWORD SEPARATOR '>>')
DumbDumb>>AngelinaI-kill-you>>Dummyp@ssword>>securecrappy>>stupidstupidity>>supermangenious>>batmanmob!le>>adminadmin>>admin1admin1>>admin2admin2>>admin3admin3>>dhakkandumbo>>admin4admin4

mid , substr  substring   , 截取字符串

下面两种形式是等价的。
select mid("good good study", 2, 6);   
select mid("good good study" from 2 for 6)
# => ood go
最后一个参数可以省略:
select mid("good good study", 2);
select mid("good good study" from 2)
# => ood good study

if,else,case,when  条件语句

SELECT if( 1<2 , "true result", "false result") as result;
result
true result

SELECT *, if(id < 5, "small", "big") as result FROM users;

id	username	password	result
1	Dumb	Dumb	small
2	Angelina	I-kill-you	small
3	Dummy	p@ssword	small
4	secure	crappy	small
5	stupid	stupidity	big
6	superman	genious	big
7	batman	mob!le	big
8	admin	admin	big
9	admin1	admin1	big
10	admin2	admin2	big
11	admin3	admin3	big
12	dhakkan	dumbo	big
14	admin4	admin4	big

sleep   让查询时间延长n秒

select sleep(1) ;
# 啥也不查询,直接返回:
sleep(1)   # 列名
0              # 值
# 这个语句,是每个记录会消耗1秒。 总共3条记录,会超过3秒的查询:
select sleep(1), id, username from users limit 3 ;
sleep(1)	id	username
0		1	Dumb
0		2	Angelina
0		3	Dummy
This post is licensed under CC BY 4.0 by the author.