CpawCTF Writeup
はじめに
この間からCTFがしたかったのでやる
CTF初心者が考えるCTF入門 - きなこもち。を見るとCpawCTFというのがksnctfよりオススメらしい
Q1.[Misc] Test Problem
cpaw{this_is_Cpaw_CTF}
をコピペするだけ
Q6.[Crypto] Classical Cipher
Q2〜Q5はどこへ...?
よくあるシーザー暗号
今回は3文字ずらすだけ
適当に復号できるサイトを探した
今回はシーザー暗号で暗号化を使った
答えは cpaw{Caesar_cipher_is_classical_cipher}
適当にjsでコード書くとこんな感じ?
function decrypt(target, shift) {
const escapes = ["{", "}", "_"];
return target.split("").map(s => {
if (escapes.includes(s)) return s
return String.fromCharCode(s.charCodeAt(0) - shift)
}).join("");
}
const plain = decrypt("fsdz{Fdhvdu_flskhu_lv_fodvvlfdo_flskhu}", 3);
console.log(plain);
Q7.[Reversing] Can you execute ?
問題文に実行しろと書いてある
謎のファイルを実行したくないので、一応様子見
$ file exec_me
exec_me: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.24, BuildID[sha1]=663a3e0e5a079fddd0de92474688cd6812d3b550, not stripped
やはり実行できるバイナリらしい
$ cat exec_me
ELF>@@@�@8 @@@@@@�88@8@@@�� ``08 ((`(`�TT@T@DDP�td��@�@44Q�tdR�td``��/lib64/ld-linux-x86-64.so.2GNUGNUf:>Z���ޒGF��hӵP
% libc.so.6putchar__libc_start_main__gmon_start__GLIBC_2.2.5ui 4�`` `(`H�H�
H��t�;H���5
�%
@�%
h������%�
h������%�
h�����1�I��^H��H���PTI���@H��@@H��-@�����fD�G`UH-@`H��H��w]øH��t�]�@`����@`UH-@`H��H��H��H��?H�H��u]úH��t�]H�ƿ@`����=Y
uUH���~���]�F
��@H�= t�H��tU� `H����]�{����s���UH��H�Ā�E�M�E�Z�E�K�E�a�E�e�E�.�E�Y�E�I�E�c�E�Y�E�_�E�I�E�U�E�X�E�Y�E�a�E�I�E�/�E�6�E�0�E�I�E�P�E�S�E�V�E�O�E�)�E�g�E��E���E�H��D�����E��E���������E��}�~ܿ
��������f�AWA��AVI��AUI��ATL�%� UH�-� SL)�1�H��H��m���H��t�L��L��D��A��H��H9�u�H�[]A\A]A^A_�ff.���H�H��;0<���||���Li����|��������
zR�(���*zR�$����@FJ
�?;*3$"D����
A�C
Dd����eB�E�E �E(�H0�H8�M@l8A0A(B BB�����@�@
�@���o�@@�@ �@
@
`H�@�@ ���o`@���o���oX@(`@&@6@GCC: (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.jcr.dynamic.got.got.plt.data.bss.comment8@8#T@T 1t@t$D���o�@N
�@�V@@^���oX@k���o`@`z�@��@�H
��@��@@�@@@r��@� ��@���@�4��@�� �(`(���0`@`�0@M- 0<8@T@t@�@�@@X`@ �@
�@
�@
@@�@�@�@�@`` `(`�``0`@`��
-@�@`��0`k@`r�@x�0`� �8`��@�
� @` 6
�@crtstuff.c__JCR_LIST__deregister_tm_clonesregister_tm_clones__do_global_dtors_auxcompleted.6973__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryexec_me.c__FRAME_END____JCR_END____init_array_end_DYNAMIC__init_array_start_GLOBAL_OFFSET_TABLE___libc_csu_finiputchar@@GLIBC_2.2.5_ITM_deregisterTMCloneTabledata_start_edata_fini__libc_start_main@@GLIBC_2.2.5__data_start__gmon_start____dso_handle_IO_stdin_used__libc_csu_init_end_start__bss_startmain_Jv_RegisterClasses__TMC_END___ITM_registerTMCloneTable_init
cat
はやはり意味なかった
思い出したので $ strings
も試しておく
$ strings exec_me
lib64/ld-linux-x86-64.so.2
libc.so.6
putchar
__libc_start_main
__gmon_start__
GLIBC_2.2.5
UH-@
UH-@
[]A\A]A^A_
;*3$"
GCC: (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
GCC: (Ubuntu 4.8.2-19ubuntu1) 4.8.2
.symtab
.strtab
.shstrtab
.interp
.note.ABI-tag
.note.gnu.build-id
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rela.dyn
.rela.plt
.init
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.jcr
.dynamic
.got
.got.plt
.data
.bss
.comment
crtstuff.c
__JCR_LIST__
deregister_tm_clones
register_tm_clones
__do_global_dtors_aux
completed.6973
__do_global_dtors_aux_fini_array_entry
frame_dummy
__frame_dummy_init_array_entry
exec_me.c
__FRAME_END__
__JCR_END__
__init_array_end
_DYNAMIC
__init_array_start
_GLOBAL_OFFSET_TABLE_
__libc_csu_fini
putchar@@GLIBC_2.2.5
_ITM_deregisterTMCloneTable
data_start
_edata
_fini
__libc_start_main@@GLIBC_2.2.5
__data_start
__gmon_start__
__dso_handle
_IO_stdin_used
__libc_csu_init
_end
_start
__bss_start
main
_Jv_RegisterClasses
__TMC_END__
_ITM_registerTMCloneTable
_init
こちらも意味なかった
実行するしかなさそう
$ ./exec_me
zsh: permission denied: ./exec_me
実行権限を付与する
$ sudo chmod +x ./exec_me
$ ./exec_me
zsh: exec format error: ./exec_me
やはりmacでは実行できない
手元にすぐに起こせるlinuxがないのでwriteupをネットで調べる
普通に実行するとcpaw{Do_you_know_ELF_file?}
が得られるらしい
Q8.[Misc] Can you open this file ?
とりあえず$ cat
しておく
$ cat open_me
��ࡱ�>�� 02����/��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������_� �bjbj��2�r=\�r=\����������������������
�
��x��������'))))))$ ��:M������M�����b��������'��'���������Tp@��������x0������$��������MM���������������������������������������������������������������������������������������N
L:
���� h��o(h�� jhS=�h��mHnHh��mHnHu
�������������������������$a$gd��01�h2P��. ��A!��"��#��$��%��S��
��Dd
"5���d�
�
s
�2��A?����V 1"����b�J#,��S���E��&D^n�#,��S���E���PNG
IHDRE��cbsRGB��� pHYs���+�IDATx^�;v�6F��Ev��(+�ӤJ�N*�&]�tj���ҺJci�
� ��� ��z���@�Yu��g�������?� �'�݉��C�Z��g��
<��|�s�X]�+�j�ju_�*�0��W[�j���X�TT����K�q� 2���v���U**���r��}��i^v6{�%/�o�Ieܗ.�^?좘Џ��xX*4��w���'R�n��
���㼣�g[���wB/B�Q��U0}�ywo�]�}{q?��*jڦ��_]�^��t��Sj�u�>�"3����!k��k��V1�1���፨��k��S?���]�V5��
�(�U�b =+���0r������_��{h^r7z]��AK]����ӛ�����l���)���b�0�路f�����|��
=�t�߿�,�?)fe�b�o���-��s�[�hs��-�Ȯ�hd+���~�Ͽ)M{�5q����w[U
�z��Y�l(�D|&����rφ�xm¿�Ec������va!�:�`=Y��W6�ͅ�W�/�vѳ�3�F���9n�<@6Z�K�U��ש{�}��e<���� g>����l�:_TOS�Q7{�o+�W4��?0��6����ux{7f�;��݅�W�L��9��.��f��۱
������y���v\�6�_d��^�k&/
�v�`��X�g�����f�nӌM�h���To�{6��tAsr����3�L$�@D�o�XzD�UV�l�p�V�ب�GܢE4.�R[�ƆA>�ZJφ
L*5���!��.�̖�����s��O�;K?��e��!���PׯQ��Ț��>�z�Dk�֎/�b�ק^�L.� ��r�<������q�����Y' 4z���M���m�VdDdFz�,��g%�φW�?g��VJC;���v���O��2�%&�7�
�8�%����(�{9.þE_�56�lע��-�Y3�3ے
K,����#z��o-�g�Y�no!�U��Y�W]��DВb���W��
�b[�
�5��B����O�VW�
"&�T8�X�54+X�(�����l����G�V͊���Y�fEq�F�����s��:L�i��>t4�mΎ�_�r�rִjj>Է��l��+I>�̗�ш�)^��^1��� ߒT2b��Cu�F�n�����4u6�V�-�ovWTV[��q��,:6�i�г
��z�3�����&�TP�2������a�-��0n�id�?^�8����w�+�l���ޠ�r��9A�//K�ߺ����y�x��D_Su�2dB�5����";����6t�_yn@��l����%��g��n۪����D�d�wr6N��|�E�l�o�h6[.�kfu�3�O�~���_�cG{��H�H�D�4���q��EFo�<�u[�[�T6��H^D[�A@��
�����^��W��F�f�l�:p��w���$F�F��e3�3�Z�-�����3�+ߑ�!��Z�va���at��&jV�">�ͦ��ϑ���Zn1ЖX`�ۚ�'�sXl5��#��n��R5������^�*7�F�sV#C����ߛcg��n+h��r��0K"��+[��xݹ]��u���K���3;]���!�uS���S"��.�.��V�˝�K�$�D`D�Iݤ��ㆦ���1_$
�^ߵ�1��D�뇪�
����*��f�.݈�w5�d~~}���(����g
�+1bW���D(��� �<���2Mj��\~�L�Ȃ ���/.
�� �8�\�1Y��.'!#����[[�l�M7�{��E�Q
[ }D�'}_Ox�W��_�_3�
k��Kw��U��Y��
/����!�l���S �{cΗא�E$x�J�Y!w�G�n��
�� ��_�VӤ��yЭ����
r��뇂�[���[�
�exV�_Q���ž��Y��w��4Nb1����H}
��
����z��%·��~f)�-����+a�d���_�[�Sd��7f�yn����=l�H�~�_C47{�8��<͐�1-�zU��
��E�m
��� ������MsC歼�L7�G���n��Z���ɀ/���9a��Ћ
�g����9x�p��)w��^����T��ȝ�� �&p��T��Ots�oJ�>[�����A;A��2 �����P�g�>�鿑d���@��&��M�azVL�e�&�b;��[������+�\F��
��;|�n�gΰ,���O�G��+l ����}��-�}��^�гlT��$���ܪ�Sh�(�����6��")H's��Iy�D�i5�
�
^@@@�@�?+*����kIEND�B`�
���������666666666vvvvvvvvv666666>666666666666666666666666666�6666666666�666666666666hH66666666666666666666666666666666666666666666666666666666666666666p62����&6FVfv������2(��&6FVfv������&6FVfv������&6FVfv������&6FVfv������&6FVfv������&6FVfv��8XV~�������� 0@�� 0@�� 0@�� 0@�� 0@�� 0@�� 0@�� 0@�� 0@�� 0@�� 0@�� 0@�� 0@�� 0@ OJPJQJ_HmH nHsH tHJ`��J
j�n
$1$a$ CJKH_HaJmH nHsH tH$A ���$
�k=��0�0�0�0Bi���B
0j�nn0h��4�
l4�a�
0�0�0�0j0W0$
P!����[Content_Types].xml���N�0E�H��-J��%�ǎǢ|�ș$�ز�U��L�TB� l,�3�;�r��Ø��J��B+$�]��7O٭V���.�+���Y�T���^e5�5�� �
�ð
�_�g -�;�����Yl�ݎ��|6^�N��`�?���[��P!�֧��6
_rels/.rels���j�0
���}Q��%v/��C/�}�(h"�O�
����=������ ����C?�h�v=��Ʌ��[xp��{۵_�Pѣ<�1H�0���O�R�Bd���JE�4b$��q_����6L��R�7`�������0̞O��,�En7�Li�b��/�S���e��е������P!ky���theme/theme/themeManager.xml
�M
�e�.���|,��H�,l����xɴ��I�sQ}#Ր���� ֵ+�!�,�^�$j=�GW���)�E�+&
8���P!���theme/theme/theme1.xml�Y]�}/�?
���k�K�`��l�lb'%�Z[�(����%
+��%�/x@�і })J�҇���m ����f۔6��^i�cɖ�͒B(Y��Ͻ:���\���w#�������x��$��ܛ�~��:\�x�(�q�]`�^���{�q����j����b��`�sl�c�m �L��q���oD��R�V��]'F��6��vN�?99~vr�{a9A��,��r`D��t�
s�����C�C�-�?�x�|�dFTl�����/��
�5g2��'�<߫�s�
�~���ֻղ���W78�}�1�f��gX
���6��~Q4�
�����_����6��R����Vx����J�|��jȫKN1a��Vk�Ò>$�"AbG,fx�FP�� �:33��J�_�����7 ���f%��1$y8|���h��WW��|���gO��OO�rr||���ԑa���n�����~��ד�^<�Ҏ�:��>���/�@�Z��?���O?��?xh����Ç$�ܹ���������~�z�ݢO9�����'B}u�(��:،����4�c��\���ad���X�pYΥ�y8���ɓ����Сm��F~{�h*��
�.�K�����.���1l�͕���w����{�~~��h�oyTL����m=������,����q��bʜ�sn����z5ߗ��5�{t��D���+�1�eA���
WGv�i܇Ai��Wq~�6
@-�� ���0���&H�8 B4��}ٕN�<s=�Όq8�a�o���h�����rYޒ����X���|n1D���W�^�{�v�n������&3IT-$��A$uCA��P+{#,�
�8p�\�0�;*D�X�)M�2�*�o2�ۂiT�#���tSrݺ<����N�i��Vn& ��x��8�N9z����*�=
Q�����\d�m#I7��'��n��k4����ȋ����D�n�(�,ᢋx�\�N�8q(�Z�\~�+
����`i���A8>r��<�����zYpL8<�)��x��
����r��T�Pj�W�J��߮ھ_-��r�۩܇�"¨��[��(�.��.j|��K�|�vnĢ"SoV���z�R�������c��WP;M��T��t���GX���3u~�[�Z�,ϕ*�ꝇ�J��������9\�^8Du&Ie��]�m
�k�! :�j�~����
ѐ��'theme/theme/_rels/themeManager.xml.rels��M��n����+O�#��W����P!
�.�a��i����c2�1h:�q��m��@RN��;d�`��o7�g�K(M&$R(.1�r'J��ЊT�8��V�"��AȻ�H�u}��|�$�b{��P����8�g/]�QAsم(����#��L�[������PK!����[Content_Types].xmlPK!�֧��6
ѐ��'� theme/theme/_rels/themeManager.xml.relsPK]� 0_rels/.relsPK!ky���theme/theme/themeManager.xmlPK!����theme/theme/theme1.xmlPK!
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<a:clrMap xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" bg1="lt1" tx1="dk1" bg2="lt2" tx2="dk2" accent1="accent1" accent2="accent2" accent3="accent3" accent4="accent4" accent5="accent5" accent6="accent6" hlink="hlink" folHlink="folHlink"/�X�C
��7"��"�7"��"@���������0�( �
�B
S
���� ?�
�w9J�WW���@��@��Unknown�����������G��.�Cx� �Times New Roman5��Symbol3.�
�.�Cx� �Arial7���CenturyG�� �������-�3� fgMS MinchoA�Cambria Math �Hh[c:'wc:'�!3!%),.:;?]}�� 0 2 3 !000 0
0000�0�0�0�0�0�0�0�� � 0
����=�]�a�c�d�e�������$([\{�� 0
0
0000�;�[�b�����������J��HX �� $P������������������������2!xx�
����O����f�O����f��
�����Oh�+'��0t�������
0
HT\dl�
�ۗv����
Normal.dotm
�ۗv����1Microsoft Office Word@�[�@��<��@*&����
��՜.�+,�0�
hp|���
� ����
��
�^�C�g������
�������� !"#$%&����()*+,-.��������1����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Root Entry�������� �FЄu@��3�Data
�����������1Table����WordDocument����SummaryInformation(������������DocumentSummaryInformation8��������'CompObj������������n������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
���� �FMicrosoft Word 97-2003 ����
MSWordDocWord.Document.8�9�q
Microsoft Word
の文字が見えるのでwordファイルらしい
$ strings
も試したが答えは見つからなかった
拡張子をdocにして開くと画像ファイルが見えた
答えは cpaw{Th1s_f1le_c0uld_be_0p3n3d}
Q9.[Web] HTML Page
別ページに飛べと言われた
とりあえずソースを見てみる
cpaw{9216ddf84851f15a46662eb04759d2bebacac666}
が見つかる
Q10.[Forensics] River
画像をmacのデフォルトのviewerで開く
exifのgpsがあるのでそこの川の名前を調べる
答えはcpaw{koutsukigawa}
漢字の読みが分からなくて一瞬焦った
Q11.[Network]pcap
pcap(packet capture)ファイルを貰った
偶然昨日Wiresharkを入れていたので開いてみる
cpaw{gochi_usa_kami}
が見つかった
Q12.[Crypto]HashHashHash!
SHA1らしいので適当に検索
SHA-1 conversion and SHA-1 reverse lookupを使った
答えは cpaw{Shal}
らしい
HashHashHashなので何回か戻すタイプかと思ったら違った
Q14.[PPC]並べ替えろ!
ソートするだけだったので適当に書いた
"15,1,93,52,66,31,87,0,42,77,46,24,99,10,19,36,27,4,58,76,2,81,50,102,33,94,20,14,80,82,49,41,12,143,121,7,111,100,60,55,108,34,150,103,109,130,25,54,57,159,136,110,3,167,119,72,18,151,105,171,160,144,85,201,193,188,190,146,210,211,63,207".split(",").sort((a, b) => b - a).join("")
答えは
cpaw{2112102072011931901881711671601591511501461441431361301211191111101091081051031021009994938785828180777672666360585755545250494642413634333127252420191815141210743210}
まとめ
Q2〜Q5とQ13が無かった
40分くらいで終わってしまったけど意外と楽しかった
正直言うと学びはあまり無かった
Level 2
気が向いたのでやっていく
Q13.[Stego]隠されたフラグ
左上と右下に棒と点がある
この時点でモールスと気付ければよかったのだが気づかなかった
考えても分からなかったので他の人のwriteupを見てモールスと認識
-.-. .--. .- .-- .... .. -.. -.. . -. ..--.- -- . ... ... .- --. . ---... -.--.-
と読み取れるので適当なサイトで変換
CPAWHIDDEN_ MESSAGE:)
が得られた
答えは cpaw{hidden_message:)}
Q15.[Web] Redirect
ChromeのDev ToolsのNetworkタブでPreserve log
を有効にしてみる
Response HeadersのX-Flagにあった
答えは cpaw{4re_y0u_1ook1ng_http_h3ader?}
Q16.[Network+Forensic]HTTP Traffic
とりあえずWiresharkで開く
フラグが欲しかったら下のボタンを押すんだ!!
の文字列を発見
jsファイルを見ればフラグがあると当たりをつけるも上手に見れない
めんどくさいのですべて保存して開くことにした
File > Export Objects > HTTP からできるらしい
エクスポート後開くとパスが違うらしいので適当に直して再度開く
画像の上にフラグが現れた
答えは cpaw{Y0u_r3st0r3d_7his_p4ge}
どうせなのでjsファイルの解析もしてみる
明らかに難読化されているので適当なサイトで復元を試みる
今回は https://beautifier.io/ を使った
すると次のように復元できた
function OnButtonClick() {
var a = 'data:image/jpg;base64,';
a += '省略';
image = document.getElementById("image1");
image.src = a
}
画像を丸ごと書き換えている事がわかった→実際に実行しhtml上に表示するなどの必要がある
Q17.[Recon]Who am I ?
Twitter上で検索したら見つからなかった
porisuteru スペシャルフォース2
でGoogle検索したら一発だった
答えは cpaw{parock}
Q18.[Forensic]leaf in forest
$ strings misc100
e!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!lovelive!
と lovelive!
が繰り返されている
タイトルを回収した
$ strings misc100 | tr -d lovelive!
CCCPPPAAAWWW{{{MMMGGGRRREEEPPP}}}
答えは cpaw{mgrep}
Q19.[Misc]Image!
とりあえず解凍してみる
$ unzip misc100.zip
Archive: misc100.zip
extracting: mimetype
extracting: Thumbnails/thumbnail.png
inflating: meta.xml
inflating: settings.xml
inflating: content.xml
inflating: styles.xml
creating: Configurations2/popupmenu/
creating: Configurations2/statusbar/
creating: Configurations2/menubar/
creating: Configurations2/toolbar/
creating: Configurations2/floater/
inflating: Configurations2/accelerator/current.xml
creating: Configurations2/toolpanel/
creating: Configurations2/progressbar/
creating: Configurations2/images/Bitmaps/
inflating: META-INF/manifest.xml
Thumbnails/thumbnail.png
は黒塗りされた画像で見えない
色々見てると
$ cat mimetype
application/vnd.oasis.opendocument.graphics
とある
調べるとLibraOfficeなどで開けるらしい
が、すぐに開ける状況になかったのでwriteupを検索
答えは cpaw{It_is_fun__isn't_it?}
Q20.[Crypto]Block Cipher
ソースコードをコンパイルして実行すれば良さそう
下記に整形したコードをのせる
#include
#include
#include
int main(int argc, char* argv[]) {
int key = atoi(argv[2]);
const char* flag = argv[1];
printf("cpaw{");
for(int i = key - 1; i <= strlen(flag); i += key){
for(int j = i; j>= i - key + 1; j--) {
printf("%c", flag[j]);
}
}
printf("}");
return 0;
}
読むと実行時に2つの変数(暗号文とkey
)を渡せばいいらしい
key
が何か分からないので適当に入れてみる
$ ./crypto100 ruoYced_ehpigniriks_i_llrg_stae 0
cpaw{}
$ ./crypto100 ruoYced_ehpigniriks_i_llrg_stae 1
cpaw{ruoYced_ehpigniriks_i_llrg_stae}
$ ./crypto100 ruoYced_ehpigniriks_i_llrg_stae 2
cpaw{urYoec_dheipngriki_s_illgrs_ate}
$ ./crypto100 ruoYced_ehpigniriks_i_llrg_stae 3
cpaw{ourecYe_diphingkiri_sll__grats}
$ ./crypto100 ruoYced_ehpigniriks_i_llrg_stae 4
cpaw{Your_deciphering_skill_is_great}
答えを見ると、大文字のYが先頭に来るように推測する手もありそうだなって思った
答えは cpaw{Your_deciphering_skill_is_great}
Q21.[Reversing]reversing easy!
いつもの
$ strings rev100
省略
D$L1
D$Fcpawf
D$J{
D$ y
D$$a
D$(k
D$,i
D$0n
D$4i
D$8k
D$< u
D$@!
T$Le3
省略
雰囲気的に cpaw{yakiniku!}
ぽい
通った
けどもう少しちゃんと勉強しようと思う
objdump
してみる
(mainのみ抜粋)
$ objdump -d rev100
main:
804849d: 55 pushl %ebp
804849e: 89 e5 movl %esp, %ebp
80484a0: 83 e4 f0 andl $-16, %esp
80484a3: 83 ec 50 subl $80, %esp
80484a6: 65 a1 14 00 00 00 movl %gs:20, %eax
80484ac: 89 44 24 4c movl %eax, 76(%esp)
80484b0: 31 c0 xorl %eax, %eax
80484b2: c7 44 24 46 63 70 61 77 movl $2002874467, 70(%esp)
80484ba: 66 c7 44 24 4a 7b 00 movw $123, 74(%esp)
80484c1: c7 44 24 20 79 00 00 00 movl $121, 32(%esp)
80484c9: c7 44 24 24 61 00 00 00 movl $97, 36(%esp)
80484d1: c7 44 24 28 6b 00 00 00 movl $107, 40(%esp)
80484d9: c7 44 24 2c 69 00 00 00 movl $105, 44(%esp)
80484e1: c7 44 24 30 6e 00 00 00 movl $110, 48(%esp)
80484e9: c7 44 24 34 69 00 00 00 movl $105, 52(%esp)
80484f1: c7 44 24 38 6b 00 00 00 movl $107, 56(%esp)
80484f9: c7 44 24 3c 75 00 00 00 movl $117, 60(%esp)
8048501: c7 44 24 40 21 00 00 00 movl $33, 64(%esp)
8048509: 66 c7 44 24 15 7d 0a movw $2685, 21(%esp)
8048510: c6 44 24 17 00 movb $0, 23(%esp)
8048515: c7 44 24 1c 05 00 00 00 movl $5, 28(%esp)
804851d: 8d 44 24 46 leal 70(%esp), %eax
8048521: 89 44 24 04 movl %eax, 4(%esp)
8048525: c7 04 24 20 86 04 08 movl $134514208, (%esp)
804852c: e8 1f fe ff ff calll -481 <.plt+0x10>
8048531: 83 7c 24 1c 05 cmpl $5, 28(%esp)
8048536: 74 26 je 38 <main+0xc1>
8048538: c7 44 24 18 00 00 00 00 movl $0, 24(%esp)
8048540: eb 15 jmp 21 <main+0xba>
8048542: 8b 44 24 18 movl 24(%esp), %eax
8048546: 8b 44 84 20 movl 32(%esp,%eax,4), %eax
804854a: 89 04 24 movl %eax, (%esp)
804854d: e8 3e fe ff ff calll -450 <.plt+0x50>
8048552: 83 44 24 18 01 addl $1, 24(%esp)
8048557: 83 7c 24 18 08 cmpl $8, 24(%esp)
804855c: 7e e4 jle -28 <main+0xa5>
804855e: 8d 44 24 15 leal 21(%esp), %eax
8048562: 89 44 24 04 movl %eax, 4(%esp)
8048566: c7 04 24 20 86 04 08 movl $134514208, (%esp)
804856d: e8 de fd ff ff calll -546 <.plt+0x10>
8048572: b8 00 00 00 00 movl $0, %eax
8048577: 8b 54 24 4c movl 76(%esp), %edx
804857b: 65 33 15 14 00 00 00 xorl %gs:20, %edx
8048582: 74 05 je 5 <main+0xec>
8048584: e8 d7 fd ff ff calll -553 <.plt+0x20>
8048589: c9 leave
804858a: c3 retl
804858b: 66 90 nop
804858d: 66 90 nop
804858f: 90 nop
昔はobjdumpも少しは読めたけど今はさっぱり分からん
調べてみる
gdbの存在を思い出したのでやってみる
$ gdb rev100
$ layout asm
フラグっぽいところを抽出
0x80484ba movw $0x7b,0x4a(%esp)
0x80484c1 movl $0x79,0x20(%esp)
0x80484c9 movl $0x61,0x24(%esp)
0x80484d1 movl $0x6b,0x28(%esp)
0x80484d9 movl $0x69,0x2c(%esp)
0x80484e1 movl $0x6e,0x30(%esp)
0x80484e9 movl $0x69,0x34(%esp)
0x80484f1 movl $0x6b,0x38(%esp)
0x80484f9 movl $0x75,0x3c(%esp)
0x8048501 movl $0x21,0x40(%esp)
0x8048509 movw $0xa7d,0x15(%esp)
左側を調べるとasciiらしいので適当に変換
0x7b | 0x79 | 0x61 | 0x6b | 0x69 | 0x6e | 0x69 | 0x6b | 0x75 | 0x21 |
---|---|---|---|---|---|---|---|---|---|
{ | y | a | k | i | n | i | k | u | ! |
最後の0xa7d
が0x7d
ならば}
なのだがよく分からん
一応これで答えと同じになった
Q22.[Web]Baby's SQLi - Stage 1-
別ページでsqlを実行してみる
とりあえず select * from palloc_home;
を実行するとflagを入手
答えは cpaw{palloc_escape_from_stage1;(}
Q28.[Network] Can you login?
pcapを見るとftpらしい
さらに見るとユーザー名とパスワードがわかるので実際に接続してみる
$ ftp
ftp> open
(to) 118.27.110.77
Connected to 118.27.110.77.
220 Welcome to Cpaw CTF FTP service.
Name (118.27.110.77:kazu): cpaw_user
331 Please specify the password.
Password:5f4dcc3b5aa765d61d8327deb882cf99
230 Login successful.
ftp> ls -la
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
drwxr-xr-x 2 ftp ftp 42 Mar 17 17:00 .
drwxr-xr-x 2 ftp ftp 42 Mar 17 17:00 ..
-rw-r--r-- 1 ftp ftp 39 Sep 01 2017 .hidden_flag_file
-rw-r--r-- 1 ftp ftp 36 Sep 01 2017 dummy
226 Directory send OK.
ftp> get .hidden_flag_file
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for .hidden_flag_file (39 bytes).
WARNING! 1 bare linefeeds received in ASCII mode
File may not have transferred correctly.
226 Transfer complete.
39 bytes received in 0.00745 seconds (5.11 kbytes/s)
$ cat .hidden_flag_file
cpaw{f4p_sh0u1d_b3_us3d_in_3ncryp4i0n}
答えは cpaw{f4p_sh0u1d_b3_us3d_in_3ncryp4i0n}
まとめ(Level 2)
Level 2だけで1時間40分くらい
Level 2はLevel 1に比べて少し難しかった
割と広範囲に知識が必要かつ、ソフトの使い方なんかも分からないと大変そう
Level 3
やる
Q23.[Reversing]またやらかした!
-
strings
-
objdump -d
-
dgb && layout asm
んー、分からん
writeupチラ見する
Ghidraという米国国家安全保障局が開発したソフトウェアリバースエンジニアリングフレームワークがあるらしい
Mac で Ghidra を動かす | Hi120kiのメモを参考に使ってみる
新規プロジェクト→Code Browser→D&D→functionからmainを選択する
上記でいい感じにデコンパイルできた
undefined4 main(void)
{
int iVar1;
uint *puVar2;
int local_84;
uint local_7c [14];
uint local_44 [14];
local_7c[0] = 0x7a;
local_7c[1] = 0x69;
local_7c[2] = 0x78;
local_7c[3] = 0x6e;
local_7c[4] = 0x62;
local_7c[5] = 0x6f;
local_7c[6] = 0x7c;
local_7c[7] = 0x6b;
local_7c[8] = 0x77;
local_7c[9] = 0x78;
local_7c[10] = 0x74;
local_7c[11] = 0x38;
local_7c[12] = 0x38;
local_7c[13] = 100;
puVar2 = local_44;
for (iVar1 = 0xe; iVar1 != 0; iVar1 = iVar1 + -1) {
*puVar2 = 0;
puVar2 = puVar2 + 1;
}
for (local_84 = 0; local_84 < 0xe; local_84 = local_84 + 1) {
local_44[local_84] = local_7c[local_84] ^ 0x19;
}
return 0;
}
このままだと動かないのでいい感じに修正しつつ、出力できるようにする
#include
int main(void){
int iVar1;
unsigned int *puVar2;
int local_84;
unsigned int local_7c [14];
unsigned int local_44 [14];
local_7c[0] = 0x7a;
local_7c[1] = 0x69;
local_7c[2] = 0x78;
local_7c[3] = 0x6e;
local_7c[4] = 0x62;
local_7c[5] = 0x6f;
local_7c[6] = 0x7c;
local_7c[7] = 0x6b;
local_7c[8] = 0x77;
local_7c[9] = 0x78;
local_7c[10] = 0x74;
local_7c[11] = 0x38;
local_7c[12] = 0x38;
local_7c[13] = 100;
puVar2 = local_44;
for (iVar1 = 0xe; iVar1 != 0; iVar1 = iVar1 + -1) {
*puVar2 = 0;
puVar2 = puVar2 + 1;
}
for (local_84 = 0; local_84 < 0xe; local_84 = local_84 + 1) {
local_44[local_84] = local_7c[local_84] ^ 0x19;
}
for(int i = 0; i < 14; i++) printf("%c", local_44[i]);
return 0;
}
答えは cpaw{vernam!!}
Q24.[Web]Baby's SQLi - Stage 2-
Stage 2 の時に一緒に解いてしまった
よくあるSQL Injection
' OR 1=1--
を入れるだけ
答えは cpaw{p@ll0c_1n_j@1l3:)}
他の人のwriteupを見ると ユーザー名のところに
porisuteru'--
と入力してパスワード比較をスルーさせるのが正解っぽい?
Q26.[PPC]Remainder theorem
適当にjsでコードを書く
let i = 0;
while (true) {
console.log(i);
const a = 1584891 * i + 32134;
if (a % 3438478 === 193127) {
console.log(a);
break
};
i++;
}
実行すると
1
2
3
...
22354
22355
35430270439
答えは cpaw{35430270439}
Q29.[Crypto] Common World
よくあるRSAっぽい
, , 暗号文が与えられているので
を に素因数分解する必要がある
pythonのsympyを使ってみるとこんな感じ
import sympy
e = 11
n = 236934049743116267137999082243372631809789567482083918717832642810097363305512293474568071369055296264199854438630820352634325357252399203160052660683745421710174826323192475870497319105418435646820494864987787286941817224659073497212768480618387152477878449603008187097148599534206055318807657902493850180695091646575878916531742076951110529004783428260456713315007812112632429296257313525506207087475539303737022587194108436132757979273391594299137176227924904126161234005321583720836733205639052615538054399452669637400105028428545751844036229657412844469034970807562336527158965779903175305550570647732255961850364080642984562893392375273054434538280546913977098212083374336482279710348958536764229803743404325258229707314844255917497531735251105389366176228741806064378293682890877558325834873371615135474627913981994123692172918524625407966731238257519603614744577
c = 80265690974140286785447882525076768851800986505783169077080797677035805215248640465159446426193422263912423067392651719120282968933314718780685629466284745121303594495759721471318134122366715904
[p, q] = sympy.factorint(n)
lcm = sympy.lcm(p - 1, q - 1)
d = sympy.Mod(sympy.Pow(e, -1), lcm)
m = sympy.Mod(sympy.Pow(c, d), n)
print(m) # 424311244315114354
最初はいい感じのツールを探していたがRSA暗号 - Wikipediaを見た感じ書いた方が早そうだったので書いた
答えは cpaw{424311244315114354}
他の人のwriteupを見るとhintとn
が等しいのでCommon Modulus Attackという方法で求めるのが正解っぽい
まとめ(Level 3)
Level 3だけで50分くらい
Q23で使ったGhidraが便利だった
あとは王道って感じ
総まとめ
全部で3時間ちょい(ソフトのダウンロードやインストールも含めて)
割と前に勉強した知識が残ってたのであまり苦ではなかった
ちょいちょい正解ルートから離れながらも解答できたのでよかった
ツールを探したりする時間が割とあったので、CTFようにまとめサイトやツール群を作っておくと便利&早解きできそう
今後
今回のCpawCTFで自分がCTFが好きなことを再確認できたので、他のメンバーが見つかる&時間があればチームを組みつつ大会とかにも出たい