这里有个文章,提供了思路: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的列名相同
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 把一组结果变成一个结果
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 , 截取字符串
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秒
sleep(1) id username 0 1 Dumb 0 2 Angelina 0 3 Dummy