Wargame
-
[HackCTF : Reversing] Reversing Me (100p)Wargame/HackCTF 2021. 7. 8. 10:25
[HackCTF : Reversing] Reversing Me (100p) 문제를 보면 c코드가 주어져있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include #include int main() { int i; char *serial = "H`cjCUFzhdy^stcbers^D1_x0t_jn1w^r2vdrre^3o9hndes1o9>}"; char enter[54]; printf("키를 입력하시게 : "); scanf("%s", enter); if (strlen(enter) == strlen(serial)) { for (i = 0; i
-
[HackCTF : Pwnable] BOF_PIE (150p)Wargame/HackCTF 2021. 7. 5. 17:07
[HackCTF : Pwnable] BOF_PIE (150p) 먼저 보호 기법을 보면 PIE와 NX가 걸려있다. 실행해보면 주소를 하나 출력해주고 입력을 받은 후 종료된다. welcome함수를 보자 welcome의 주소를 출력하고 scanf를 통해 입력을 받는데 여기서 bof를 일으킬 수 있을 것 같다. 하지만 NX bit가 걸려있어 쉘을 실행할 수 없는데 함수들을 살펴보니 이렇게 flag를 읽어 출력해주는 함수가 있다. 이제 welcome, j0n9hyun 함수의 offset을 구해보자 welcome : 0x890 j0n9hyun : 0x909 이제 프로그램을 실행했을 때 출력되는 welcome 주소에 0x79만큼빼서 j0n9hyun의 주소를 구하고 ret에 j0n9hyun 함수의 주소로 덮으면 된다...
-
[LOB] troll > vampireWargame/Lord of Buffer Overflow 2021. 7. 5. 11:47
[LOB] troll > vampire 소스코드를 보면 20번째 코드가 바뀌었는데 0xbfff????으로 시작하는 곳을 사용할 수 없다. 그럼 어떻게 하냐 dummy를 0x10000 만큼 채워서 0xbffe????에 쉘 코드를 넣고 실행하면 된다. gdb로 확인 해봤을 때 주소가 0xbffe로 내려온것을 볼 수 있다. 이 공간에 쉘 코드를 넣고 ret를 대충 0x90이 있는 곳으로 바꿔주면 쉘이 실행된다. vampire / music world
-
[HackCTF : Pwnable] RTL_World (200p)Wargame/HackCTF 2021. 6. 8. 00:23
[HackCTF : Pwnable] RTL_World (200p) NX bit가 걸려있는데 문제 이름처럼 RTL기법을 이용해 우회하면 될 것 같다. 바로 실행해보면 이렇게 여러 개의 선택지가 있는데 2번에서 돈을 벌고 3,4에서 system 주소와 shell 주소를 구하여 5번에서 rtl을 이용하여 공격하면 된다. 해당 문제를 gdb로 보기에는 너무 길기 때문에 ida를 이용했다. 여기서 v6에 system, s1에 /bin/sh의 주소가 들어가는 것을 알 수 있다. 그리고 3번과 4번에서 각각 v6, s1을 출력해준다. 여기서 gold가 1999, 2999씩 있어야 하는데 2번에서 돈을 벌어야 한다. 그래서 Get_Money 함수를 보니 4번을 눌렀을 때 Hidden number를 찾았다고 출력하고 v..
-
[HackCTF : Pwnable] Offset (150p)Wargame/HackCTF 2021. 6. 4. 10:25
[HackCTF : Pwnable] Offset (150p) 보호 기법이 엄청 많이 걸려있다. 일단 쉘 코드는 사용하지 못할 것 같다. 실행해보면 어떤 함수를 실행하고 싶냐고 묻고 입력을 받는다. 바로 gdb로 확인해보자. main 함수를 살펴보면 [ebp-0x27]부터 입력을 받고 그것을 인자로 select_func라는 함수를 호출한다. select_func 함수에서는 받아온 인자를 strncpy함수를 이용해 0x1f만큼 select_func 함수의 [ebp-0x2a]에 복사한다. strncpy(ebp-0x2a, ebp+0x8, 0x1f) 그리고 여기서 [ebp-0xc]를 call 한다. 이 부분을 변조해야 할 것 같은데 쉘 코드를 사용할 수 없기 때문에 함수를 살펴보았다. 누가 봐도 flag를 출력한..
-
[HackCTF : Pwnable] Simple_Overflow_ver_2 (150p)Wargame/HackCTF 2021. 6. 3. 17:23
[HackCTF : Pwnable] Simple_Overflow_ver_2 (150p) NX가 꺼져있어 쉘 코드를 사용할 수 있을 것 같다. 실행해보면 처음에 입력을 받고 입력받은 주소를 출력해주는 것 같다. 그리고 다시 실행할지를 묻는데 y를 누르면 반복되고 n을 누르면 종료한다. 한번 더 실행해보니 주소 값이 바뀌었다. 여기까지의 정보로 생각을 해보면 입력에 쉘 코드를 넣고 ret를 출력되는 주소로 변조시키면 쉘이 실행될 것 같다. 그럼 이제 dgb로 스택의 공간이 얼마나 생겼는지 확인해보자 scanf를 통해 [ebp-0x88]부터 입력을 받는다. shell code + dummy로 0x88 + 4byte(sfp)를 덮고 ret를 출력되는 주소로 덮어보자. payload는 아래와 같다. 1 2 3 4..
-
[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..