语句初识解释
?id=1 and 1=1 ?id=1 and 1=2
‘?’是传值的意思,如果后台没有过滤,and 1=1就会被带入后台SQL语句当中去进行查询,‘and’是并列与关系,必须左右两边都为真才能有返回值,如果出现 ?id=1 and 1=2这种错误的语法就会报错,可以用这种方式来判断SQL注入类型
--+
经常在大佬文章里看到这个字符,一开始我以为是编译器自带的字符,并没有实质性的作用.
’--‘在SQL语句中起着注释的作用,能将后面的语句注释掉,’+‘则代表空格,但是必须两者同时出现,才有注释作用,单独的’--‘不能起到注释作用
解题步骤
![](https://i-blog.csdnimg.cn/blog_migrate/f21592a6c4255d766871014af245b590.png)
1.题目已经说明是整数型注入,直接查看字段数量,从order by 1开始直到order by 3,无正常回显,说明一共有两个字段,(%20应该是url编码后的空格,不用太过在意)
order by
order by语句用于根据指定的列进行排序,指定的列值也可以为数据所在的列数,但取的数字不可超过原有的列数,否则会报错,所以可以利用到查询中来,试探一共包含多少个字段
![](https://i-blog.csdnimg.cn/blog_migrate/9de43d65000f12c412d8e877236a961a.png)
2.直到有两个字段后进行union联合查询 在url中输入 union select 1,2
union联合查询
union联合查询的作用
将union左右两边的select查询数据合并起来生成一个新的查询结果集,union联合查询语句是为了,判断SQL语句中哪个地方可以被代替,代替的地方是可以在网页上显示出来的。在本次注入语句select1,2中的1和2都可以被代替,我们就可以通过一些SQL语句或函数来代替1或2的位置,让我们需要查询的信息显示到网页上。
select * from 表名 [where 条件]
union
select * from 表名 [where 条件]
![](https://i-blog.csdnimg.cn/blog_migrate/7613617a2a15702a42059f3a1183d5a1.png)
合并查询数据后,因为页面只显示第一行的数据,为了让我们自定义的SQL语句显示到网页上,让前面的参数查不出来,所以将id=1改为id=-1(不存在的一个字段,查询出来结果为空,字段2代替了字段1的位置,就只会显示字段2查询出来的内容)
![](https://i-blog.csdnimg.cn/blog_migrate/b7c01057b33959c93ffa2246580118d2.png)
3.成功回显后,将2替换为database()查看使用数据库名称,得知数据库叫sqli
![](https://i-blog.csdnimg.cn/blog_migrate/6f66702dadb9fbc587bc1e083c33cf13.png)
4.查看数据库sqli中的所有表,找到flag相关表
![](https://i-blog.csdnimg.cn/blog_migrate/a88f9cf0f50b4c8fe0eacd5b9f7de107.png)
group_concat
concat函数时将指定查询到的结果拼接之后以一列的形式列举出来,多个数据之间用逗号隔开,但是各个数据之间没有间距,空格需要自己添加并用单引号括起来。
![](https://i-blog.csdnimg.cn/blog_migrate/838078c5c66ceadd8a7be5713b02e506.png)
而group_concat函数是用来将查询到的结果进行合并成一行,合并的结果以逗号隔开
![](https://i-blog.csdnimg.cn/blog_migrate/c7507c79c97ab8068573279933aa5447.png)
information_schema库是mysql自带的一个库,我们常关注库中的schemata、tables、colums三个表,它们分别存储这整个数据库管理系统的所有数据库信息、表信息和字段信息,schemata表中,通过schema_name 字段获取所有的数据库名;在tables表中,通过table_name、table_schema可以获取所有表名与其对应的数据库名;在colums表中,通过colums、table_name、table_schema可以获取所有的字段名以及其所属表与数据库。
group_concat(table_name) from information_schema.tables where table_schema='sqli'
翻译
从information_schema数据库的tables表中查找数据库aqli所包含的表有哪些
5.查看表中所有字段名
![](https://i-blog.csdnimg.cn/blog_migrate/ee36570bb6aeb4746fba0af550fc16b8.png)
6.查询flag表中flag字段的全部数据,获得flag
![](https://i-blog.csdnimg.cn/blog_migrate/fb1ac36dfee92b29ab13638389be5d94.png)
参考文献
(72条消息) sql注入中的union联合查询,union select 1,2,3_头顶蜘蛛网,脚踩大水缸的博客-CSDN博客
(73条消息) sql注入详解_山山而川'的博客-CSDN博客_sql注入
(73条消息) sql注入中的order by_山山而川'的博客-CSDN博客_sql注入orderby子句的功能
(64条消息) sql注入,关于id=‘1 and 1=1‘_一晓风的博客-CSDN博客
总结
这是第一次做SQL注入方面的题,对于我这个小白来说,已经不是初级题目了,用了很长时间,收获也不小
SQL语句基础对我很有帮助,让我能看懂语句结构,而不是硬按照别人的解释去理解,还要继续学习
大佬们的博客对我也很有帮助,感谢
立场不够坚定,面对题目出现摆烂的念头和烦躁心理,要加强克制