手把手叫你SQL注入攻防(PHP语法)

版权声明:https://github.com/wusuopubupt

闲话不说,直接来!

理论补充:1.http://blog.csdn.net/wusuopubupt/article/details/8752348

2.http://www.cnblogs.com/hkncd/archive/2012/03/31/2426274.html

1.什么是SQL注入,猛戳wikipedia查看

2.本地测试代码:

如果表单提交正确,就打印hello,“username”

否则,打印“404 not found!”

[php] view plaincopy

  1. <?php
  2. require ‘config.php‘;
  3. $DBConnection = mysql_connect ( "$dbhost", "$dbuser", "$dbpwd" );
  4. mysql_select_db ( "$dbdatabase" );
  5. if(isset($_GET[‘submit‘]) && $_GET[‘submit‘]){
  6. $sql="select * from test where name=‘".$_GET[‘username‘]."‘and password=‘".$_GET[‘password‘]."‘";
  7. //echo $sql;exit;
  8. $result=mysql_query($sql,$DBConnection);
  9. $num=mysql_num_rows($result);
  10. if($num>=1)
  11. {
  12. echo "hello,".$_GET[‘username‘];
  13. }
  14. else {
  15. echo"404 not found";
  16. }
  17. }
  18. ?>
  19. <form action="login.php" method="GET">
  20. <table>
  21. <tr>
  22. <td>username</td>
  23. <td><input type="textbox" name="username"/></td>
  24. <td>password</td>
  25. <td><input type="textbox" name="password"></td>
  26. <td>submit</td>
  27. <td><input type="submit" name="submit"></td>
  28. </tr>
  29. </table>
  30. </form>

3.浏览器界面显示:

4.重头戏,sql注入:

5.原理--为什么用户名不正确,却可以显示hello?

我可以echo一下:

[php] view plaincopy

  1. <span style="font-size:18px;">$sql="select * from test where name=‘".$_GET[‘username‘]."‘and password=‘".$_GET[‘password‘]."‘";
  2. echo $sql;exit;</span>

显示:

拿到我的mysql数据库中查询:

可以看到,居然能查到信息,因为sql语句中,前一半单引号被闭合,后一半单引号被 “--”给注释掉,中间多了一个永远成立的条件“1=1”,这就造成任何字符都能成功登录的结果。

6.小结:

1)其实这个sql注入过程上很简单,困难的地方在于提交SQL注入语句的灵活性上面,单引号的使用很关键,另外,多用echo打印调试也很值得一试~~

2)GET方式提交表单很危险,所以还是用POST方式吧!

参考:http://blog.csdn.net/gideal_wang/article/details/4316691

3)防止SQL注入:可以看出,sql注入就是用户提交一些非法的字符(如本文的单引号’和sql语句的注释号--,还有反斜杠\等),所以要用转义:  htmlspecialchars函数,mysql_read_escape_string函数都可以实现。

4)JS段验证表单了,JSP/PHP等后台还要验证码?

---需要,因为friebug可以禁用JS...

--------------------------------------------------------------------------

update:

上面的方法,当password通过md5加密的话,就无法实现注入了,那么就在username上做手脚:

username后面的内容就都被注释掉了。哈哈~

参考:http://newaurora.pixnet.net/blog/post/166231341-sql-injection-%E7%AF%84%E4%BE%8B(%E7%99%BB%E5%85%A5%E7%AF%84%E4%BE%8B)

by wusuopuBUPT

时间: 2024-10-12 20:32:37

手把手叫你SQL注入攻防(PHP语法)的相关文章

SQL注入攻防入门详解(2)

SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口.这几天把sql注入的相关知识整理了下,希望大家多多提意见. (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门查看大量前辈们的心得,这方面的资料颇多,将其精简出自己觉得重要的,就成了该文

[转]SQL注入攻防入门详解

原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口.这几天把sql注入的相关知识整理了下,希望大家多多提意见. (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么

SQL注入攻防入门详解

原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机会接触相关开发……必须的各种借口.这几天把sql注入的相关知识整理了下,希望大家多多提意见. (对于sql注入的攻防,我只用过简单拼接字符串的注入及参数化查询,可以说没什么

【转载】SQL注入攻防入门详解

滴答…滴答…的雨,欢迎大家光临我的博客. 学习是快乐的,教育是枯燥的. 博客园  首页  博问  闪存    联系  订阅 管理 随笔-58 评论-2028 文章-5  trackbacks-0 站长统计|  今日IP[353] | 今日PV[848] | 昨日IP[922] |  昨日PV[2188] |当前在线[10] SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但

基于php+mysql的sql注入攻防实操

摘要: 基于php+mysql平台的sql注入攻防的实操,提供较详细的ubuntu平台上的操作步骤,方便练手. 使用的平台: Ubuntu 12.04,php 5.3.10, mysql Ver 14.14, Apache/2.2.22 步骤: 1. 在ubuntu上安装Apache,mysql,具体过程自行百度: 2.1 首先熟悉如何再mysql中建立数据表?包括用户名和对应的密码:并且熟悉其中的查询命令:完成查询测试: 2.2 完成php端的代码,完成php和mysql的链接:完成链接查询测

sql注入攻防 以php+mysql为例

随着Web应用的高速发展和技术的不断成熟,对Web开发相关职位的需求量也越来越大,越来越多的人加入了Web开发的行列.但是由于程序员的水平参差不齐或是安全意识太低,很多程序员在编写代码时仅考虑了功能上的实现,很少或是根本没有考虑应用的安全性问题.这就导致了很多应用都存在不同程度的安全漏洞.SQL注入便是其中的一种. SQL注入作为一种很流行的攻击手段,一直以来都受到网络安全研究者和黑客们的广泛关注.那什么是SQL注入呢?SQL注入是这样一种攻击技术:攻击者通过把恶意SQL命令插入到Web表单的输

DWVA手把手教程(二)——SQL注入

欢迎来到sql注入章节,此次我们使用的工具为sqlmap. 我们已经察觉到了经典参数id的存在,厚着脸皮的说一句:sql注入漏洞是存在的. 那么我们应该如何去证明呢? 好习惯,先抓包,get方法提交的,掏出万能的sqlmap.. 划重点,敲黑板,懵逼时刻:302? 在这里我们无视它(才不是没看懂的说)直接回车看会发生什么. "假的吧!!我的sqlmap从来没靠谱过!!"咳咳,这句话我已经喊了俩月了.. 原因其实很简单,sqlmap对该页面的访问被重置到了登陆界面. 所以在这里我们要赋予

WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门参考大量前辈们的心得,小小的总结一下,欢迎大家拍砖啊 一.跨站脚本攻击(XSS) 跨站脚本攻击的原理 XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意脚本代码,而程序对于用户输入内容未过滤,当用户浏览该页之时

深入了解SQL注入绕过waf和过滤机制

知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 0x05 本文小结 0x06 参考资料 0x00 前言 笔者前几天在做测试时输入攻击向量后页面发生了重定向甚至异常输入也是重定向怀疑其中有WAF在作怪.之前对WAF接触比较少纯粹是新手趁此科普了一下并查阅了一些绕过WAF的方法.所找到的资料中主要分为两类SQL注入和XSS绕过笔者SQL注入同样是新手