ksnctf #5 “Onion”をPythonで解読する

プログラミング

ksnctf #5 “Onion”をPythonで解読する

Problem

以下のような文字の羅列が与えられており、そこからFLAG_??????を得る。

Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSV01WbDNXa1JTV0ZKdGVGWlZNakExVmpBeFYySkVU
bGhoTWsweFZtcEdZV015U2tWVQpiR2hvVFZWd1ZWWnRjRWRUTWxKSVZtdFdVZ3BpVlZwWVZtMTRj
MDB4V25GUmJVWlVUV3hLU1ZadGRHdFhRWEJwVW01Q1VGZFhNSGhpCk1WWlhWMjVHVW1KVldtRldh
a0Y0VGxaVmVXUkdaRmRWV0VKd1ZXcEtiMlJzV2tkWGJHUnJDazFXY0ZoV01qVlRZV3hLV0ZWdFJs
ZGgKYTFwTVZURmFZV1JIVWtkYVJscGhUVEJLZDFadGVHRmtNV1JYVjI1U1RsWkdTbkZEYXpGRlVX
cFNWMDFxVmxSWlYzaExWMFpXYzFacwpWbGNLVFRKb1RWWlVSbUZaVjFKSVZXdHNWV0pYYUZkV01G
WkxWbFprV0dWSGRHbE5iRXA2VmpKMGExbFdUa2xSYmtwRVlYcEdlbFl5CmRHOVdNREZ4Vm14U1Yx
SXphR2hWYWtaUFl6RmFjd3BXYkdOTFZGUkJNRTFHV2toa1IwWm9UV3MxTUZWdGRHdFpWa2w1WVVa
T1YwMUcKV2t4V2JGcHJWMGRTU0U5V1NrNVdiSEJKVmpKMFlXSXhVbk5VYTJob1UwVktSVmxZY0Vk
WFJsbDVDbVZIT1ZkTlJFWjRWbTE0VTFZeApTWHBoUjJoV1lXdGFVRmw2Um1GamQzQlhZa2RPVEZa
R1VrdGlNVkpYVjJ4V1UySlZXbUZXYWtaTFUxWmFXR1JIT1doTlZXdzFXVlZhCmExWXdNVWNLVjJ0
NFYySkdjR2hWYWtaaFpFWktkR1JGTlZkTlZYQmFWbTF3U2sxV1ZYbFNiazVVWWtkNFYxbHRkRXRT
Vm14WlkwVmsKV0ZKc1ZqVkRiVlpJVDFab1UwMUdXVEJYVkVKdldWWmtjd3BYYTFwWVlUTlNhRlZy
Vm1GamJIQkdWMnQwYW1RelFtaFZha3ByVkVaawpWMVZyVGxkTlJGWklWMnRvVDFkSFNsWlhiR1JW
VmpOT05GUnJXbXRqYlVaSFZHMW9UbFpZUVhoV1ZtUTBDbUV4V1hkTlZXTkxWakowCk5GWXlTa2Rq
U0VwWFRVZFNXRlV3V2t0ak1WWnlUbFprVGxaWVFtRldiVEYzVXpBeFNGSllhRmhpYkVwVVZqQmtV
MVZHV25SbFIwWlQKVm0xNFdsa3dWbXNLVjBaS2RHUkVUa1JpUjFJd1ZERmFiMVV3TVVkWFZFSllW
a1ZLZGxWNlJscGxVWEJUWW10d2NWVnNhRzlXTVd4WQpaRWhrVmxKc1ZqUldNbmhQWVcxUmVsRnNi
RnBpUjFGM1ZrVmFZUXBrUjFKSFdrWndWMkpJUWxsV2FrbzBWakZWZVZOc1dsaGlWVnBZCldWZDBZ
VlJHVlhoWGJVWllVakZLU1ZReFpHOVViRnBZWkhwR1dGWnNXbkpEYlVsNFYyeGtXR0V4YkV4V1ZF
b3dDazVHV1hsVGEyUnEKVTBWd1dGUlZaRk5YUmxWM1YydDBhazFXV25sVWJGcHJWR3hhV1ZGdFJs
ZGlXRUpNVkZWa1NtVkdWbGxoUjJ4VFlsWktWbGRXVWtkawpNVnBYWWtoT1YySlZXbFFLVm0weE5H
VldXWGxPVjNOTFZtcEtTMUl4WkhGUmExSm9aV3hhWVZZeWRHRmhNVkp6VTJ0YVdHRnNTbGhaCmJG
SkdUVVpXVlZKc2NHdGtNMEpQVm14a2IxWXhiRlZVYlRsWVVtMTRlZ3BaVldNMVlXMUtTVkZyYUZk
TmJrMHhXVmN4VW1Wc1JuVlMKYkZwb1lUSTVNMVpyVm1GWlVYQllVbFJHUmxWdGVFdFViVVY1Wkhw
Q1YyRnJhM2hXVkVwSFl6Rk9jMkZHV21sU01VcG9DbGRYZEdGawpNa1pIVmxoa1dHSklRbk5XYkZK
WFYwWmtjbGR0ZEZkTlJFWktWVmQ0ZDFkR1duTlhiV2hFWWtaR05GWXhhR3RVYkZwWVZHdDRWMkZy
CmIzZERhelZIVjFoc1ZHRXlVbkVLVlRCV2QxZEdVbFphUms1WFVteFdNMVl5ZERCaE1VbDRVMnRr
VldKR2NISldSM2hoVjFaR2RGSnMKWkdsWFJVcE5Wa1pXWVdNeFpFZFViR3hwVW1zMVdWVnFTbTlX
YkZweFVXMTBWZ3BOVjFKWVdXdG9VMkV4VGtoVmJGRkxWbTB3ZUU1RwpaSE5oTTJSWFlsaE9URlpx
UW1GVE1sSklWV3RXVldFeFNuQlZha1pLWkRGYVJWSnRSbWhOVmtwNlZUSjBZVmRIUm5OVGJHaGFD
bUpHClNrZFVWVnBYVmxaS2RHUkdUbXROTUVwYVYxY3hlazFYVGxkV2JrNW9VbnBzV0ZSV1pEUmxa
M0JhVmxkTk1WWnRlRXRrVmtaeVlVWmsKVG1Kc1JqTlhWbU40VlcxV2MxSnVUbWdLVW01Q2IxUlhl
RXRWVmxweVZtMUdhR1F6UWxsVmFrWkxVMVpSZUZkcmRHaFdiSEI2V1RCUwpZVll5Um5KaE0yaFdZ
V3RhV0ZwRldrOWpNV1J6WVVkc1UwMXRhRzlEYkdSWVpFZEdhd3BOYTFwSVZqSTFSMVV5U2taT1dF
WlZWbTFTClZGUlZXbGRrUjFaSVVteGFUbUV6UWt0V1ZscHZZVEZrUjFkdVRsaGlWMmhGV1d0YVIw
NUdXWGhoUjNSVllrWndXVlpIZERSV01rWnkKQ21JelpFUmhlbFpJV1d0YWExWkhSWGhqUm10TFYx
ZDRhMkl4WkVkVmJGcGhVbXMxVjFWdGVHRk5SbXQ2WTBaa1dGSnJiRE5aTUZacgpWbGRLUjJOSVNs
ZFNNMmhvVmpGYVIyTnRVa2NLV2tkc1YxSldiRFpXYkdoM1VXMVdSMVJyWkZSaVIzaHZWV3BDWVZa
R1duRlRiVGxYCllrZFNXVnBGWkRCVWQzQlRZa2QzTUZkWGRHOVZNa1owVm01S1dHSkdSa3hXYlRC
M1pVVTFTQXBXYms1WVlteEtVRlpxVGs5VVJscHgKVVcxR1ZFMXJNVFZWTW5SWFZqSkZlRk51UWxk
aVdGSXpWVEo0WVZKV1NuUlNiV2hPVm10d05sWlVTakJaVm1SSFdrVm9hRkp0YUdGRApiVVY1Q2xW
ck9XRldWbkJ5Vm1wR2EyUkhVa2hqUjNST1RVVndZVll4V2xOU01sRjRXa1prYVZKc1dsWlphMVV4
WWpGV2RHVkhSbXhWCldFSllXV3hTUjFOR2JGaE5WWFJVVWpGSk1sVXllR0VLWVZaa1NHRkliRmhX
YlU0MFZsY3hWMk14U25WVWJXZExWVzAxUTJJeFVsaGwKUlhSV1ZteHdlVlp0TVVkaFIxRjZVV3hz
Vm1GcldreFZNVnBYWkVkV1NHUkdWbWxTV0VKSlZtcEtNQXBqTVZsNVVtNUthV1ZyU21GWgpWM1Iz
VTBac05sSnJPV3BOYTFwSVZqSXhjMVV3TVZaalJtaEVZa1p3TUZrd1ZUVldVWEJPVWtaYVNWWnNZ
ekZUTVdSSVUydHNVbUpyCk5WaFphMXBMQ2xkR1duRlNiRXBzVW0xU01GcEZXbXRVYkVwR1YydDBW
MVp0VVhkYVJFWmFaVlpPY21GR1dsZFNWWEJHVjFkNFYxWXcKTlVkWFdHaG9Vak5TVmxsclduZFhW
bHBJWkVSU1YwMXJXbmtLUTIxSmVscEZVbWhsYkZwSlZtcEdiMkV4VW5OYVJXUllZbFJvVEZacwpa
SGRUTWtsNFdrVmtWbUpHY0ZsWmEyUlRWVVpXZEdWSVpHeGlSbXcxV2tWa01HRkZNVlppUkZKV1RX
NVNjZ3BXYkdSTFVqSk9TVk5zCmNGZGlTRUpSVmxjeE5GUXlUblJWYTJOTFYydGtjMWRHU2xaalJU
VlhZVEZ3V0ZsVVJrOWtSbHB5V2taa2FWSXphSFpXVjNCRFdWWmEKVjFadVRtaFNWVFZYQ2xWdGVI
ZFdiRlpZVFZSQ1ZXUXpRbFJaYTJRelRVWmtXR1JIT1ZSTlZtdzFWV3hvZDFadFNrZFNhM2hYWWxS
QwpNMXBWVlRGVFFYQlhZa2RTV1ZsdGVFdFZSbHB6VlcwNVZWSnNjSGtLVmxkMGExWkZNWEpOVkZK
WVlUSm9TRlpYTVVabFJrNTFVV3hrCmFWSnJjRmxXVkVaaFdWZE9jMk5GVmxaaVYyaFBWbTEwZDA1
c1duRlRhbEpwVFZaYVNGWkhkRzlpUmtwMFlVZEdSQXBpVlhCSVEyeE8KY2xwR1ZsZFdia0paVm0x
NFlWTXlUWGxVYTJoc1VteHdXVlZzVm5kV01WbDRXa1JDV2xadGVGaFdNblJyWVZaS2MxZHNXbHBp
UmtwNgpWakZhVjJSSFZrWmtSbWhTQ2xkRlNsbFdSbVIzVmpKT2MxZHVTbGhoTTFKeVZXcEdTazFz
VlhsbFIwVkxXVlphYTFJeFRuVmlSbWhYCllsVTBNRlpzWTNoV01rMTRVMjVXVm1KWFpFeFdWekUw
WkRKSmVHSkdWbFFLVmtaYVQxUldXbmRsVmxwMFRWVmtXR0pHV2xwVlYzaHoKVm0xS1IxTnJhRmRp
V0doWVZqQlZlRlpXUm5OV2JXeFRZbXRHTkZac1dtdE9RWEJxVFZac05WVnROVXRoVlRCNVZXMUdW
d3BoTVZwbwpXVlZhZDFKc1pISmtSbWhYVFVoQ1NWWnFTWGhqTWtaR1RWWnNVbUpIYUVWWmExcDNU
VVpTVm1GSE9WZGFNMEpQVm0wMVExTldXbkZTCmJUbHBUVmRTU1ZVeWVHRlhSMHBIQ2xkc1pGcFdN
MUpvUTJ4U1IxWllhRmhpUjFKeVZXcEdZVk5XVm5SbFIwWlZZbFZXTmxWWGREQlcKTVZwMFZXcE9X
RlpzY0dGYVZscExaRlpPZEdGRk5VNWlWMmhIVmpGa01GWnRWa1lLVGxWa1dGZEhlSE5WYWs1VFYx
WldjVkZzWkU5UwpiWGg1Vm0xd1UxWXdNVmRqUldOTFVUSXhTbVZzY0VaVmJXaHNZa1p3U2xadGNF
ZGlNazE0Vmxob1lWSlhhRzlWTUZaWFZFWmFjd3BhClNHUlVUV3RzTkZZeGFHOWhWa3AwWVVoS1Zt
RnJTbWhaTVZwelkyeHdSVlJyTldsU2JHOTNWa2Q0YTAxR1dYaFRia3BwVWtaS1YxUlgKTlZOaloz
QlhZa2RTVEZWcVNrOVRWazV6Q2xwRk5WTmlhMHBPVm0wd2QyVkdVWGhUYmxKV1lUSk9URll5ZEd0
ak1WbDRVMnhrYVZKRwpjRmhaYTFwTFZFWndXRTFXWkZOTlYxSmFXVlZhYjJGV1NYcGhTR1JYVm5w
Rk1GVjZTa29LWlVaV2MyRkhlRk5YUmtwWlEyeHNjbHBHClRsaFdia0pIVjJ0U1EyRkdWbGxSYXps
WFlsUkZlbFJWV210WFIxSklUMVphVG1FeFdUQldhMlF3WWpGYWRGTnJaRk5oTTJoWVdXeFMKUXdw
Tk1YQldWbFJHVkZGWVFsaFpiWE14VjFac2RHVkZkRlpTYkhCNFZrZHpOVlpXU25OalJFRkxWMnRX
YTFJeFpITlhXR1JPVmtaSwpWMVJYY0ZkVFJscDBUVlZhYkZKck5URlZWM2hoQ21GV1pFaGFNM0JY
VWpOb2FGZFdXa3RXTVU1MVZXeE9hVll5YUZCV2JURXdaREExCmMxZHVSbFJoYkVwd1ZGWmFZVk5H
V2toa1J6bHBVbXR3TUZsVlpFZFNRWEJwVmxoQ1NWRXllRThLWTJ4d1IxWnNaRmRpYTBwMlZtMHgK
TkZsV1RYbFVXR3hWWVRKb2MxVnRlSGRYVmxaelZtNWtWMkpHYkRSWFZFNXZWR3hKZUZKcVZsZFNN
Mmh5Vm1wS1MyTnJOVmhQVmxwcApZbXRLTmdwV01WcGhXVmRTUms1V1dsVmlSMmhYUTJ4a1JsTnRP
VmRXTTJoeVZsUkdUMUl5U2tkaFJUVlhWMFpLVmxadE1UQlpWMVpYCldraEtXR0pVYUV4WFZsWlda
VVpaZVZScmJHbFNiVkp3Q2xWdGRIZFVWbHB6V1ROb1YwMXJNVFJWTWpWWFZsZEtXR1JGZUZkV2Vr
RjQKVlZSS1NtVkdWbk5oUjNkTFZXeG9VMVl4V25SbFNHUnNWbXh3TUZSV1ZtdGhSa2w0VW1wYVZs
WXphSG9LVm0weFIyTnNaSFJoUmxwTwpVbTVDYUZkc1dsWmxSbHBYVW01T1YySlhlRmhXTUZaTFUx
WmFkR05GWkZaa00wSlRWRlphYzA1V1ZuUk9WWFJvVmxSQ05WWlhlRzlYClozQlhUVEZLYndwV2JY
QkhaREZaZUZwSVNsQldNMEp3Vm14YWQxTldXbkZUV0docVRWWldOVlV5TlV0V1IwcElZVVZXV21F
eGNETlUKVlZweVpERmFWVlpzWkdGTk1FcFFWbGQwVjFOck1VZGFSbFpTQ21KVlduQlVWM1IzVTBa
VmVVNVdUbGRpVlhCSlEyMVdSMXBHY0ZkTgpNVXB2VVRJeFIxSXhXbGxhUm1ocFYwWktlRmRYZEd0
Vk1sWnpXa2hLWVZKNmJGaFVWM1JYVG14V1dFMVZaRmNLVFZad01GWkhjRk5XCmJVWnlWMjFHWVZa
c2NFeFdNV1JMVWpGa2MyRkdUazVXV0VKSVZtcEdZV0l5VVhoWFdHZExWa2QwYTFZeFpFaGxTRXBX
WVdzMVZGbHEKUm5OamJGcDFXa1pTVXdwaVdHZzFWbTB4ZDFVeFdYZE5WbHBxVTBjNVRGVlVTalJo
TWsxNFZtNUtWbUpYZUZoV2ExWldaREZhYzFWcgpkRTVTTUZZMVZXMDFUMVpIUlhsVmJrWldZa1pL
ZGxaRldtRmpkM0JoQ2xKRlNtOVVWVkpYVTBaVmVXVkhkRnBXYXpWSVZqSTFRMVpXCldrWmpSbEpY
Vm14d2FGbDZSbUZXVmtwMFpFWmthVkp1UWtwV2JYaGhZakpGZUZkcmFGWlhSM2hSVld0a05GSlda
SFVLWWpOa1VGVlkKUWtWWGJtOTNUMVZPYmxCVU1Fc0sK

