전체 글
-
[HackCTF : Pwnable] x64 Simple_size_BOF (150p)Wargame/HackCTF 2021. 6. 1. 16:14
[HackCTF : Pwnable] x64 Simple_size_BOF (150p) 해당 문제는 NX가 꺼져있어 쉘 코드를 넣어 공격하는 것이 가능하다. 문제를 실행해봅시다. 엌 삐빅- 자살방지 문제입니다. buf: 0x7fff8f4b5570 를 출력하고 입력을 받는데 buf의 위치가 실행할 때마다 달라진다. gdb로 확인해보자. 이 부분에서 buf가 [rbp-0x6d30] 라고 알 수 있다. 이번에도 gets 함수에서 BOF가 발생하는데 [rbp-0x6d30]에서부터 입력을 받기 때문에 쉘 코드를 해당 영역에 넣고 ret까지를 dummy로 채운 뒤 ret를 [rbp-0x6d30]의 주소로 변조하면 된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 from pwn import * p = rem..
-
[HackCTF : Pwnable] x64 Buffer Overflow (150p)Wargame/HackCTF 2021. 6. 1. 15:28
[HackCTF : Pwnable] x64 Buffer Overflow (150p) 파일을 실행해보면 입력을 받고 Hello [입력] 이런 식으로 출력해준다. 바로 gdb로 살펴보자. NX가 걸려있기 때문에 바로 함수들을 살펴보았는데, callMeMaybe라는 수상한 함수가 보였다. 역시 /bin/bash를 실행한다. 이제 main 함수를 살펴보자. scanf로 [rbp-0x110]부터 입력을 받아오는데 문자열 길이 검사를 하지 않아 Buffer Overflow가 일어난다. 0x110 + sfp[8byte] 만큼 dummy로 채우고 ret를 아까 확인한 callMeMaybe의 주소로 변조시키면 쉘이 실행될 것 같다. from pwn import * p=remote("ctf.j0n9hyun.xyz",300..
-
[HackCTF : Pwnable] 내 버퍼가 흘러넘친다!!! (150p)Wargame/HackCTF 2021. 6. 1. 10:28
[HackCTF : Pwnable] 내 버퍼가 흘러넘친다!!! (150p) 우선 문제 파일에 NX bit가 걸려있지 않기 때문에 쉘 코드를 삽입해 실행할 수 있을 것 같다. 파일을 실행해보면 Name : , input : 총 2번의 입력을 받는다. gdb로 살펴보자. read와 gets로 각각 한 번씩 입력을 받는데 gets로 입력 받을때 Buffer Overflow를 일으킬 수 있을 것 같다. 먼저 read 쪽을 살펴보면 name이라는 전역변수에 0x32byte만큼 입력을 받는 것을 알 수 있다. 그리고 gets 로 [ebp-0x14]부터 입력을 받는데 여기서 0x14 + sfp[4] 만큼 dummy로 채우고 ret 부분에 쉘 코드가 들어갈 name 즉 0x804a060로 변조시키면 쉘이 실행될 것 같..
-
[HackCTF : Pwnable] Basic_BOF #2 (100p)Wargame/HackCTF 2021. 5. 31. 17:15
[HackCTF : Pwnable] Basic_BOF #1 (100p) 주어진 문제 파일을 실행해보니 입력을 받은 후 이상한 문자열을 출력한다. gdb를 이용해 분석해보자. eax에 [ebp-0x8c]의 주소를 넣고 eax에 입력을 받는다. 즉 [ebp-0x8c]에 입력을 받는다. eax에 [ebp-0xc]의 주소를 넣고 eax를 call 한다. fget가 [ebp-0x8c]에서부터 입력받고, [ebp-0xc]를 call 하기 때문에 0x80(0x8c-0xc) 만큼 dummy로 채워주고 쉘 코드 주소를 넣어주면 쉘이 실행될 것 같다. 실제로 그러한지 확인해보자. b *main+53 r AAAAAAAA 입력 받은 곳의 주소는 0xffffcf3c이고 [ebp-0xc]는 0xffffcfbc로 0x80만큼의 공..
-
[HackCTF : Pwnable] Basic_BOF #1 (100p)Wargame/HackCTF 2021. 5. 28. 14:43
[HackCTF : Pwnable] Basic_BOF #1 (100p) 먼저 주어진 파일을 실행해보자 입력 값을 [buf]에 출력해주고 [check]에는 0x4030201이 출력된다. 여러 번 실행해봐도 [check]는 동일하다. gdb-peda$ pd main Dump of assembler code for function main: 0x080484cb :lea ecx,[esp+0x4] 0x080484cf :and esp,0xfffffff0 0x080484d2 :push DWORD PTR [ecx-0x4] 0x080484d5 :push ebp 0x080484d6 :mov ebp,esp 0x080484d8 :push ecx 0x080484d9 :sub esp,0x34 0x080484dc :mov DWOR..
-
[LOB] orge > trollWargame/Lord of Buffer Overflow 2021. 5. 28. 11:44
[LOB] orge > troll 바로 메인 함수부터 보면 이전 문제들과 같이 환경변수, 버퍼를 초기화하고 argv[1]길이 검사, argv[1]의 48번째가 \xbf 가 되어야 한다. 그리고 이 부분이 추가되었는데 메인 함수 인자의 개수를 확인하여 인자가 2개가 아니면 종료시킨다. 그래서 argv[2]에 쉘 코드를 넣어 실행시키는 것이 불가능하다. 그럼 쉘 코드를 어디에 넣어주냐! 바로 argv[0] 즉 파일 명을 쉘 코드로 주면 된다. 하지만 원본 파일은 권한 문제로 파일명 변경이 불가능하기 때문에 파일명을 쉘 코드로 cp 해서 심볼릭 링크를 걸어 실행해주면 된다. 파일명을 쉘 코드로 하여 cp 하고 core dumped를 일으켜 argv[0]의 주소를 구해보았다. 여기서 주의해야 할 점은 쉘 코드에..
-
[LOB] darkelf > orgeWargame/Lord of Buffer Overflow 2021. 5. 27. 23:01
[LOB] darkelf > orge 바로 소스코드를 보면 이곳이 바뀌었다고 나와있다. argv[0]의 길이가 77이어야 한다. argv[0]에는 첫 번째 인자 즉 파일을 실행할 때 들어가는 ./orge 이 부분이다. 이 부분의 길이가 77이 되어야하는건데 .///////orge 이런 식으로 길이를 늘려주면 된다. 즉 /를 72개 넣고 실행해주면 된다. 나머지는 이전 문제와 같은 방식으로 풀이하면 된다. core dumped 일으키고 바꿔서 해봅시당. orge / timewalker
-
[LOB] wolfman > darkelfWargame/Lord of Buffer Overflow 2021. 5. 25. 10:06
[LOB] wolfman > darkelf 소스 코드를 먼저 보면 지난 문제와 동일한데 아래 부분이 추가되었다. 메인 함수 첫 번째 인자의 길이 검사가 48보다 크면 프로그램을 종료한다. 그래서 쉘 코드를 ret 뒷부분에 넣을 수 없다. 여기서 생각할 수 있는 것은 2번째 인자에 쉘 코드를 넣는 것이다. 2번째 인자에 쉘 코드를 넣고 ret에 2번째 인자의 주소를 넣으면 된다. 이번에도 core파일로 2번째 인자의 주소를 알아내 보자. 42가 들어간 부분이 2번째 인자의 주소가 된다. payload는 아래와 같다. dummy [44btye] | ret [4byte] | 공백 | shell code [25byte] core 파일을 확인해보자 ret 주소를 0xbffffc34로 해봅시다. darklef / ..