Wargame/HackCTF
-
-
[Pwnable] j0n9hyun's secretWargame/HackCTF 2020. 1. 31. 20:03
들어가며 문제를 풀면서 바이너리가 참조하는 fd를 확인하는 명령어인 lsof를 처음으로 알았다. 문제 자체는 쉬웠지만, 명령어 하나 얻어감으로써 뿌듯한 문제였다. 문제해석 binary를 실행시키면, 이름을 입력하라는 메세지가 뜬다. 이름을 입력을 하면 그대로 종료되는데, 이때 같은 directory에 flag파일과 top_secret파일이 생성된다. 두 파일을 수정하여 바이너리를 다시 실행시켜보니, top_secret파일을 binary가 읽는것 같았다. '어떤 것'을 조작하여 top_secret파일 대신에 flag파일을 읽어오는 것이 문제풀이에 핵심이라고 생각했다. gdb로 더 자세히 한번 봐보자. 이 파일은 stripped이므로, 다음과 같은 방법을 사용하여 main함수로 접근해보자. 출력함수에서 인자..
-
[Pwnable] Unexploitable #1, #2Wargame/HackCTF 2020. 1. 27. 14:51
들어가며 이 문제는 rbp 레지스터를 이용한 stack pivoting에 대해서 잘 배울 수 있는 문제였다. lea 명령어에 대한 개념도 이번 기회에 확실하게 잡을 수 있어서 좋았다! 다른 풀이도 되게 참신해서 여러 방면으로 좋은 문제인거 같다. 두 문제다 동일한 방법으로 풀 수 있기에 같이 포스팅을 하였다. 문제해석 root@goorm:/workspace/ubuntu_1604/hackctf/pwnable(master)# ./Unexploitable_1 Easy RTL ha? You even have system@plt! root@goorm:/workspace/ubuntu_1604/hackctf/pwnable(master)# gdb -q Unexploitable_1 Reading symbols from ..
-
[Pwnable] World Best Encryption ToolWargame/HackCTF 2020. 1. 16. 23:34
들어가며 canary를 leak하여 rop로 푸는 문제이다. canary leak을 해보았지만, strncpy를 자세히 보지 못해서 어렵게 푼 문제가 아닐까 싶다. 문제해석 root@goorm:/workspace/ubuntu_1604/hackctf/pwnable(master)# ./World_best_encryption_ tool Your text) AAAA Encrypted text) ]]]]c��3�c�~�3�ctM2B* Wanna encrypt other text? (Yes/No) Yes Your text) AAAAAAAAAAAAAAAAAAAAAAAAAAAAA Encrypted text) ]]]]]]]]]]]]]]]]]]]]]]]]]]]]] Wanna encrypt other text? (Yes..
-
[Misc] 탈옥Wargame/HackCTF 2020. 1. 16. 23:05
들어가며 pyjail 문제였는데, 이 문제로 파이썬 함수들이 어떤 식으로 구성되어 있는지 알 수 있었다. 문제해석 root@goorm:/workspace/ubuntu_1604/hackctf/pwnable(master)# nc ctf.j0n9hyun.xyz 9002 #! /usr/bin/python3 def main(): print(open(__file__).read()) print("Welcome to Jail World!") text = input('>>> ') for keyword in ['eval', 'exec', 'import', 'open', 'os', 'read', 'system', 'write']: if keyword in text: print("Filtered Keyword.") retur..
-
[Pwnable] RegisterWargame/HackCTF 2020. 1. 16. 22:30
들어가며 이 문제는 alarm, signal, raise함수에 대하여 알고 있는지 확인하는 문제였다. 물론, 나는 처음 풀어보는 문제여서 상당히 삽질을 많이 했다. 문제해석 root@goorm:/workspace/ubuntu_1604/hackctf/pwnable(master)# ./register RAX: 1 RDI: 2 RSI: 3 RDX: 4 RCX: 5 R8: 6 R9: 7 RAX: 바이너리는 레지스터들에 넣을 값을 입력을 받고 있는 듯하다. gdb를 통해 어떤 바이너리인지 자세히 봐보자. gdb-peda$ pd main Dump of assembler code for function main: ... 0x0000000000400adb : mov edi,0x5 0x0000000000400ae0 : ..
-
[Pwnable] RTCWargame/HackCTF 2020. 1. 12. 22:47
들어가며 __libc_csu_init 함수를 이용한 return-to-csu 기법을 활용하여 푸는 문제이다. 이 기법을 많이 다뤄서 익숙해졌는데, 어디 써먹을 문제 없나 찾다가 덕분에 잘 써먹었다. 문제해석 root@goorm:/workspace/ubuntu_1604/hackctf/pwnable/rtc(master)# rp64 -f rtc -r 4 | grep pop 0x0040055c: add byte [rax], al ; add byte [rax], al ; pop rbp ; ret ; (1 found) 0x0040055e: add byte [rax], al ; pop rbp ; ret ; (1 found) 0x00400558: nop dword [rax+rax+0x00000000] ; pop rbp..
-
[Pwnable] SysROPWargame/HackCTF 2020. 1. 12. 20:20
들어가며 HackCTF 문제를 풀면서 제일 많이 삽질한 문제인거 같다. ppppr 가젯이 있다는 것을 확인을 못하고 계속 return-to-csu로 풀려니까 payload길이에서 막혔다. 이 문제 덕분에 문제 풀때에는 rp64로 가젯이 있는지 확인해보고 없을 경우에 다른 방법을 쓰는 쪽으로 갈피를 잡았다. 문제해석 root@goorm:/workspace/ubuntu_1604/hackctf/pwnable/sysrop(master)# file sysrop sysrop: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 2.6.32, BuildID[sha1]=194f..