[HackCTF] RTL_Core
2021. 3. 31. 22:11
Wargame/HackCTF
1. 문제 NX 비트가 걸려있음을 알 수 있다. 처음에 gets 함수를 통해 입력을 받는데, 입력받은 것을 check_passcode() 인자로 넘겨서 반환되는 값이 hashcode와 같을 경우 core() 함수를 실행한다. gets로 받은 인자(a1)를 반복문을 돌리는데, for 문을 통해 a1에 4씩 더하면서 4바이트 포인터로 형변환을 해준다. 그래서 a1부터 a1+16까지의 값을 누적시킨 v2를 반환해준다. (즉, for 문을 5번 반복하면서 전달받은 주소값을 기준으로 4bytes 씩 증가시켜 순차적으로 접근하여 해당 값들을 v2 변수에 더하여 반환한다.) 이때, v2는 hashcode의 값( 0xC0D9B0A7 ) 과 같아야 한다. 값을 같게 할 방법은 두 가지 정도 있다. 1) hashcode ..
[HITCON training] lab4 ret2libc
2021. 3. 21. 20:45
Wargame/etc
1. 문제 NX 만 걸려있어 RTL 문제임을 알 수 있다. 주소를 10진수 형태로 입력하면 그 주소의 내용을 출력해준다. 만약 이중 포인터 값을 넣어주면 또 다시 주소를 출력할 것이다. 여기서 뭔가 leak이 될 것 같은 강한 예감이 든다..! 그리고 메시지를 입력하라고 하고 입력한 메시지를 출력해주는 형태이다. 처음에 주소를 10진수 형태로 입력받고, 16진수로 변환해준 다음 이중포인터인 v8에 저장한다. 그리고 v8을 인자로 하는 See_something 함수가 실행된다. See_something 함수이다. 입력받은 주소의 내용을 %p 형태로 출력한다. Print_message 함수이다. 여기서 bof 취약점이 발생한다. dest 버퍼의 크기는 56 byte 지만, 256 byte 짜리 src를 de..
[Pwnable] Lazenca - RTL(x64) 정리
2021. 3. 21. 01:49
Hacking/Pwnable
RTL(Return to Libc) RTL이란 Return address 영역에 공유 라이브러리 함수의 주소로 변경해, 해당 함수를 호출하는 방식이다. 해당 기법을 이용해 NX bit(DEP)를 우회할 수 있다. 이번엔 x64에서 RTL을 실습해볼 것이다. x86과 x64 차이는 쉽게 말해 x86은 32비트, x64는 64비트인것으로 구분을 하면 된다. 그렇다면 이번에도 먼저 함수 호출 규약에 대해 공부해보자! Calling Convention System V AMD64 ABI Solaris, Linux, FreeBSD, macOS 에서 "System V AMD64 ABI" 호출 규약을 사용하기 때문이다. Unix, Unix 계열 운영체제의 표준이라고 할 수 있다. Calling convention fe..
[Pwnable] Lazenca - RTL(x86) 정리
2021. 3. 20. 21:48
Hacking/Pwnable
RTL(Return to Library) RTL이란 Return address 영역에 공유 라이브러리 함수의 주소로 변경해, 해당 함수를 호출하는 방식이다. 해당 기법을 이용해 NX bit(DEP)를 우회 할 수 있다. RTL 이해하기 위해 잠깐 Calling Convention을 공부하고 가자! Calling Convention Cdecl(C declaration) 해당 호출 규약(Calling Convention)은 인텔 x86 기반 시스템의 C/C ++ 에서 사용되는 경우가 많다. 기본적으로 Linux kernel에서는 Cdecl 호출 규약(Calling Convention)을 사용한다. Calling convention features 인자 전달 방법 Stack을 이용 인자 전달 순서 오른쪽에서 ..
[HackCTF] RTL_World
2021. 3. 20. 20:19
Wargame/HackCTF
1. 문제 파일을 실행시키니 뭐가 굉장히 많이 나왔다. 일단 1번을 클릭하자, 문제에 적용된 보호기법들이 나왔다. NX bit가 적용된 것으로 보아 스택에 쉘을 넣어 실행하지는 못할 것으로 보인다. 그리고 2,3,4 번은 돈(Gold)과 관련된 것들이었다. 이번엔 ida로 파일을 열어보았다. 메뉴 선택 > switch문 별로 나눠지는 것 같다. 그 중에서도 case 5(Attack)에 해당하는 것이 눈에 띄었다. buf에 0x400u 즉, 1024 byte 만큼 입력을 받고 있는데, buf의 크기는 고작 128 byte이다. 따라서 bof를 일으켜 RET 값을 변경할 수 있을 것이다. 그런데, NX 보호 기법이 적용되어있기에 그것을 우회하기 위해 실행 가능한 영역에 있는 코드 즉, 외부 라이브러리 함수를..
[Pwnable] RTL 실습
2021. 3. 7. 18:29
Hacking/Pwnable
Return To Libc(RTL)은 리턴 주소를 라이브러리 내에 존재하는 함수의 주소로 바꿔 NX bit를 우회하는 공격 기법이다. 리눅스 익스플로잇의 최종 목표는 셸 바이너리를 실행하는 것이다. libc.so.6 라이브러리에는 execve , execlp , execl , execvp , system , popen 등 프로그램을 실행할 수 있는 다양한 함수들이 존재한다. 이 중 system 함수를 이용해 "/bin/sh" 문자열의 주소를 system 함수의 인자로 넘겨준 후 호출하면 /bin/sh 바이너리가 실행된다. example1 예제에 NX bit가 추가된 example1_nx를 이용해 RTL을 실습해 보도록 하겠다. 취약점은 이전과 동일하지만 example1_nx에는 NX bit가 적용되어 스..