香港国际机场中转过夜

长假后的几天从东京成田 NRT 归国飞上海浦东 PVG,因为直飞过于离谱的价格,不得已选择了 HX 香港航空绕行香港机场 HKG,后半夜到达 HKG 后要逗留近 6 个小时,再在早晨转乘前往 PVG 的联程航班。更加不巧的是,10 月 9 日晚遇到了台风小犬,更是自 1992 年设立暴雨警告信号系统以来,首次出现 “八号风球” 与 “黑色暴雨警告” 同时生效的情况。

之前做了一些在 HKG 过夜的攻略,也咨询了在 HKG 过过夜的盆友 @xierch ,比如在什么样椅子上休息、充电插口有哪些、夜里去哪里吃东西等等,更高阶一点的可以考虑免费洗澡间和 24h 休息室。但是亲身体验一把之前心里还是觉得很没底的。

8 日晚在从 NRT 起飞前,香港天文台就已经挂出了九号风球,但这也没影响飞 HKG 的前序航班正常抵达。在降落前,飞机在风暴中忽上忽下的搏斗和机长颇有几分坚毅口吻的降落广播都难免使我有点紧张。 9 日 1:42(UTC+8) 终于落地,只见风雨如晦,八号风球仍正生效中。

进入航站楼后查看地图,发现位于 T1 的西翼,西翼也有转机点可上达出发层,但我事先已得知免费洗澡间在到达层,所以先不急上楼。在到达层向东翼走了茫茫长的一段路,也见到了许多在到达层下机口和衣而卧的人。在 12 号下机口发现洗澡间,但男浴室却高挂维护牌,女浴室则没有。一路上比肩继踵的人都奔向入境口,似乎也没见什么人对这两间澡堂子有兴趣的。

通过转机安检后上楼,来到了熟悉的 T1 东翼出发层。在免税店和登机口的交界处发现了 24h 麦当劳,进去(实际上是下去,这个店的平面位于出发层以下)后发现转机食饭的旅客挺多,更多的是身着各类制服的航司、机场工作人员在抓紧时间吃夜宵。可用点餐机,支微卡付款都支持。

匆匆吃完后来到真·冷冷清清的 T1 出发层,香港公共场所的冷气量妇孺皆知,在这种暴风雨天气下更是和我之前至少 9 次因转机等造访 HKG 留下的繁忙、热闹印象完全不同。冷冰冰的八号风球警告和空中花园关闭通知在广播中一遍遍地播送,更是给人多感官上都带来了不安。

从落地的时间算起,滑行、走路、吃饭已经花去了相当多的时间,吃完麦当劳后我记得已经大约快要凌晨三点。没什么心情再欣赏 HKG 的设施、飞行器等,直接在东翼的几个登机口找躺卧的地方,这里很多攻略 app 上都会列出详尽的躺椅、三连座的细目表,不过我并没有找到三连座的椅子,最终选择在 26 号登机口面向玻璃幕墙的躺椅安顿下来,放好了行李小推车,把港版转换头接上 GaN 充电器开始充电——这里不得不提到 HKG 虽然把 USB 充电口升级成了 USBA+C 这样的双口充电模块,但实际上这类插口的故障率仍然很高,我也没有条件去检测输出功率等情况,如果用自带的充电头,那么港版的转换头又少不了,着实有点麻烦啊。

即使是自带了专为过夜准备的毛毯,HKG 冷气的杀伤力还是不容小觑,右肩被吹得人根本睡不着,只能看着雨水在昏暗的停机坪照明下彻夜擦着玻璃。就这么干熬了一两个小时,约凌晨 6 点的时候 T1 已经热闹了起来,登机口也逐渐变得繁忙。找了个洗手间刷了牙,此时得知我往 PVG 航班的登机口被指派到了 5XX 摆渡车专用层,摇头苦笑,经历了如此难忘的一夜后,在大雨中露天上飞机好像都不算什么了。

身临其境 CISP-PTE

最近报名参加了公司集体组织的 CISP-PTE 学习考证。 CISP 是纯理论考试,CISP-PTE 和 CISP-PTS 则都是实操,后者的难度层次更高。这俩实操型考试的形式非常类似于 CTF 夺旗赛,侦测漏洞后利用工具渗透进测试靶机系统取得 key(对应 CTF 比赛中的 flag)为得分点。 PTE 有 20 道 1 分理论题,5 道一步拿 key 的 “小题”(10 分)和 1 道需由浅入深按步骤获取 3 个 key 的综合 “大题”(每个 key 10 分共计 30 分),70 分为及格线。今年(2023 年)考试时间由之前的 4 小时缩短为 3 小时,并且不允许去厕所,难道之前厕所 py 的现象太过于严重了?

理论问答题比较基础、简单,事先认真看一遍复习题大约能获得 85% 的正确率。但也有一些只能靠死记硬背或者因工作涉及而有着条件反射般的记忆,否则几乎无法现场推测答案——比如问你 Windows 登录密码错误会在产生何种编号的事件?……

考试时是用浑身长满眼睛的特制 “安全” 浏览器以 vnc 的形式登录到考试提供的攻击机环境——安装了扫描(如 nmap 、御剑目录爆破等)、抓包(经典 burpsuite)、注入(SQLmap)还有字典、转码等等很多工具的 Win7 操作系统,靶机和攻击机处于简单的同一 LAN 下,这就为 “反弹 shell” 、 “用 img src 储存型 xss 抓 cookie” 、 “远程文件包含” 等方法提供了网络环境支持。考试全程中攻击机和靶机都不通公网,且考生的操作机也不能以任何形式暂离考试专用浏览器。

