前言

  断断续续看Web安全到现在了,感觉对很多基础知识还是一知半解,停留在模糊的层次。所以准备系统总结一下。

  Sql注入我以前一直不以为然,一是现在能sql的站确实很少,二是有像sqlmap的工具可以用。而且想要修复也很简单。

  但后来发现不管是CTF题目中,还是实站中还有有很多需要用到sql注入的地方。17版的OWASPtop10中,注入依旧是A1级别的漏洞。

  所以在此学习并回顾一下此类漏洞。

1 环境准备

1.1什么是Sql注入

  下面是17OWASP中对注入类漏洞的定义:

  

  简单的说,SQL注入就是一种通过控制输入来修改后台SQL语句达到代码执行进行攻击目的的技术。

  可能造成的后果:越权读取数据,控制数据库(增删改查,所谓的脱库删库)。

1.2 Sql注入产生原因

  Web流程中,服务器的作用之一是接受用户(前端)输入的数据,并可以与数据库进行交互,然后发回响应信息。

  服务器怎么与数据库进行交互?其实就是“替”人执行sql语句并返回执行结果。

  简单的说,服务器把输入的数据作为sql语句的一部分拼接起来,并且执行,就完成了数据库交互过程。

  这种SQL语句更准确的概念叫做动态sql语句。以PHP举例:

$sql = "select * from users where name = '{$_POST['username']}' and pwd = '{$_POST['password']}'";

  那么我们就可以控制post参数username和password,从而达到修改sql语句,实现攻击的目的。

1.3 模拟环境

  环境:apache/iis+php+mysql/MarinDB的集成环境。建议PHP版本使用5.6以下版本。(高版本已经废弃了原来关于sql的语法)

  配置见:超详细搭建PhpStorm+PhpStudy开发环境

  此外还需要了解最基础的sql语法:Mysql速成

  然后就可以编写我们的测试页面了:

<?php
if(isset($_GET["id"])){
    /* 数据库连接过程 */
    $con = mysql_connect("localhost","root","root");
    if (!$con)
    {
        die('Fail connect:' . mysql_error());
    }
    /*选库,执行sql语句,获取结果*/
    mysql_select_db("sqltest",$con);
    $querry = "select * from users where id = " . $_GET['id'];
    //动态sql语句有很多种写法,如:$querry = "select * from users where id = {$_GET['id]}";
    /*执行sql语句*/
    $sql = mysql_query($querry,$con);
    /*获取数据,详见http://www.fidding.me/article/32*/
    $result = mysql_fetch_array($sql);
 
    /*写个测试页面用来反馈结果*/
    echo "<table class='itable' border='1' cellspacing='0' width='300px' height='150'>";
    echo "<tr>";
    echo "<td>id</td>";
    echo "<td>username</td>";
    echo "</tr>";
 
    echo "<tr>";
    echo "<td>".$result['id']."</td>";
    echo "<td>".$result['username']."</td>";
    echo "</tr>";
    echo "</table>";
    /*关闭数据库链接*/
    mysql_close($con);

    echo $querry;
}
?>

  对于上述代码中不清楚的函数,这里不一一说明了,百度有很详细的说明。

  把写好的.php文件扔到phpstudy安装目录下(phpstudy\PHPTutorial\WWW)

  现在还需要在mysql中建立sqltest数据库,库中users表,带三个字段:id(int),username(varchar),password(varchar)

  这个也不细说了,用命令行或者phpmyadmin都可以,百度教程一大把。

  

  往里面插几条数据,就ok了。

  

  测试一下:

  

最新文章

  1. TODO:小程序手机预览调试
  2. ​Si2151/41 6th Generation Silicon TV Tuner ICs
  3. 盘点JavaScript里好用的原生API
  4. 比较常用的几个maven第三方镜像
  5. HDU1853 Cyclic Tour(最小费用最大流)
  6. Mat 转 IplImage
  7. 用C写的俄罗斯方块游戏 By: hoodlum1980 编程论坛
  8. 【转】一道SQL SERVER DateTime的试题
  9. DelphiXE8新建AVD
  10. OC-手动内存管理
  11. Selenium 初见
  12. 【solr基础教程之二】索引
  13. 在UITouch事件中画圆圈-iOS8 Swift基础教程
  14. Sybase分页存储过程实现
  15. Can you solve this equation?
  16. Spring_Spring与IoC_Bean的装配
  17. 二十六、Hadoop学习笔记————Hadoop Yarn的简介复习
  18. 【java学习】Intelli Idea集成开发工具的使用
  19. c++堆和栈(转)
  20. Java中的变量与常量

热门文章

  1. jquery-weui picker组件实现只选择年月
  2. cms-最近更新
  3. 不得不承认pretty-midi很好用,以及一些简单的上手
  4. linux 命令——33 df(转)
  5. 如何处理CloudFoundry应用部署时遇到的254错误
  6. IOS 核心动画(Core Animation)
  7. POJ 2104 K-th Number(分桶,线段树,主席树)
  8. 父子组件通信(vuex的方式)
  9. Deep Learning 优化方法总结
  10. js当中mouseover和mouseout多次触发(非冒泡)