SQL注入
SQL注入的两个前提:1.入户可输入内容,且要输入的内容是可控的。2.输入内容一定与数据库交互的。
CMS SQL注入
CMS逻辑:index.php首页显示内容,具有文章列表,articles.php文章详细页,URL中article.php?id=文章id读取Id文章。
一般sql注入分为:字符型和数字型。(在URL中修改对应ID值,出现的错误中判断是啥类型)。
SQL注入有关知识点
在Mysql 5.0以上的版本中,为了方便管理,默认定义了information_schema数据库(这个数据库在后期获取mysql数据库有很大用处)用来存储数据单元信息,默认具有三个表,schemata(数据库名)tables (表名) columns(列名或者字段名)。(在后面实例中可加深理解)
schemata表中,schema_name字段用来存储数据库名。
tables表中,table_schema存储数据库名,table_name 存储表名。
columns表,table_schema数据库名,table_name表名,column_name字段名。
limit m,n 就是从m行开始n个数据 (从0开始)
内联注释: /!SQL语句/ 只有mysql 可以识别,常用来绕过WAF。
例如:select * from articles where id=-1 /*!union //!select */1,2,3,4;
在sql注入中最常用的注入是 --+ 或者–空格(可以用%20代替)
常见的几种SQL注入
1.GET基于报错的SQL注入
直接进入实例进行讲解(火狐中安装了hackbar)
1.打开实验环境
2.根据提示输入Id值
3.输入‘ 或者” 或者/让报错
分析显示的错误’‘1’’ LIMIT 0,1’ ,去掉对应的’ ‘,‘1’’ LIMIT 0,1,在去掉自己输入的内容,基本就可以判断是字符型的注入。
注:后面的%23就相当于# ,%20相当于空格,%27相当于引号。为的是怕火狐无法直接识别。
4.用order by 查看列数
猜测的列数10不正确,改变数字,知道猜中。
5.使用联合查询查看相关数据。
要使查询语句显示于屏幕上因此将id=1改为-1。
结果显示数据存在第2,3列。
6.查看数据库,数据表等相关数据。
查数据库
查表名
查字段
查数据
用sqlmap进行数据查询
(我使用的是kali,kaLi中是自带mysql的)
1.先查询数据库
发现了security数据库
2.查数据表
发现了users表
3.查数据