kaz.dev

CpawCTF Writeup

tag: ctf


はじめに

この間から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`�ۚ�'�sXl񌀞5��#��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 !

最後の0xa7d0x7dならば}なのだがよく分からん

一応これで答えと同じになった





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]またやらかした!

んー、分からん

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っぽい

ee, NN, 暗号文が与えられているので

NNp,qp, q に素因数分解する必要がある

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が好きなことを再確認できたので、他のメンバーが見つかる&時間があればチームを組みつつ大会とかにも出たい