SQL 注入 (入门学习 详解)
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.查数据