百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> 常见SQL注入的办法
分享文章到:

常见SQL注入的办法

发布时间:09/01 来源:未知 浏览: 关键词:

常见SQL注入的办法

WEB平安之SQL注入

引言:

在开发网站的时候,出于平安思考,需要过滤从页面传递过来的字符。平常,会员可以通过以下接口调取数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往给骇客留下了无隙可乘。轻则数据遭到泄露,重则效劳器被拿下。

一、SQL注入步骤

a)寻觅注入点,结构非凡的语句

传入SQL语句可控参数分为两类
1. 数字类型,参数不消被引号括起来,如?id=1
2. 其他类型,参数要被引号扩起来,如?name="phone"

b)会员结构SQL语句(如:'or 1=1#;admin'#(这个注入又称PHP的全能密码,是已知会员名的状况下,可绕过输入密码)今后再做说明)

c)将SQL语句发送给DBMS数据库

d)DBMS收到返回的结果,并将该恳求说明成机器代码指令,施行必要得到操纵

e)DBMS接受返回结果,处置后,返回给会员

由于会员结构了非凡的SQL语句,必定返回非凡的结果(只要你的SQL语句够灵敏)

下面,我通过一个实例详细来演示下SQL注入
二、SQL注入实例详解(以上测试均假设效劳器未开启magic_quote_gpc)

1) 前期预备工作
先来演示通过SQL注入破绽,登入后台治理员界面
第一,创立一张试验用的数据表:

CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(64) NOT NULL,
`password` varchar(64) NOT NULL,
`email` varchar(64) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

增加一笔记录用于测试:

INSERT INTO users (username,password,email)VALUES('MarcoFly',md5('test'),'marcofly@test.com');

接下来,贴上登入界面的源代码

<html>
 <head> 
  <title>Sql注入演示</title> 
  <meta http-equiv="content-type" content="text/html;charset=utf-8" /> 
 </head> 
 <body> 
  <form action="validate.php" method="post"> 
   <fieldset> 
    <legend>Sql注入演示</legend> 
    <table> 
     <tbody>
      <tr> 
       <td>会员名:</td>
       <td><input type="text" name="username" /></td> 
      </tr> 
      <tr> 
       <td>密 码:</td>
       <td><input type="text" name="password" /></td> 
      </tr> 
      <tr> 
       <td><input type="submit" value="提交" /></td>
       <td><input type="reset" value="重置" /></td> 
      </tr> 
     </tbody>
    </table> 
   </fieldset> 
  </form>   
 </body>
</html>

附上结果图:

1468796-20181130193836697-146276335.png

当会员点击提交按钮的时候,将会把表单数据提交给validate.php页面,validate.php页面用来推断会员输入的会员名和密码有没有都相符要求(这一步至关重要,也往往是SQL破绽所在)

!                                         <!--前台和后台对接-->
<html>
<head>
<title>登录验证</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
<?php
$conn=@mysql_connect("localhost",'root','') or die("数据库连接失败!");;
mysql_select_db("injection",$conn) or die("您要选中的数据库不存在");
$name=$_POST['username'];
$pwd=$_POST['password'];
$sql="select * from users where username='$name' and password='$pwd'";
$query=mysql_query($sql);
$arr=mysql_fetch_array($query);
if(is_array($arr)){
header("Location:manager.php");
}else{
echo "您的会员名或密码输入有误,<a href=\"Login.php\">请从新登录!</a>";
}
?>
</body>
</html>

留意到了没有,我们直接将会员提交过来的数据(会员名和密码)直接拿去施行,并没有实现停止非凡字符过滤,待会你们将清楚,这是致命的。
代码剖析:假如,会员名和密码都匹配成功的话,将跳转到治理员操纵界面(manager.php),不成功,则给出友好提醒信息。
登录成功的界面:

1468796-20181130194100393-521054258.png

登录失败的提醒:

1468796-20181130194106184-1474257074.png

到这里,前期工作已经做好了,接下来将展开我们的重头戏:SQL注入

2) 结构SQL语句
填好准确的会员名(marcofly)和密码(test)后,点击提交,将会返回给我们“欢迎治理员”的界面。
由于按照我们提交的会员名和密码被合成到SQL查询语句傍边之后是这样的:

select * from users where username='marcofly' and password=md5('test')


很明显,会员名和密码都和我们此前给出的一样,必定能够成功登陆。但是,假如我们输入一个错误的会员名或密码呢?很明显,必定登入不了吧。恩,正常状况下是如此,但是关于有SQL注入破绽的网站来说,只要结构个非凡的“字符串”,照样能够成功登录。

比方:在会员名输入框中输入:' or 1=1#,密码随意输入,这时候的合成后的SQL查询语句为:

select * from users where username='' or 1=1#' and password=md5('')


语义剖析:“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去施行了,换句话说,以下的两句sql语句等价:

select * from users where username='' or 1=1#' and password=md5('')

等价于

select* from users where usrername='' or 1=1

由于1=1永久是都是成立的,即where子句总是为真,将该sql进一步简化之后,等价于如下select语句:

select * from users

没错,该sql语句的作用是检索users表中的所有字段

上面是一种输入办法,这里再介绍一种注入的办法,这个办法又称PHP的全能密码

我们再已知会员名的前提下,可以不克不及密码即可登入,假设会员名:admin

结构语句:

select * from users where username='admin'#' and password=md5('')

等价于

select * from users where username='admin'

这样即可不克不及输入密码登入上去的。

数据库就会错认为不消会员名既可以登入,绕过后台的验证,已抵达注入的目的。

一样利用了SQL语法的破绽。

看到了吧,一个经结构后的sql语句竟有如此可怕的毁坏力,信赖你看到这后,开端对sql注入有了一个理性的认识了吧~
没错,SQL注入就是这么容易。但是,要按照实际状况结构灵敏的sql语句却不是那么容易的。有了根基之后,本人再去渐渐探索吧。
有没有想过,假如经由后台登录窗口提交的数据都被治理员过滤掉非凡字符之后呢?这样的话,我们的全能会员名' or 1=1#就没法使用了。但这并不是说我们就毫无计策,要知道会员和数据库打交道的途径不止这一条。

引荐:《mysql教程》

以上就是常见SQL注入的办法的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有167人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板