第一道小题为 SQL 注入考察,以寻常的登录框起手,此处直接用 SQLmap 可以一步以时间延迟跑出结果,key 藏在文件系统(题目会告诉具体路径)而非数据库中,对于手工做题来说免去了从 information_schema 库中查询结构,上面提到的靶机和物理机间的网络环境简单且稳定,也为 SQLmap 以二分法+ sleep() 函数逐个去试字母提供了极大的有利条件。据其他考生说以 admin’ or ‘1’=’1 万能账密登入后在搜索框也有注入点,将会利用到课上讲过的 union select 联合查询注入的方法,以查询文章列表为例,假设注入点为 www.example.com/article.php?id=1

  • 先用 order by 试出注入点所查询的数据表列数:1' order by 5#(从 1 慢慢往上加,直到页面无任何显示即后台查询出错为止,出错前最后一个数字就是列数)
  • 再判断这些列中有哪些是展示在页面上的 -1' union select 1,2,3,4,5# 如果页面上显示 2 、 4 、 5 那么则只有这些对应的列在查询后被使用(显示出来),-1 则是故意传递的非法值以便查询不到数据 “腾空” 页面。
  • 确定了哪些列会被展示在页面上后,就可以使用 -1' union select 1,2,3,group_concat(select database()),5# 这样的语句来显示出数据库的信息,MySQL 的表和列信息都可以从元数据库 information_schemaselect 取得,就算是文件也可以用 select load_file() 读出。

第二道小题(可能非考试顺序)为命令注入,此题非常像 dvwa 练习场中的 Command Execution,给出目标主机 IP 地址填写框,执行后会调用系统 ping 命令来探测目标主机。那么加入 && || ; 等分隔符都有可能造成 ping 以外的命令被执行。做练习题时发现此类题狗的地方在于底层会屏蔽一些读取 key 文件的关键命令如 cat ls 甚至可能包括空格,要知道一些绕过的 trick 如 tac 、 ca''t 、 ${IFS}代替空格等。

第三小题是文件上传考察,利用 php 遇到合法扩展名文件中 <?php …… ?> 就会执行其中代码的特性,在本该上传图片的靶机上传点中传入内含 php 代码的 “假图片” 。考点在于绕过各种上传限制,可能的限制有:扩展名、 MIME 、文件头等等中的一个或多个,由于是考试所以一定至少有一种可用的方法。找到绕过方法后往 POST body 图片源码中写入早已要求熟记的一句话木马 <?php eval($_REQUEST['cmd']); ?> 后可以直接传入 php 的 system() 方法执行系统命令或使用 webshell 管理工具拿到靶机站点权限。这里如果遇到过滤(如精确匹配 eval),和上述命令执行题一样用一些方法去变形绕过,如 $a = 'ass'.'ert'; ,想来也是 webshell 免杀的一些套路吧。接着直接去找 key 就成了。

第四小题是 php 代码审计,一般不会太过于复杂,但对于 php 的常见函数方法等还是得有所了解。这里遇到了一句代码关键点是: eval("\$o=strtolower(\"$a\");"); ,那么传入参数 a 的时候把前后语句闭合掉,让中间的代码传到 eval 那里执行即可, 如 ");system('pwd');(" ,果然填空游戏啊。

第五题是访问控制题,考察一些 http 头的使用方法,如 X-Forwarded-For 绕过 IP 限制,cookie 中的布尔值绕过权限检查等,很简单,再难也不过涉及一些 base64 编码。但一定程度上有助于初学者理解服务器是怎么 “消化” 客户端所提交的东西的吧。

综合大题,从以往的一些考题来看基本上就和综合渗透比较相似了,但也不会过于挖坑。一般考试题会提供一个独立 IP 地址的仿真站点,用 nmap 可以扫出一些如 ftp 、 http 、 mysql 端口等,从哪里入手就要看扫描结果和个人经验了。考试中 web 服务的登录框比较无解,用目录扫描扫出 phpMyAdmin,使用默认密码直接进去了数据库管理端,在数据库角落获取了 key1;之后进入 user 表修改管理员密码(利用攻击机内工具计算 hash 值填入),再从 web 登入,此后既可以用上传图片马的方法,也可以用 MySQL 执行 into outfile () 方法向 Web 目录写入木马,因为担心后续步骤较多,这里使用攻击机提供的蚁剑连上 webshell,在 web 目录下发现 key2 。做到这一步时我应该是在写图片马时手抖写错,使 php 报错时爆出了 Windows 下 Web 服务的绝对路径(也是获得绝对路径的技巧之一),这才为 SQL 写马提供了可能(SQL 写马需配置支持和知道绝对路径)。使用攻击机工具集已有的 3389 强制打开工具(看了下,实质是写注册表),再用 net user 命令修改 Administrator 的密码,mstsc 登录后在回收站中发现 key3 。

综上所述题目难度都不算大,多刷一些过往考试题,多了解一些 bypass 方法都对通过考试很有裨益。但我觉得最大的收货还是在于明白了一些原理层面的东西,而这些东西,可能平时往往因为手头 “差生文具多” 般眼花缭乱的工具而最容易使人忽略的——漏洞和问题的本质。这些本质性的东西可不会管你是什么最好的语言还是冒着热气的语言的。懂得了原理,是脚本小子还是手搓 poc 其实又有什么关系呢。