以下内容是通过阅读《Hack-A-Sat太空信息安全挑战赛深度解题》做的测试。
题目介绍
Fire up your Google Earth and brush up on your KML tutorials, we're going to make it look at things!
题目描述得很简略,主办方希望参赛者利用Google Earth软件和KML文件寻找到设置的flag。给出的资料有:
(1)一个命名为static的文件夹,其中只有一个文件remote.kml,从后缀名可知,该文件是KML(Keyhole Markup Language,Keyhole标记语言)文件,KML是专门用于描述和保存地理信息的文件格式,其详细情况会在下文介绍。
(2)给出了一个链接地址,使用nc连接到主办方给出的链接后,会得到进一步提示,如图2-1所示。
图2-1 beckley挑战题的提示信息
这段提示的内容就是告诉参赛者,当前截获了一颗卫星拍摄到的华盛顿纪念碑的照片,并且知道了这颗卫星的TLE(Two-Line Element,两行轨道根数)及照片的拍摄时间,要求参赛者在Google Earth中模拟卫星的拍摄角度、拍摄时间,就可以找到flag信息。
编译及测试
这道挑战题的代码位于beckley目录下,在该目录下打开终端,执行如下命令:
sudo make build
接着执行make test命令进行测试,输出如图2-2所示,可以发现测试中是使用curl工具访问Google Earth的,通过解析返回的信息,最终得到flag。
图2-2 beckley挑战题测试输出
为了更加清晰地显示解题过程,可以分开测试:
(1)打开一个终端,执行如下命令,其中端口号、flag值都可以随意设置,该命令的作用是运行一个beckley挑战题服务端容器。
socat -v tcp-listen:19020,reuseaddr exec:"docker run --rm -i -e SERVICE_HOST=172.17.0.1 -e SERVICE_PORT=19021 -e SEED=1000 -e FLAG=flag{zulu49225delta\:GG1EnNVMK3-hPvlNKAdEJxcujvp9WK
4rEchuEdlDp3yv_Wh_uvB5ehGq-fyRowvwkWpdAMTKbidqhK4JhFsaz1k} -p 19021\:80 beckley\:challenge"
(2)打开另一个终端,模拟参赛者,执行命令nc 172.17.0.1 19020,其中地址、端口就是第(1)步中启动服务端容器时设置的参数,其输出如图2-1所示,会给出题目进一步的提示。
(3)再打开一个终端,执行如下命令,该命令使用curl工具访问在第(2)步中提示的URL地址,其实是服务端容器模拟的Google Earth服务器地址。
curl http://172.17.0.1:19021/cgi-bin/HSCKML.py?CAMERA=-77.03,38.89,430000,40.3694166667,
63.5358055556-H 'User-Agent: GoogleEarth/7.3.2.5815(X11;Linux (5.2.0.0);en;kml:2.2;
client:Pro;type:default)' -H 'Accept: application/vnd.google-earth.kml+xml, application/
vnd.google-earth.kmz, image/*, */*' -H 'Accept-Language: en-US, *' -H 'Connection: keep-alive'
curl工具在URL地址后加入了很多参数,其中重要的是CAMERA参数,可以发现其由5个数字组成。在主办方提供的remote.kml文件中有如下描述,与curl工具使用的CAMERA参数很像,这是重点,具体含义会在下文分析中涉及到。
CAMERA=[lookatLon],[lookatLat],[lookatRange],[lookatTilt],[lookatHeading]
命令执行后,会返回KML格式的结果,如图2-3所示,从图中可以看出,在其中的<Placemark>标签的子标签<description>内给出了flag信息。
图2-3 beckley挑战题获取到的flag
相关背景知识
1.卫星轨道和TLE轨道根数
太空中的卫星在地球引力等各种力的作用下做周期运动,一阶近似就是一个开普勒椭圆轨道。由于其他力的存在(如大气阻力、其他星球的引力等),实际的轨道和理想的开普勒轨道有偏离,称为“轨道摄动”。这里我们暂时不考虑摄动,只考虑理想开普勒轨道时的情况。
为了确定一个卫星的运行轨道,需要6个轨道参数,卫星运行轨道参数示意图示意图如图2-4所示。
(1)描述轨道大小的参数——轨道半长轴a。
轨道半长轴是椭圆长轴的一半。轨道半长轴与轨道周期具有对应关系,半长轴越大,轨道周期越长。
(2)描述轨道形状的参数——轨道偏心率e。
偏心率是指椭圆两焦点的距离与长轴的比值。偏心率为0时,轨道是圆;偏心率为0~1时,轨道是椭圆;偏心率为1时,轨道是抛物线;偏心率大于1时,轨道是双曲线。
图2-4 卫星运行轨道参数示意图
(3)描述轨道平面在空间方位的参数——轨道倾角i和升交点赤经Ω。
轨道倾角是指轨道平面和地球赤道平面的夹角。倾角小于90°时,为顺行轨道,卫星总是从西(西南或西北)向东(东北或东南)运行;倾角大于90°时,为逆行轨道,卫星的运行方向与顺行轨道相反;倾角为0°时,为赤道轨道;倾角为90°时,为极轨道。