wargame(7)
-
[ Dreamhack ] __environ
이 문제도 바로 이전에 올린 블로그 내용과 같이 environ ptr을 사용해서 푸는 문제이다. #include #include #include #include #include void sig_handle() { exit(0); } void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); signal(SIGALRM, sig_handle); alarm(5); } void read_file() { char file_buf[4096]; int fd = open("./flag", O_RDONLY); read(fd, file_buf, sizeof(file_buf) - 1); close(fd); } int main() { char buf[1024]; lon..
2023.06.09 -
[ 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 -
[ Dream hack ] MSNW
1. Nyang 함수에서 Nyang 함수의 sfp를 구한다. 2. Meong함수에서 read를 이용해서 s에 Win함수의 주소를 잔뜩 써준다. 3. 2바이트 오버플로우가 발생하기 때문에 1번에서 릭 한 sfp와 배열 s의 옵셋을 통해 sfp overwrite를 한다. 자 위의 과정을 다 거치면 Meong의 sfp는 배열 s의 주소가 될 것이다. 그리고 Meong함수의 에필로그 과정이 종료되고 다시 Call함수로 return했을 때 Call함수의 rbp는 배열 s의 주소이고 배열 s에는 Win함수의 주소들이 잔뜩 들어있기 때문에 sfp와 ret이 win함수의 주소가 되면서 Call함수가 끝나고 Win함수의 주소로 ret하게 된다. - Exploit from pwn import * pwd = "/home/a..
2023.01.24 -
[ 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