WAF学习之漏洞学习——SQL注入

文章目录

    • DVWA/SQL Injection/low
        • 场景
          • 源码
          • 原理
        • 注入示例
          • 猜解数据库
        • 验证绕过
        • 注入点的判断

参考 sql注入基础原理

DVWA/SQL Injection/low

场景

  • WAF学习之漏洞学习——SQL注入_第1张图片
源码
  • source:


if( isset( $_REQUEST[ 'Submit' ] ) ) {
    // Get input
    $id = $_REQUEST[ 'id' ];

    // Check database
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
'
); // Get results while( $row = mysqli_fetch_assoc( $result ) ) { // Get values $first = $row["first_name"]; $last = $row["last_name"]; // Feedback for end user echo "
ID: {$id}
First name: {$first}
Surname: {$last}
"
; } mysqli_close($GLOBALS["___mysqli_ston"]); } ?>
原理
  • 看URL:http://127.0.0.2:8086/DVWA-master/vulnerabilities/sqli/?id=1&Submit=Submit#说明PHP是通过GET请求
  • SQL查询语句:$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"
  • 我们是通过控制参数Id的值来返回我们需要的信息。如果我们不按常理出牌,比如在输入框中输入 1' order by 1#
  • 实际执行的Sql语句就会变成:"SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1#';"

注入示例

猜解数据库
  • 先利用order by 猜数据库字段个数

    • WAF学习之漏洞学习——SQL注入_第2张图片
    • WAF学习之漏洞学习——SQL注入_第3张图片
    • WAF学习之漏洞学习——SQL注入_第4张图片
    • 由此可知,users表中只有两个字段,数据为两列。
  • 接着利用UNION SELECT 联合查询获取数据库的信息

    • union 运算符可以将两个或两个以上 select 语句的查询结果集合合并成一个结果集合显示,即执行联合查询。需要注意在使用 union 查询的时候需要和主查询的列数相同,而我们之前已经知道了主查询列数为 2,接下来就好办了。
    • 输入'1 union select database(),user() #
    • 实际执行:SELECT first_name, last_name FROM users WHERE user_id = '1' union select database(),user()#;
      `
    • WAF学习之漏洞学习——SQL注入_第5张图片
    • 从返回信息可知:
      • 数据库名字是dvwa
      • 当前查询信息的用户名是root@localhost
  • 同理 再输入 1' union select version(),@@version_compile_os#进行查询

    • WAF学习之漏洞学习——SQL注入_第6张图片
      • version() 获取当前数据库版本.
      • @@version_compile_os 获取当前操作系统。
  • 接下来尝试得到dvwa数据库中的表名

    • information_schema 是 mysql 自带的一张表,这张数据表保存了 Mysql 服务器所有数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等。该数据库拥有一个名为 tables 的数据表,该表包含两个字段 table_name 和 table_schema,分别记录 DBMS 中的存储的表名和表名所在的数据库。

    • 执行语句1 ' union select table_name,table_schema from information_schema.tables#

    • WAF学习之漏洞学习——SQL注入_第7张图片

    • 通过上图返回信息,我们再获取到:

      • dvwa 数据库有两个数据表,分别是 guestbook 和 users .
  • 那么我们接下来尝试获取重量级的用户名、密码。

    • 由经验我们可以大胆猜测users表的字段为 user 和 password ,所以输入:1' union select user,password from users#进行查询:
    • WAF学习之漏洞学习——SQL注入_第8张图片
    • 可以看到成功爆出用户名、密码,密码采用 md5 进行加密,可以到www.cmd5.com进行解密。

验证绕过

见https://www.jianshu.com/p/078df7a35671

注入点的判断

见https://www.jianshu.com/p/078df7a35671

你可能感兴趣的:(WAF学习之漏洞学习——SQL注入)