安全小白的pikachu靶场学习笔记(二)---sql注入(I)

本文介绍了SQL注入的概念,其危害以及如何通过构造攻击载荷来利用这种漏洞。文章详细讨论了数字型、字符型、搜索型和xx型注入的实例,并强调了防止SQL注入的策略,如过滤输入、使用参数化查询和ORM框架。同时,作者鼓励学习者多练习和尝试不同的闭合方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

应该会把这个系列给写完,记录自己的学习心得以及毕设收获,也欢迎大佬们批评指正,也希望能给同样的新手小白一些指引~


一、sql注入是什么?

pikachu中对sql注入进行了简单介绍:

哦,SQL注入漏洞,可怕的漏洞。

在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。
一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”**拼接**到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重! 
SQL注入在网络上非常热门,也有很多技术专家写过非常详细的关于SQL注入漏洞的文章,这里就不在多写了。

在我的理解里sql注入漏洞就是构造攻击载荷,这种攻击载荷一旦输入到后台,会被拼接成一条有害的sql语句,攻击后端数据库,导致比较严重的危害。

二、通关操作

1.数字型注入(post)

首先在pikachu中随机选择一个数字提交
在这里插入图片描述
然后在bp中抓包,发送到repeater模块
在这里插入图片描述
在repeater模块中构造payload:id =1 or 1=1,然后点send,就可以把数据库中所有的用户邮箱爆出来:

在这里插入图片描述
这里就是利用了or 1=1这个语句恒成立构造sql语句,让所有id的信息全部暴露出来了。

2.字符型注入(get)

这个更简单一点,post型需要用Bp抓包发送到repeater模块进行修改,而get型直接在输入框进行构造即可:
构造payload:kobe’ or 1=1#
在这里插入图片描述
解释一下为什么这么构造而不是kobe or 1=1。
因为原本的程序会自动给你输入的字段加上一对单引号使得sql语句能够被查询
如:正常输入kobe
那么传入后台的语句就是:

select 字段1,字段2 from 表名 where usrname='kobe';

而如果我只是简单输入kobe or 1=1的话,传入后台的语句就是:

select 字段1,字段2 from 表名 where usrname='kobe or 1=1';

可以看到 kobe or 1=1就被当成了一个整体传输,那么自然系统只会返回“用户名不存在”

所以我们构造paylload kobe’ or 1=1#
传到后台就是:
select 字段1,字段2 from 表名 where usrname=‘kobe’ or 1=1#';
这样子的话,首先kobe’标志着一条语句的结束,而#把剩下的那个单引号给注释掉了,最终就能够执行两条sql语句。

3.搜索型注入

后台的查询语句如图:
在这里插入图片描述
因此其实和前面字符型注入差不多,也是考虑闭合即可,输入Payload:kobe’ or 1=1#
在这里插入图片描述
成功爆库
给出作者大大的总结ppt:
在这里插入图片描述

4.xx型注入

还是先作弊看一看源码
在这里插入图片描述
可以发现程序员是用()作了闭合
这里的知识点就是:开发人在拼sql时,他可能用各种各样的方式进行拼接,所以我们的核心点就是去构造合法的闭合。
因为是用()闭合,因此我们的payload也用)闭合
构造payload:

kobe') or 1=1#

这里我们是看了源码去构造,但是在实际攻击中,我们看不到源码,因此要多积累这些闭合手段,然后根据经验去测试,多次尝试。


总结

本文对pikachu的sql注入板块前4种类型的注入进行了讲解,后续还会写文章继续讲剩下的。其实分这么多种型号的sql注入也没那么必要,你只要知道sql注入的闭合方式和可利用的构造payload就可以了,关键是多练多尝试。

### Pikachu靶场中的SQL注入类型教程 #### 数字型SQL注入 当应用程序未正确过滤用户输入且该输入被用于构建SQL查询的一部分时,可能会发生数字型SQL注入。如果参数是整数形式,则攻击者可以尝试通过改变这个数值来观察应用行为的变化从而判断是否存在漏洞[^2]。 对于Pikachu靶场而言,在某些情况下,向URL或表单提交的数据中附加特殊字符(如`'`),会触发数据库错误提示,这表明可能存在SQL注入风险[^3]。 ```sql ?id=1 AND 1=1 -- 正常显示页面内容 ?id=1 AND 1=2 -- 页面返回异常或者空白页 ``` #### 字符型SQL注入 字符型SQL注入通常发生在字符串类型的参数上。在这种场景下,可以通过在合法数据之后追加恶意构造的SQL片段来进行测试。例如: ```sql username=admin' OR '1'='1 password=a' OR 'a'='a ``` 这些命令利用了逻辑运算符OR使得条件永远成立,进而绕过身份验证机制[^1]。 #### 联合查询注入 为了进一步探索数据库结构,即所谓的“爆库”,可以采用UNION SELECT语句组合两个SELECT查询的结果集。此方法适用于已知目标站点存在可利用的SQL注入点,并希望从中提取额外的信息的情况。比如获取其他表格的名字、列名等敏感资料。 ```sql ?search=test'+union+select+null,table_name,null+from+information_schema.tables--+HTTP/1.1 Host: example.com ``` 上述例子展示了如何从MySQL内置的信息模式(information_schema)读取有关现有表的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值