Solution

パッと見てbase64ぽいので変換してみると、少し短くなった。

Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSWFJteFZVMjA1VjAxV2JETlhhMk0xVmpGYWMySkVU
bGhoTVVwVVZtcEdTMlJIVmtWUgpiVVpYVm14c00xWnFRbUZUTWxKSVZtdGtXQXBpUm5CUFdXMHhi
MVZXV25GUmJVWmFWakF4TlZVeWRGZFdVWEJwVWpKb2RsWkdXbGRrCk1WcFhWMjVTYWxKWFVtRldh
a1pMVTFaYWRHUkdaRlphTTBKd1ZteGFkMWRXV25STlZGSnFDazFFUWpSV01qVlRZV3hLV0ZWc1Zs
VlcKTTJoTVZURmFZV1JIVWtsVWJXaFdWMFZLVlZkWGVHdGlNbEp6VjJ0a1lWTklRbkpEYXpGelYy
dG9WMDFxVmxSV1IzaGhVakZPYzFacwpWbGNLVFRBME1GWkhkR0ZoTWs1MFVtdGtZVkl5YUZOV01G
WkxWbFprV0dSSE9WSk5WbHBJVjJ0YWIxUnNUa2hoU0VKRVlYcEdXRll5CmVHOVdNREZ4Vm14U1Yx
SXphR2hWYWtaUFl6RmFjd3BXYkdOTFZGUktiMVJXV2xWU2JVWmFWakZLU1ZaWGRHOWhNVWw1WVVa
a1YwMUcKV2t4V2JGcGhVakZhZEZKdGRFNVdNVXBaVm1wSk1WVXlSbk5UYkd4V1ltdEtSVmxZY0Vk
WFJsVjVDbVZIT1ZoU01GWTBXVEJvWVZkcwpXa1pYYTNSaFVrVmFjbHBGV2t0amQzQmhVakprVEZk
V1VrTldNRFZIV2toT1dHSlZXbGRVVjNONFRrWmtjbUZHVG1oTlZYQXhWVmQ0CmExWXdNVWNLVjJ0
NFYySkdjSEpXTUdSWFUwWktjMVZyTlZkTlZYQmFWbTF3UzAxSFJYaFhibEpUVjBkU1VGWnRlR0ZT
Vm14WlkwVmsKV0ZKdGRETkRiR1IwVDFab1UwMUdXVEJYVkVKdlV6RlplUXBTYmtwcVVsaG9WMWxY
ZEhkVlJsVjRWMnhPYW1RelFsbFpiR1F3VkVaYQpkR1JHWkZwV2JIQllWako0VjFVeVNsWlhiVVpY
WVd0YVRGVXhXbUZYUjFKSVQxZG9UbFpYZHpGWFZsWnJDbUl4V2xkWGExbExWVEowCk5GWXlTa2Rq
U0VwWFRVZFNXRlV3V2t0ak1WWnlUbFprVGxaWVFtRldiWEJMVFVkSmVGVllhR2xTYlZKVldWUkdk
MVpXYkhOV2JVWlQKVm0xNGVWWXlOV3NLVmpKS1IxZHFRa1JoZWxaYVYydGFhMVJzU2taWGFsSlhZ
bFJGTUZWVVJscGtkM0JPVmxkb1YxbFVUbTlYUm14egpZVWM1YW1KSVFraFdNbk0xWVcxUmVsRnVS
bFpoYTI5M1ZrVmFZUXBYUlRGRlVteEtUbUV5ZHpCV2Fra3hWVEpHYzFOc2FGWmlSMUpoCldXdGFk
MkZHVlhkWGJIQnNWbFJXV0ZkcldtdFdNREZKVVd4d1dGWnNXbWhEYkZGNFYxaGtUbFpYVGt4V2Fr
b3dDazVHV1hsVGEyUnEKVTBWd1dGUlZaRk5XUmxWM1YydDBhMUl4U2tkVWJGcHJWR3hhV1ZGdFJs
ZGlXRUpNVkZWYWMxZEdUbGxpUms1WVVqSm9WbFpxUW10VgpNV1JYWWtoU2ExTkhVbFFLVm0weE5G
ZHNhM2RXYlhOTFZqQmFTMlJIVWtWVWExSnBVakZKZDFaRVJtRmhNVkp6VTJ0YVdHRnNTbGhaCmJG
SkdUVVpXVlZKdGRGTmtNMEpaV1cxek1XTldWbk5oUnpsWFRWZDRlZ3BaVldNMVZteEtkVkZyYUZk
TmJsRjNXVmN4VW1Wc1JuTmgKUm5Cb1RXeEtVVlpyVm1GaGQzQllVakZLU1ZReFdrdGhWbHB6WTBS
YVYyRnJhM2hWYWtaWFpFWk9jMWRzYUdsU01taG9DbGRYZEdGawpNa1pIVjI1R1UySkZOWEZVVm1S
VFRVWldkR1ZIUmxaTmEzQktWVlpvYTFkR1duTlhiV2hFWWtaR05GWXhhR3RVYkZwWVZHdDRWMkZy
CmIzZERhelZIWWtaa1ZHRXhjRmtLV1d4a2IxZEdVbFphUms1V1VteGFNRmt6Y0ZkWFJrbDNZMFZr
VldKR2NISldSM2hoVjFaR2NtUkcKWkdsV1JWbDZWbGh3UW1WR1RrZFRiR3hvVWpCYVZGWnFTbTlX
YkdSWVpFZDBUd3BTYkd3MFdXdG9VMkZ0Vm5KWGJGRkxWbTB3ZUU1SApWbk5YYmxKUFZqTk9URlpx
UW1GVE1rMTVVMnRXVjJFeFNuQldiWFIzVTJ4YVJWSnRSbWhOVmtwNlZUSjBZVmRHWkVoaFJtaGFD
bUV5ClVrOWFWVnByVmpGa2RHUkhjR3ROTUVwYVYxWlNSMlF4WkZkaVJsWlZZa1UxYjFWdGVHRmxV
WEJYWWxSR1NGbFhNVXRUUjFJMlUyeGEKYVZkSGFIbFhWbU40VlcxV2MxSnVUbWdLVW01Q2IxUlhl
RXRWVmxweVZtMUdhR1F6UWxsVmFrWkxVMVpXZEdWSGRGVmlSWEJJVmpKMApjMVl5Um5KaWVrSmFZ
V3R3U0ZsNlJrOWpNa1pIVjIxc1UwMVZjRmhEYkZwMFkwVTVWUXBOUkZaSVZsYzFTMWRIU2tsUmJr
NVhZa1pLCldGWnFSbEpsUm1SMFpFWmtUbEpGV2t0V1ZtUXdaREZaZVZOcmFGWldSVXBGV1d4V1Yw
NUdXWGhoUjNSVllrWndXVlpIZERSV01rWnkKQ21JelpFUmhlbFpJVmpGb2ExUnNaRWRYYlRoTFZs
ZHdTMkl4WkVkVmJGcFlZa2RTVUZWdGVIZGxiRmw1WkVkMGFFMVZiRFJWTW5ScgpWbGRLUjJOSVNs
cFdiSEJRVlcxNFQyTnRVa2NLV2tkc1dGSlZjRTVXYTFwWFlURk9kRlpyWkZkaVIzaHZWV3BDWVZa
V1ZuTmhSVTVXClVteHdWbFZYTVRCVWQzQlRZa2QzTUZkWGRHOVRNVmw1VWxod1ZtSkdSa3hXYlRC
M1pVVTFTQXBXYkdSWVlteEtVRlpzVW05VVJscHkKVld0a1ZFMXJNVFJYYTJoSFZXMUZlRk51UWxk
aVJrcFlWVEZhWVdOc2NFVlZiV2hPVm10d05sWnFTalJpTVZaSFZHdG9iRkp0YUdGRApiVXBIQ2xO
clpGVldWbkJZVm14YVMyTXlUa2hsUmxwWVVsVndWMVl4WkRCWlZteFhWMnRrYVZKc1dsWlpiRkp6
VjFaV2RHVkZkRmhSCldFSllWRmR3VjJOc1duSlhhM1JyVWpGSk1sVXllR0VLWVZaa1IxTnViRmhX
YlU0MFZsY3hWMk14U25WVmJXZExWVzE0ZDJJeGJGVlQKVkZaT1RWWndlVlp0TVVkWGJGWlpVV3hz
Vm1KR1NraFdiWGhYVjBVeFZWRnNWbWxTYmtGNFZsWmtOQXBqTVZsNVVtNUthVTB5VW1GVwphMVpo
WVVad1JsZHJkRmhXTUhCSVZqSXhjMkZGTVZsUmJHaEVZa1p3TUZSVmFHOVdaM0JPVm01Q1NWWnFS
bTlpTVdSSVUyeGFXR0pHCldsZFpWM1JoQ2xSR1ZYaFhiR1JyVWpGYVNWVnRlR0ZVYlVWNlVXdDBW
MVp0VWpOWFZscGFaVlpLZFZOdGFFNU5iV2hHVjFkMFZtVkYKTlVkWFdHeHNVak5TV1ZWcVFsZE9S
bXh5Vm1wU1YwMVdjRWNLUTIxSmVscEZVbWhsYkZwSlZtcEdiMk14VlhoYVJXaG9VMFZXVEZacwpa
SGRUTWtsNFYxaG9hVkp0YUhKVmFrSmhZMVpzY2xwRVRrNWlSbG93Vkd4a01GWXhTbkppUkZKV1RX
NVNjZ3BXYkdSTFVqSk9TVk5zClpFNVNia0pOVm0wd2VGUXhTblJWYTJOTFYydGtjMVl4U2xkaVJG
cFhZa1pLVEZwWE1WZFNNV1JaWVVab2FWSXphSGRXVnpFMFV6SkoKZUZWc2FHeFNXRkpZQ2xsclpG
TlhWbkJHV2tSQ2FGVllRazlXYlRFelRVWmtXR1JIT1ZaTmExWTBWa2QwYjFadFNrZFNhM2hYWWxS
QwpNMXBWVlRGVFFYQlhZbXMxV1ZsdGVFdFZSbHB4VkdzNVZWSnNjREFLV2tWa1IxZHNXWGROVkZK
V1RXcFdTRlp0TVVabFJrNTFVV3hhCmFWZEhaM3BXUjNoaFdWWktWMU51VWxOaVYyaFBWbTEwZDA1
c1duRlRhbEpwVFZaYVNGWkhkRzlpUmtwMFlVZEdSQXBpVlhCSVEyeE8KY2xwR1ZsZFdia0p2Vm0x
NFlWTXlUWGxVYTJoc1VteHdXVlZzVm5kV2JGbDRXVE5vVGxJeFJqVldSM2hyVmpKS2NrNVhPVlpp
YmtKNgpWMVphWVdSRk5WWlViR2hXQ2xkRlNtOVdWM2hyVlRGT1IySkdhRTVXV0ZKVlZtMTBZV1ZX
WkhKWGJUaExXVlZWZUZZeVRrbGlSbVJwClVtdHdUVlpzWTNoV01rMTRVMjVXVldKWGRFeFdWekF4
VVRKSmVGVnNhR3dLVWxoU1YxWnRlSGRsVmxwMFRWVmthRkl4UmpaVlYzaHoKVm0xR2NsZHRhRlpO
Um5CaFdsWlZlRlpXUm5OV2JXeFhWMFZLU1ZadGNFZFZkM0JTVFZac05WVnROVXRoVlRCNVZXeG9X
Z3BXTTFKbwpWbXBHZDFZeFpISlBWM0JwVmxad1NWWnFTWGhqTVZWNVUyNUtWR0pIYUVWWmExcDNU
VVpyZDFaVVZsZGFNMEpQVld0V1NrMUdaRlZSCmJVWnBUV3R3U0ZVeU5WTldiVXBJQ21WR1pGcFdN
MUpvUTIxR1IxWllaRmhpV0ZKeFdXdGtVMlZzWkhKYVJ6bFhUV3RXTmxWWE1VZFcKTVZwMFZHcFNW
bUZyV21GYVZscExWMWRLUjFkc2FGTk5WWEJIVmpGYWIyUXhXWGdLVkd0a1YxZEhlSEpWYWs1VFlq
RnNjbFp1WkZSUwpiWGg1Vm0xd1UxWXdNVlpqU0c5TFVUSjRhMk14Vm5KVmJXeFhWa1ZWZDFac1Vr
dE5SMFY1VW01T1ZHRXlVbkZWYkZKdlZFWmFjd3BhClJFSm9UVVJXU0ZVeWVHdFpWazVIVjI1Q1ZW
WkZjRlJXVmxwaFl6RmFWVkp0ZEZkaVJuQkpWbXhhYjJFeFdraFZXR3hRVWtkNFJWZHUKYjNkUFVY
QkVXbm93T1VOblBUMEsK

