Wargame/HackCTF
-
[HackCTF : Pwnable] Random Key (200p)Wargame/HackCTF 2021. 7. 12. 10:51
[HackCTF : Pwnable] Random Key (200p) 문제 파일을 실행하면 이렇게 key를 입력받는다. 바로 ida로 확인해보자. 입력받은 값이 rand() 함수로 생성된 key값과 같아야 한다. srand에 현재 시간을 불러와서 rand 함수를 실행하기 때문에 같은 시간에 rand 함수로 key값을 만들어주면 된다. 이렇게 똑같은 코드를 짜주고 컴파일해준다. 이제 실행과 동시에 nc로 접속하면 된다. HackCTF{5087686686858549173307745189}
-
[HackCTF : Pwnable] Poet (200p)Wargame/HackCTF 2021. 7. 9. 14:38
[HackCTF : Pwnable] Poet (200p) 먼저 실행해보면 Enter : 이렇게 내용을 입력받고 저자를 입력받는데 1,000,000 점이 필요한 것 같다. dword_6024E0이 1000000이면 while문을 탈출하고 reward함수를 실행한다. flag를 읽어준다. 그리고 나머지 함수들을 살펴보자. poem이라는 변수에 입력을 받고 dword_6024E0에 0을 넣기 때문에 이 함수는 이용하지 못할 것 같다. &unk_6024A0에 입력을 받는다. dword_6024E0와 같은 bss영역이기 때문에 여기서 오버플로우를 일으켜 dword_6024E0를 1000000으로 만들면 될 것 같다. 0x6024E0 - 0x6024A0 = 0x40 만큼 dummy로 채우고 1000000을 넣어..
-
[HackCTF : Pwnable] RTL_Core (250p)Wargame/HackCTF 2021. 7. 8. 17:51
[HackCTF : Pwnable] RTL_Core (250p) 실행해보니 코어 파일에 액세스 하기 위해서 패스코드가 필요한 것 같다. 입력받은 것을 check_passcode함수로 넘기고 그 return값이 hashcode와 같아야지 core함수가 실행된다. hashcode = 0xC0D9B0A7 for문 돌 때마다 입력받은 값의 주소에 4byte씩 더해가며 들어있는 값을 더한다. 즉 0xC0D9B0A7를 5로 나눈값을 20바이트에 갈쳐서 넣어주면 된다. 0xC0D9B0A7를 5로 나누면 0x2691F021인데 나누어 떨어지지않고 2가 부족하기 때문에 0x2691F021 * 4 + 0x2691F023 이렇게 해줘야 한다. 자세히 보기 위해 gdb를 이용했다. check_passcode가 끝날 때에 br..
-
[HackCTF : Reversing] Handray (100p)Wargame/HackCTF 2021. 7. 8. 10:45
[HackCTF : Reversing] Handray (100p) 문제에서 주어진 파일을 받아봅시다. 64bit ELF 이렇게 권한 주고 실행해보면 flag를 뛰어넘었다고 한다. gdb로 까보면 main+15에서 cmp DWORD PTR [rbp-0x4], 0x0 이렇게 비교를 하는데 이게 같지 않으면 main+103으로 가서 "flag를 뛰어넘었습니다!"를 출력한다. 그럼 DWORD PTR [rbp-0x4]를 0으로 바꿔서 실행해보자. 비교하기 전에 break를 걸고 실행한다. 값을 0으로 바꿔준다. flag is HackCTF{HotToHanDleC0ldT0H000ld!}
-
[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 함수의 주소로 덮으면 된다...
-
[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..