前言

  断断续续看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了。

  

  测试一下:

  

[超级基础]Web安全之SQL注入由浅入深(?)的更多相关文章

  1. WEB 安全之 SQL注入 < 三 > 提权

    SQL注入是一个比较“古老”的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果能清楚了解 攻击的全 ...

  2. WEB 安全之 SQL注入 < 二 > 暴库

    SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...

  3. web安全学习(sql注入1)

    web安全学习(sql注入1) 一.简介 sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句.sql注入可能造成信息泄露以及服务器被控制等危害. ...

  4. mysql基础语法及拓展到web中的sql注入

    本来是想写下javaweb的mvc(tomcat, spring, mysql)的搭建,  昨天搭到凌晨3点, 谁知道jdbcTemplate的jar包不好使, 想死的心都有了, 想想还是休息一下, ...

  5. Web安全 之 SQL注入

    随着B/S模式应用开发的发展,使用这种模式编写的应用程序也越来越多.相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据 ...

  6. 【渗透攻防WEB篇】SQL注入攻击初级

    前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...

  7. web安全之sql注入实例(5.0之前的)

    web安全之sql(5.0之前)注入实例 5.0之前的数据库没有information库. 所以这里需要运用的是load_file()函数来获取信息. 1.判断是否有sql注入,用and 1=1 和 ...

  8. WEB 安全之 SQL注入<一> 盲注

    SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...

  9. web安全之SQL注入

    一.sql注入是一种将sql代码添加到输入参数中 传递到sql服务器解析并执行得一种攻击手法 例: $sql = "SELECT * FROM goods WHERE Id = 1" ...

随机推荐

  1. 使用kubeadm搭建Kubernetes集群

    记录在石墨日记中,经常更新,懒得再复制了,直接点击下面链接查看吧 移步到此: https://shimo.im/docs/22WbxxQa1WUV9wsN/

  2. cesium 加载shp格式的白模建筑

    ceisum加载shp格式的建筑.有两种思路,目前推荐第二种. 方法一:将shp格式转换为geojson格式,然后采用cesium提供的接口加载到ceisum中. 严重缺陷:在面对大场景问题,即数据量 ...

  3. ZOJ-1654 Place the Robots---二分图最小点覆盖+构图

    题目链接: https://vjudge.net/problem/ZOJ-1654 题目大意: 有一个N*M(N,M<=50)的棋盘,棋盘的每一格是三种类型之一:空地.草地.墙.机器人只能放在空 ...

  4. 简析平衡树(三)——浅谈Splay

    前言 原本以为\(Treap\)已经很难了,学习了\(Splay\),我才知道,没有最难,只有更难.(强烈建议先去学一学\(Treap\)再来看这篇博客) 简介 \(Splay\)是平衡树中的一种,除 ...

  5. 【洛谷2577】[ZJOI2005] 午餐(较水DP)

    点此看题面 大致题意: 有\(N\)个学生去食堂打饭,每个学生有两个属性:打饭时间\(a_i\)和吃饭时间\(b_i\).现要求将这些学生分成两队分别打饭,求最早何时所有人吃完饭. 贪心 首先,依据贪 ...

  6. mongodb索引 全文索引使用限制

    全文索引非常强大,但是同样存在很多限制,我们来看以下去全文索引的使用限制: 1.每次查询,只能指定一个$text查询 2.$text查询不能出现在$nor查询中 之前没有接触过$nor查询,$nor查 ...

  7. 2017.12.22 Java序列化中你不知道的事(一)

    Java 序列化简介 Java 对象序列化是 JDK 1.1 中引入的一组开创性特性之一,用于作为一种将 Java 对象的状态转换为字节数组,以便存储或传输的机制,以后,仍可以将字节数组转换回 Jav ...

  8. 增强的格式化字符串format函数

    http://blog.csdn.net/handsomekang/article/details/9183303 自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓 ...

  9. C#的接口基础教程之四 访问接口

    对接口成员的访问 对接口方法的调用和采用索引指示器访问的规则与类中的情况也是相同的.如果底层成员的命名与继承而来的高层成员一致,那么底层成员将覆盖同名的高层成员.但由于接口支持多继承,在多继承中,如果 ...

  10. MySql-8.0.12 安装教程随笔

    下载地址: https://www.mysql.com/downloads/ 现在最下边的社区版本,也就是免费版本 之后我们会看到有两个选择的下载,一个为zip压缩包格式,一个是Install版本,个 ...