pikachu漏洞练习第四章节SQL注入-数字型注入(post)练习收获

sql注入是什么?

在owasp发布的top 10漏洞里面,,注入漏洞一直是危害排名第一,其中主要指SQLInject漏洞数据库注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击着可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄漏的一种漏洞。

sql注入漏洞攻击流程

第一步:注入点探测


自动方式:使用web漏洞扫猫工具,自动进行注入点发现
手动方式:手工构造sqlinject测试语句进行注入点发现

第二步:信息获取


通过注入点取期望得到的数据。
1.环境信息:数据库类型,数据库版本,操作系统版本,用户信息等,
2.数据库信息:数据库名称,数据库表,表字段,字段内容(加密内容破解

第三步:获取权限


获取操作系统权限: 通过数据库执行shel,上传木马

常见注入点类型

数字型 user id=$id
字符型 user_id= '$id
搜索型 text LIKE '%{$ _GET['search']}%'

Post方式中使用抓包工具修改post数据部分提交注入;

练习部分

打开pikachu靶场的数字型注入(post)部分。同时打开brupsite抓包。发现一个选项框和一个查询钮,随意选一数字查询,发现网页把数据库中查询到的数据按照我们搜索的编号输出出来。

既然涉及到查询数据库查询,那么后台大概率有使用数据库查询语句,猜测使用的数据库语句为:

select 字段1,字段2 from 表名 where id = $id

我们的输入的id在sql语句的最后,如果我们能把最后的$id由原来的序号改为1 or 1=1,那么原sql语句将变为

select 字段1,字段2 from 表名 where id = 1 or 1=1

这个语句的where后条件变成了or或条件,当id=1或1=1时都触发语句。因为1=1恒成立,也就是说无论id是多少,都会输出对应的数据字段:我们把一段只输出规定id数据的sql语句改成了输出全部数据字段的sql语句。

为了验证我们的猜想。打开burpsite抓包可见我们刚刚发送请求的查询操作。将其右键发送到repeater进行查看。

在repeater中把id由原数字改为1or1=1,发送请求。

在右边的响应中查看源码可见页面输出了数据库中的所有数据,点击响应下的页面渲染,可见页面渲染的样子。

成功利用该漏洞。

### 数字型 SQL 注入漏洞原理 数字型注入涉及的情况是在构建SQL查询字符串时,应用程序直接将未加引号的数值作为输入的一部分处理。这意味着如果攻击者能够控制这个数值,则可以操纵整个SQL命令结构而无需考虑引号闭合问题。 例如,在一个简单的用户认证场景下: ```sql SELECT * FROM users WHERE id = 1; ``` 假设`id`是从外部接收并未经适当验证或转义就用于构造上述查询中的值。此时,若允许恶意用户提供如下形式的ID `1 OR 1=1 --` ,则最终执行的SQL变为: ```sql SELECT * FROM users WHERE id = 1 OR 1=1 -- ; ``` 这会导致返回所有用户的记录而不是仅限于特定ID对应的单一账户信息[^1]。 ### 防御措施 为了有效防范此类攻击,建议采取以下几种策略: #### 使用预编译语句和参数化查询 通过使用预编译语句(PreparedStatement),数据库驱动程序会自动处理特殊字符的安全编码,从而避免潜在的风险。对于MyBatis框架而言,推荐尽可能多地利用`#{}`语法来代替`${}`,前者会在内部实现必要的安全转换[^4]。 ```java // 安全的做法 String query = "SELECT * FROM users WHERE id=?"; preparedStatement.setInt(1, userId); ResultSet rs = preparedStatement.executeQuery(); ``` #### 输入校验与清理 确保所有的用户提交数据都经过严格的格式检查,特别是当确实需要动态生成部分SQL片段的情况下。应限定合法范围内的输入,并拒绝任何不符合预期模式的内容。 #### 启用Web应用防火墙(WAF) 部署WAF可以在一定程度上拦截常见的SQL注入尝试,尽管这不是唯一的解决方案,但它能提供额外一层保护屏障。 #### 减少调试信息泄露 即使存在缺陷,也不应该让详细的错误报告暴露给客户端浏览器。隐藏具体的异常详情有助于阻止黑客进一步分析系统的脆弱之处[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值