writeup(6)
-
[ 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 -
[ 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 -
[Dreamhack] house_of_spirit
https://dreamhack.io/wargame/challenges/54/?writeup_id=8611 house_of_spirit Desciption 이 문제는 작동하고 있는 서비스(houseofspirit)의 바이너리와 소스코드가 주어집니다. House of Spirit 공격 기법을 이용한 익스플로잇을 작성하여 셸을 획득한 후, "flag" 파일을 읽으세요. "flag" dreamhack.io house of spirit 이란 임의의 주소를 해제하고 할당할 때 재 할당을 통해 임의 주소를 할당받아 원하는 주소에 값을 쓸 수 있게 하는 공격방식이다. 이 문제를 풀면서 주의할 점은 fake 청크를 해제할 때 tcache의 범위를 벗어나면 안된다 왜냐하면 tcache의 경우 속도를 위해 많은 시큐리티 ..
2022.11.01 -
[ 화이트햇 콘테스트 ] left_right
game함수에서 취약점이 발생했다. 5번째 줄을 보면 v3이 함수 포인터로 선언이 된 것을 확인할 수 있다. v3을 초기화하지 않으니 만약 v3이 할당되는 메모리 영역에 특정 값이 있다면 해당 값이 call될 것이다. 이제 v3이 할당되는 공간에 특정 값을 넣을 수 있는 곳을 찾아야 한다. left_right 바이너리를 까보면 read_input함수가 여러 곳에서 사용되는데 첫번째로 호출되는 read_input함수에서 buf가 할당되는 주소를 gdb로 확인해보니 v3가 할당되는 공간보다 8바이트 낮은 위치에 할당됐다. 처음 read_input함수가 호출될 때 더미값 8개를 집어넣어주고 바이너리에 있는 wanna_flag함수의 주소를 넣어주면 game함수의 20번째 줄에서 wanna_flag 함수가 호출될..
2022.10.17