记一次SQL注入简单bypass

本文详细记录了一次SQL注入攻击的过程,从发现注入点到利用tamper绕过过滤,再到数据库渗透和OS shell获取。过程中涉及了对数据库版本的探测、过滤规则的测试、payload构造以及数据库信息的获取。最终,虽然未能完全控制服务器,但已成功获取到部分系统信息。

x00 存在 SQL 注入

总之是遇到一个站,登录的页面,数据包大致如下:

 
POST /jsweb/userlogin/UserLoginAction.aspx HTTP/1.1Host: 115.xxx.xxx.xxx:8042Content-Length: 47Accept: */*X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36Content-Type: application/x-www-form-urlencoded; charset=UTF-8Origin: http://115.xxx.xxx.xxx:8042Referer: http://115.xxx.xxx.xxx:8042/Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Cookie: ASP.NET_SessionId=bxdzehxa5mvoco1fkrjlbqbtConnection: closeuname=admin*&pwd=dskfsdkf&valCode=1197&telphone=

其中验证码可以绕过,而登录名那里存在注入

 

 

使用 and 1=1、and 1=2 时,发现过滤了空格,用/**/代替

0x01 简单看一下

中间件是 IIS,存在 len 函数,确定为 SQLServer

Order by 一下,看看能不能 union,发现有 10 列

### SQL 注入绕过的实现与防御 #### 绕过 SQL 注入防护的技术细节 SQL 注入是一种常见的安全漏洞,攻击者可以通过输入恶意的 SQL 语句来操控数据库。为了绕过 WAF(Web 应用防火墙)或其他防护机制,通常会利用特定数据库特性和编码技巧。 1. **MySQL 特有的注释符** MySQL 支持多种注释形式,其中 `/*` 和 `*/` 是多行注释的一部分。如果 WAF 对某些关键字进行了严格匹配,则可以使用这些注释符来分割敏感字符序列[^1]。例如,在 URL 中构造请求时,可以将 `database()` 替换为 `database/**/()` 来规避检测。 2. **基于数据库管理系统的特性** 针对不同的数据库管理系统(DBMS),其语法和功能有所不同。因此,绕过策略也会因目标 DBMS 而异。核心思想是通过混淆或伪装 SQL 查询结构,使其能够避开 WAF 的过滤规则但仍能被数据库解析并执行[^2]。 3. **自动化工具的应用** 使用现成的安全测试框架如 Sqlmap 可以显著提高效率。Sqlmap 提供了 tamper 功能模块,允许用户自定义脚本来修改原始 payload,从而适应复杂的环境需求[^3]。这使得即使面对高度定制化的 WAF,也能找到潜在的突破口。 4. **具体绕过实例分析** - 利用 `%0a` 字符代替换行操作:当正则表达式中加入了 `/i` 标志表示忽略大小写时,可能遗漏掉一些特殊情况下的转义处理[^4]。比如 `'sql.php?id=1 union%0aselect 1,schema name3%0afrom /!12345information schema.schemata'` 就是一个典型例子。 - 去除冗余括号简化查询字符串:有时直接移除不必要的函数调用也可以达到目的。像这样去掉 `database()` 函数后的效果一样有效——`http://example.com/Less-1/?id=-1'union/*/!*!/*/select1,database,3--+`[^5]。 #### 如何防范 SQL 注入? 尽管上述方法展示了如何突破现有防线,但从长远来看更重要的是构建坚固可靠的防御体系: 1. **参数化查询** 推荐始终采用预编译语句或者存储过程的方式访问后台数据资源。这种方式从根本上杜绝了拼接外部可控变量进入内部逻辑的可能性。 2. **最小权限原则** 确保应用程序使用的数据库账户仅具备完成业务所需最低限度的操作权利。即便发生泄露事件也不会造成灾难性的后果。 3. **白名单验证输入** 实施严格的前端校验固然重要,但更应注重服务端层面的数据清洗工作。只接受预期范围内的值类型及长度限制有助于减少意外情况的发生概率。 4. **定期更新补丁程序** 关注官方发布的最新版本动态及时修补已知缺陷;同时部署专业的入侵检测设备密切监控异常行为模式变化趋势。 ```python # 参数化查询示例代码 import mysql.connector conn = mysql.connector.connect(user='root', password='', host='localhost', database='testdb') cursor = conn.cursor() query = ("SELECT * FROM users WHERE username=%s AND password=%s") username_input = input("Enter your Username:") password_input = input("Enter your Password:") cursor.execute(query, (username_input, password_input)) result = cursor.fetchall() print(result) ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值