System Hacking (pwnable) 84

[HackCTF] Unexploitable_2 ( write-up )

유사 트릭(?) 문제이다! 일단 main 함수이다.12345678910int __cdecl main(int argc, const char **argv, const char **envp){ char s; // [rsp+0h] [rbp-10h] setvbuf(_bss_start, 0LL, 2, 0LL); setvbuf(stdin, 0LL, 2, 0LL); fwrite("Hard RTL ha? You don't even have fflush@dynstr!\n", 1uLL, 0x30uLL, _bss_start); fgets(&s, 64, stdin); return 0;}Colored by Color Scriptercs누가봐도 오버플로우로 rop하면 되는 문제이다.하지만 마땅한 출력함수가 없다. fwrite를 사..

[FTZ] level20 ( write - up )

대망의 마지막 문제의 코드는 FSB 취약점이 있다. bleh는 80의 크기고, 입력을 최대 79만큼 받을 수 있어 오버플로우가 나지는 않는다.하지만, printf함수 부분을 보면 FSB 버그가 발생하는것을 알 수 있다. 오버플로우가 불가능하니 ret을 건들기가 상당히 힘들다.그래서 우리는 .dtors라는것을 사용할것이다.ret은 함수가 끝나면 실행되는것이고, 프로그램이 끝나면 .dtors(소멸자)를 실행하는데, 그 주소를 확인해보자.0x08049594라고 한다. FSB에서 .dtors를 사용할때는 4바이트를 더한다. .dtors+4는 보통 0으로 셋팅되어있다. 하지만 이 값이 0이 아니면, 프로그램이 종료하고 그부분을 실행해버린다. 그래서 dtors + 4를 하는것이다.일단 쉘을 따긴 땄는데, 이걸 어떻..

[FTZ] level19 ( write - up )

코드가 몹시 간단하다. 그냥 오버플로우가 나는것을 볼 수 있다.setuid가 걸려있긴 하지만, 프로그램 내부에서 setuid를 설정해주지 않아서 아무리 쉘을 이쁘게 따도 level20권한의 쉘이 안따졌었다. 그래서 그냥 setuid 쉘코드를 구해서 사용했다.버퍼에 쉘코드를 삽입하고 NOP sled 기법을 사용해도 상관없지만 나는 환경변수를 사용하였다. 이렇게 환경변수를 등록해주고.. 요렇게 Exploit한다! 끝!

[FTZ] level16 ( write - up )

이번에는 함수포인터를 변조시키는 문제인것 같다. 취약점은 fgets에서 터진다. 함수포인터를 할당해주는 모습이다.ebp-16에 있는 함수포인터에 0x8048500 라는 주소를 넣는데, printit 함수의 것일것이라고 추측할 수 있다. 그리고, buf는 ebp-56에 할당되어있다. 따라서 함수포인터와 buf사이의 거리는 40이다.하지만 입력을 48만큼 받으니 오버플로우로 쉘을 따보자. shell함수의 주소는 노랑색으로 칠한 부분과 같다. 뾰오오오오옹!

[FTZ] level13 ( write - up )

이것 또한 strcpy의 취약점으로 발생하는 버퍼오버플로우다.하지만 스택 가드가 존재한다. 변수 i의 값을 건들면 안된다.즉, 변수 i와 변수 buf의 거리를 계산해서, 변수 i에 리틀엔디안으로 0x1234567을 넣어주면 될듯 하다! 일단 함수 프롤로그 후 변수를 0x418 (1048) 만큼 할당한다.그리고 buf의 크기는 1024이다. 그리고 main+69 부분에서 ebp-12의 값과 0x1234567을 비교하므로 ebp-12가 변수 i임을 알 수 있다.그리고 직접 브레이크 포인트를 걸고 동적 디버깅을 해서 변수의 거리를 알아낸다.-> dummy data를 구하기 위해서! ret은 1048 + 4라는 것을 생각해보았을때, buf 1024 + dummy 12 + i 4 + dummy 12 + EGGSH..