RTL
-
[Pwnable] jmp, call 차이 (RTL chaning할 때 RET)Notepad/Pwnable 2021. 11. 3. 00:27
jmp : 해당 주소로 이동 call : RET(다음 실행 줄)를 스택에 저장하고 jmp 32bit 기준 call을 이용한 함수 호출 ebp+0 -> sfp ebp+4 -> ret ebp+8 -> 첫 번째 인자 RTL Chaning할 때는 call이 아닌 jmp로 호출하기 때문에 RET가 스택에 쌓이지 않지만 호출한 함수가 에필로그 과정을 거치기 때문에 ebp+4에 연계할 함수주소를 적어주면 됨
-
[LOB] zombie_assassin > succubusWargame/Lord of Buffer Overflow 2021. 7. 15. 17:53
[LOB] zombie_assassin > succubus 이번 문제는 소스 코드가 엄청 길다. 문제에 핵심은 11줄에 있는 MO 함수 속 system을 이용하는 것 같다. MO 함수를 실행시키기 위해서는 코드 속 함수들을 차례대로 실행해야 하는데 RTL Chaning을 이용하면 된다. 우선 함수들의 주소를 구하고 system("/bin/sh")을 위해 "/bin/sh"도 구해준다. 도개걸윷모 ㅋㅋ; 이제 주소는 찾았고 payload만 짜면 된다. 다시 보니까 라이브러리에 존재하는 "/bin/sh"을 못쓴다. (코드 잘 보자 ㅎㅎ) 이렇게 "/bin/sh"을 넣을 주소를 찾았다. (0xbffffa78) succubus / here to stay
-
[LOB] bugbear > giantWargame/Lord of Buffer Overflow 2021. 7. 15. 11:27
[LOB] bugbear > giant RTL2 execve함수로 ret를 덮어야 한다. execve함수의 ret에 system 함수를 넣고 쉘을 실행시키면 된다. 이렇게 execve와 system함수의 주소를 구하고 c코드로 "/bin/sh"을 구하면 된다. execve : 0x400a9d48 system : 0x40058ae0 "/bin/sh" : 0x400fbff9 giant / one step closer
-
[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 : 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..