pwnable(8)
-
[ Dreamhack ] STACK_AEG
이 문제는 nc로 접속을 하면 base64 인코딩이 된 바이너리를 출력해준다. 이를 디코딩하고 분석해서 쉘을 20단계모두 따서 sub flag 인증에 성공하면 플래그를 준다. 한 단계마다 중어진 시간은 10초이고 바이너리에서 bof가 발생하지만 buf의 위치가 계속해서 바뀌기 때문에 buf의 위치를 자동으로 분석해서 진행해야 한다. 바이너리 분석 read에서 bof터지고 카나리는 read바로 아래 printf에서 릭하고 shell함수로 ret바꾸면 되는데 문제는 저걸 자동으로 분석해야한다. 익스 시나리오 base64 인코딩된 바이너리를 받아오고 os.system을 활용해서 base64디코딩한뒤 그 값을 파일에 저장한다. 그 파일을 대상으로 objdump를 사용해서 main함수를 디스어셈블하고 read를 ..
2023.05.04 -
[ Dreamhack ] Cat Jump
#define CAT_JUMP_GOAL 37 #define CATNIP_PROBABILITY 0.1 #define CATNIP_INVINCIBLE_TIMES 3 #define OBSTACLE_PROBABILITY 0.5 #define OBSTACLE_LEFT 0 #define OBSTACLE_RIGHT 1 void StartGame() { char cat_name[32]; char catnip; char cmd[64]; char input; char obstacle; double p; unsigned char jump_cnt; srand(time(NULL)); catnip = 0; jump_cnt = 0; puts("let the cat reach the roof! 🐈"); sleep(1); do { /..
2023.04.26 -
[ Dreamhack ] STB-lsExecutor
이 문제에서 핵심은 전역변수 sel에 원하는 값을 2바이트 입력할 수 있다는 부분이다. 취약점 처음 read_data(v4, 60); 에서 v4에 60바이트 입력 가능하고 snprintf로 s에 v4의 값을 집어넣어 주기 때문에 ls -a까지 합쳐 총 0x40바이트가 들어간다. 그리고 두번째로 read_data 함수를 호출하며 70바이트를 입력받기 때문에 30바이트 bof가 발생한다. 익스플로잇 일단 최대 9번까지 입력 가능하기 때문에 이전 8번은 아무런 값이나 입력해주고 마지막에만 ret과 sfp를 조작해주고 sel에 "sh"를 넣어주면 된다. gdb에서 보면 system함수의 인자를 rbp-0x70주소에서 가져온다. 이를 이용해서 main함수의 sfp를 sel + 70주소로 변조해주면 system함수..
2023.04.25 -
[ Dream hack ] Dream's Notepad
https://dreamhack.io/wargame/challenges/405/?writeup_id=9011 Dream's Notepad 드림이가 메모장 프로그램을 만들었어요! 취약점을 찾아 드림이가 숨겨둔 메모인 플래그를 읽어보세요! dreamhack.io 문제를 풀며 배운점 - rtc기법을 사용해서 문제를 풀어본 적이 거의 없어서 처음에 r12에 값을 plt주소로 주는 실수를 했다. - read함수에서 마지막 3번째 인자는 size_t 형이기 때문에 범위가 0 ~ 4,294,967,295이다. 따라서 만약 -1을 넘겨주면 read함수에서 입력받는 사이즈가 0xffffffff가 되어 bof가 발생한다.
2022.12.15 -
[ Dreamhack ] dirty stack
main int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { unsigned __int64 v3; // rbx unsigned __int64 v4; // [rsp+8h] [rbp-E8h] BYREF __int64 v5; // [rsp+10h] [rbp-E0h] BYREF unsigned __int64 v6; // [rsp+18h] [rbp-D8h] __int64 i; // [rsp+20h] [rbp-D0h] const char *v8; // [rsp+28h] [rbp-C8h] __int64 s[21]; // [rsp+30h] [rbp-C0h] BYREF unsigned __int64 v10; // [rsp+D8h] [..
2022.12.13 -
[ Dreamhack ] Zeroshot
https://dreamhack.io/wargame/challenges/426/?writeup_id=8822 ZeroShot 이 문제는 서버에서 작동하고 있는 서비스(ZeroShotV2)의 바이너리와 소스 코드가 주어집니다. 취약점을 익스플로잇해 셸을 획득한 후, “flag” 파일을 읽으세요. “flag” 파일의 내용을 워게임 사 dreamhack.io 문제를 풀며 배운점 - 여러번 aaw가 가능하지만 %d를 사용해서만 입력이 간능한 경우 최대 0xffffffff까지만 입력이 가능하기 때문에 원하는 주소가 4바이트보다 크다면 하위 4바이트 상위 4바이트 나눠서 입력을 주면 된다. - 함수 내부에서 movaps가 실행될 때 rsp가 0x10상태로 정렬되어야 한다. rsp를 정렬시키려면 해당 함수에서 got..
2022.11.27