まだこのままだと分からないので何回かbase64で復号化してみる。

以下がPythonで作った読み込みこんだファイルを標準入力で入力した回数だけbase64で復号化するプログラムである。

import base64

def main():
    
    # 暗号文の書かれたテキストファイルの読み込み
    f = open('base64_code.txt', 'r')
    cipher = f.read()

    num = int(input())

    #復号
    decode(cipher, num)

def decode(x, times):
    if times == 0:
        print(x)
    else:
        x = base64.b64decode(x).decode()
        decode(x, times - 1)

if __name__ == "__main__":
    main()

16回したら何やら意味ありげな文が出てきた。

% python base64_decoder.py
16
begin 666 <data>
51DQ!1U]&94QG4#-3:4%797I74$AU
 
end

Googleでbegin 666と検索するとどうやらuuencodeというもので変換されているということが分かる。

uuencodeとは

Unix to Unix ENCODEの略。バイナリデータをテキストデータに変換する手法。電子メールやネットニュースの配送で多用されるが、現在はMIMEのBase64が一般的である。uuencodeのフォーマットは以下のようになる。

begin <mode> <decode_pathname>
     エンコードされた文字列
end

<mode>が3桁の8進数で、<decode_pathname>が元のファイル名である。

3オクテット(24bit)毎に符号化し、6bit毎にASCII文字に変えていく。

