목록War Game/Pwnable.xyz (50)
tmxklab
1. 문제 nc svc.pwnable.xyz 30020 1) mitigation 확인 2) 문제 확인 뭔가 2대 2로 pvp를 하는 게임인 것 같다. 서로 스킬을 사용하여 HP를 깎고 살아남으면 게임에서 이기게 된다. 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { setup(); show_banner(); main_handler(); return 0; } main_handler()를 호출한다. 3-2) main_handler() void __cdecl main_handler() { int wait_time_0; // [rsp+Ch] [rbp-4h] int wait_time_0a; // [rs..
1. 문제 nc svc.pwnable.xyz 30047 1) mitigation 확인 2) 문제 확인 총 3개의 메뉴가 있으며 노트를 작성하고 읽고 수정하는 프로그램 3) 코드흐름 파악 3-1) main() int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { __int64 *v3; // rbx int i; // ebp __int64 *v5; // r12 int select; // eax __int64 v7; // [rsp+0h] [rbp-48h] unsigned __int64 v8; // [rsp+28h] [rbp-20h] v8 = __readfsqword(0x28u); setup(); puts("====== Welc..
1. 문제 nc svc.pwnable.xyz 30048 AdultVM시리즈의 마지막 문제이다. 여기서는 flag3.txt파일 내용을 읽는 것을 목표로 한다. 2. 접근방법 AdultVM, 2에서는 flag.txt, flag2.txt파일을 유저 영역 또는 커널 영역에 로드하는 것을 확인할 수 있지만 flag3.txt파일에 대한 로직은 전혀 찾아 볼 수 없다. [ start.py ] - handle_kernel_interrupt() def handle_kernel_interrupt(uc, intno, data): if intno == 0x70: rax = uc.reg_read(UC_X86_REG_RAX) if rax == 0: rdi = uc.reg_read(UC_X86_REG_RDI) rsi = uc.re..
1. 문제 nc svc.pwnable.xyz 30048 AdultVM과 동일하다. 여기서는 flag2.txt파일을 읽어야 할 것 같다. 이전에 살펴봤듯이 flag2.txt는 start_kernel()로직에서 file open하는 것을 확인하였으므로 커널 영역에서 확인해야 할 듯 하다. unicorn-engine관련 함수 참고) [Pwnable.xyz] BabyVM 1. 문제 nc svc.pwnable.xyz 30044 1) mitigation 확인 2) 문제 확인 default program을 실행 시킬 것인지 물어봄 'y'를 입력한 경우 : 이름을 입력하고 프로그램 종료 'n'를 입력한 경우 : program을 보내기.. rninche01.tistory.com 1) start.py 코드 분석 1-1) ..
1. 문제 nc svc.pwnable.xyz 30048 총 6개의 파일이 주어지는데 start.py를 실행시키면 userland, kernel, flag*.txt를 open하여 사용한다. start.py코드를 살펴보면 이전에 baby vm에서 사용했던 유니콘 엔진 코드를 볼 수 있다. 참고 : [Pwnable.xyz] BabyVM 1. 문제 nc svc.pwnable.xyz 30044 1) mitigation 확인 2) 문제 확인 default program을 실행 시킬 것인지 물어봄 'y'를 입력한 경우 : 이름을 입력하고 프로그램 종료 'n'를 입력한 경우 : program을 보내기.. rninche01.tistory.com start.py코드에서 대충 보면 kernel, userland스레드를 2개..
1. 문제 nc svc.pwnable.xyz 30046 1) mitigation 확인 2) 문제 확인 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { int running; // [rsp+8h] [rbp-8h] running = 1; setup(); show_banner(); init_first_note(); LABEL_8: while ( running ) { show_menu(); printf("> "); switch ( (unsigned __int64)(unsigned int)get_int() ) { case 1uLL: create_notes(); break; case 2uLL: selec..
1. 문제 nc svc.pwnable.xyz 30045 1) mitigation 확인 2) 문제 확인 총 6개의 메뉴가 보이며 낚시하러 가는데 alert가 뜨면서 내 이름을 출력하고 입력 값을 받고 종료된다. 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax setup(argc, argv, envp); banner(); while ( 1 ) { show_menu(); switch ( (unsigned int)read_int() ) { case 1u: add_group_member(); break; case 2u: modify_group_member(); brea..
1. 문제 nc svc.pwnable.xyz 30043 1) mitigation 확인 모든 보호기법이 다 걸려있고 추가로 stripped파일이다. 2) 문제 확인 5개의 메뉴가 보인다. 선택한 좌표에 임의의 값을 넣을 수 있다.(메뉴 1) 3) 코드흐름 파악 3-1) main() -> init_func() __int64 init_func() { _DWORD *v0; // rax char *v1; // rax __int64 result; // rax field = malloc(0xA0uLL); reset(); v0 = malloc(0x28uLL); play_info = (__int64)v0; v0[5] = 0; *(_DWORD *)(play_info + 0x18) = 0; *(_QWORD *)(play_i..
1. 문제 nc svc.pwnable.xyz 30042 1) mitigation 확인 2) 문제 확인 name, race, class를 설정한 뒤 PvP 또는 Question을 진행한다. 3) 코드흐름 파악 3-1) main() int __cdecl main(int argc, const char **argv, const char **envp) { int v3; // eax setup(argc, argv, envp); init_game(); while ( 1 ) { while ( 1 ) { while ( 1 ) { if ( !hero ) create_char(); print_char(); print_menu(); v3 = read_int(); if ( v3 != 1 ) break; pvp(); } if (..
1. 문제 nc svc.pwnable.xyz 30041 1) mitigation 확인 2) 문제 확인 3) 코드흐름 파악 3-1) main() int make_note() { _QWORD *v0; // rax signed int index; // [rsp+4h] [rbp-1Ch] __int64 size; // [rsp+8h] [rbp-18h] _QWORD *v4; // [rsp+10h] [rbp-10h] void *buf; // [rsp+18h] [rbp-8h] for ( index = 0; ; ++index ) { if ( (unsigned int)index > 9 ) { LODWORD(v0) = puts("Notebook full"); return (int)v0; } if ( !notes[index]..