해킹/시스템해킹

[시스템해킹 도전기 10편] RTL(3)

놀고싶다~ 2021. 2. 13. 10:00

안녕하세요!

 

오늘은 RTL 공격 마지막 시간입니다.

 

이전시간에 RTL 공격을 성공하였지만 한가지 문제점이 있었습니다.

 

그 문제점은 ASLR 보호 기법으로 인해 환경변수 주소로 인자를 구성할 수 없게되는 문제입니다.

 

따라서 이 방법을 우회할 수 있는 방법과 공격을 해볼 수 있도록 하겠습니다.

 

먼저 우회 방법은 DATA 영역에 있는 기계어 값에 실행에 필요한 내용을 넣고 그 주소를 이용하는 방법을 이용해서 DEP+ASLR 보호 기법을 우회해보려고 합니다.

 

 

data 영역에는 실행 권한이 있습니다.

환경 변수의 주소가 랜덤으로 변경이 된다고 하면 이용을 할 수 없기 때문에

 

/tmp/sh를 주소가 변하지 않는 data 영역의 항상 있을만한 값인 \x01 의 기계어를 파일명으로 사용하게 됩니다.

 

aslr 적용 문제점 > 인자 구성 > 주소의 랜덤화 > 필요한 고정주소 필요 > code or data 영역 활용.

 

심볼릭 링크로 /tmp/sh의 문자열을 링크로 걸고 이 주소를 execl 인자로 이용하는 방법입니다.

 

?로 표현이 되는 것은 리눅스 쉘에서 기계어 01을 표현하지 못하기 때문에 나타나는 표현 방법입니다.

 

이제 우리는 NULL 값이 오게 되는 값을 찾을 것입니다 NULL 값을 찾는 이유는 파일명으로 사용할 기계어 뒤가 \x00인 값을 찾아야 하기 때문입니다.

 

gdb를 통해서 NULL 값이 있는 주소를 찾아야 합니다.

 

어떠한 값이든 상관 없지만 그 다음으로 올 수 있는 값이 NULL 값이 되어야 합니다(ex : 0x0003 , 0x0002 등등) 따라서 저는 0x0001 0x8048014 값을 가져 오도록 하겠습니다.

 

이제 이 값을 가지고 코드를 완성하여 보겠습니다.

 

위 코드를 넣고 마지막에 실행 시켰더니 쉘이 잘 획득되어서 나타난 것을 볼 수 있었습니다.

 

이것으로 RTL 공격법을 마무리 하도록 하겠습니다.

 

수고많으셨습니다!