hacking(13)
-
[ 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 -
Dreamhack CTF Season 3 Round #2
awesome-basics (pwn)코드를 보면 read함수에서 bof가 터진다.bof가 터지니까 rop을 먼저 생각했었는데 가젯이 없었다.그래서 코드를 다시 보니 ./tmp/flag를 열고 v5에 파일 디스크립터를 받아온뒤그 값을 flag와 buf에 write해주는것이였다. 이것을 이용할 방법을 찾다가buf는 rbp-0x60 위치에 있고v5는 rbp-0x10에 있는 것을 확인하였고buf에서 bof가 터지니까 bof로 v5를 1(stdin)으로 조작해주면write(1, flag, 0x45);가 되어 플래그가 화면상으로 출력되게 된다. exploitfrom pwn import *r = remote("host3.dreamhack.games", 13508)#r = process("./chall")payload..
2023.04.22 -
[ 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 -
[ layer7 ctf ] Christmasgift
getGift wow, fantastic, holy를 모두 1로 만들어 주고 rop을 하면 끝나는 쉬운 문제였지만 rop payload에서 payload에 += 으로 내용을 계속 더해주는게 아닌 계속 = 으로 초기화를 해주고 있었다 그래서 익스코드에 문제가 생겼던 것이였다 문제를 푸는중에 밖에 나가야할 일이 생겨 계속 ctf는 참여하지 못해서 좀 아쉽다. 익스 코드 from pwn import * from ctypes import CDLL import time import math context.log_level = "debug" r = process("/home/asdf/ctf/layer7/christmasgift") e = ELF("/home/asdf/ctf/layer7/christmasgift") ..
2022.12.20 -
[ 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