利用SQL注入漏洞登录后台的实现方法
2022-11-12 09:24:21
内容摘要
这篇文章主要为大家详细介绍了利用SQL注入漏洞登录后台的实现方法,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!早在02年,国外关于SQL注
文章正文
这篇文章主要为大家详细介绍了利用SQL注入漏洞登录后台的实现方法,具有一定的参考价值,可以用来参考一下。
对此感兴趣的朋友,看看idc笔记做的技术笔记!
早在02年,国外关于SQL注入漏洞的技术文章已经很多,而国内在05年左右才开始的。 如今,谈SQL注入漏洞是否已是明日黄花,国内大大小小的网站都已经补上漏洞。但,百密必有一疏,入侵是偶然的,但安全绝对不是必然的。 前些天,网上传得沸沸扬扬的“拖库”事件给我们敲响了安全警钟。 在开发网站的时候,出于安全考虑,需要过滤从页面传递过来的字符。通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往给骇客留下了可乘之机。轻则数据遭到泄露,重则服务器被拿下。现在,很多网站开发人员知其然而不知其所以然,小弟也是,所以赶紧恶补下,总结如学习内容。希望对初学者能够起到抛砖引玉的作用。一、SQL注入的步骤a) 寻找注入点(如:登录界面、留言板等)b) 用户自己构造SQL语句(如:' or 1=1#,后面会讲解)c) 将sql语句发送给数据库管理系统(DBMS)d) DBMS接收请求,并将该请求解释成机器代码指令,执行必要的存取操作e) DBMS接受返回的结果,并处理,返回给用户因为用户构造了特殊的SQL语句,必定返回特殊的结果(只要你的SQL语句够灵活的话)。下面,我通过一个实例具体来演示下SQL注入二、SQL注入实例详解(以上测试均假设服务器未开启magic_quote_gpc) 1) 前期准备工作先来演示通过SQL注入漏洞,登入后台管理员界面首先,创建一张试验用的数据表:代码如下:
1 2 3 4 5 6 7 8 9 10 | <code> 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; </code> |
代码如下:
1 2 3 4 | <code> INSERT INTO users (username,password,email) VALUES( 'MarcoFly' ,md5( 'test' ), 'marcofly@test.com' ); </code> |
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <code> <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> <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> </table> </fieldset> </form> </body> </html> </code> |
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <code> <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> </code> |
登录失败的提示:
到这里,前期工作已经做好了,接下来将展开我们的重头戏: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语句等价:
代码如下:
1 2 3 | <code> select * from users where username= '' or 1=1# ' and password=md5(' ') </code> |
代码如下:
1 2 3 | <code> select * from users where username= '' or 1=1 </code> |
注:关于利用SQL注入漏洞登录后台的实现方法的内容就先介绍到这里,更多相关文章的可以留意
代码注释