では本題に戻ろう。

先ほどのbase64でデコードしたものをuuencodeでデコードする。

まず先ほどの出力をuu_code.txtにする。

% python b*.py > uu_code.txt
16

そして、Pythonでデコード

>>> import uu
>>> # uud.decode(inputファイル, outputファイル)
>>> uu.decode('uu_code.txt', 'flag.txt')

これでFlagが手に入った!!!

% ls -l f*
-rw-rw-rw-  1 Tomoki  staff   21  6 13 19:53 flag.txt
-rw-r--r--  1 Tomoki  staff  116  6 12 14:32 fsa.c

CTF, セキュリティの参考資料

Udemy

個人的にUdemyが動画で分かりやすいし、値段も安いのでおすすめです。

実践的なものが特に役立ちます。

ワイトハッカー入門

ハッキング技術入門

サイバーセキュリティ~ハッキングと防御 ビギナー編

ホワイトハッカー養成講座(ハッキングツール、Webアプリ攻略、不正侵入検知)

ホワイトハッカー養成講座 (インシデントハンドリング&Windowsアタック編)

サイバー攻撃:侵入から権限昇格まで

書籍

  • セキュリティコンテストチャレンジブック CTFで学ぼう!情報を守るための戦い方
  • セキュリティコンテストのためのCTF問題集
  • デバッガによるx86プログラム解析入門
  • リバースエンジニアリングバイブル
  • 大熱血アセンブラ入門
  • 楽しいバイナリの歩き方
  • Reverse Engineering for Beginners
  • HACKING: 美しき策謀
  • 秘密の国のアリス
  • 暗号解読
  • 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 第2版

コメント

タイトルとURLをコピーしました