소프트웨어 버그 헌팅 - 4.1(메모리 보호 기법과 BOF실습2)
(보호기법이 적용된 환경에서 모듈을 활용해 우회하여 BOF 유발)

저번 포스팅에서는 win xp(보호기법 1도 없어)환경에서 BOF를 실습했다.

이번 포스팅에서는 win 7(보호기법 1도 있어)환경에서 BOF를 실습해보려고 한다.

자세한 내용은 저번 포스팅으로 설명을 했기때문에 이번 포스팅은 조금 친절하지 않게 작성할 예정이다.
(숙소가서 쉬고 싶어서 빨리 쓰고 갈랭)

환경은 저번 포스팅의 환경 구축을 똑같이 win7에 만들면 된다.


보호기법이 적용된 환경에서 모듈을 활용하여 BOF 발생 시키기!

당연히 저번 포스팅에 썼던 파일로 BOF때려도 계산기는 뜨지 않는다.

먼저 디버거에서 1회성으로 BOF를 통해 계산기를 실행할 것이다.

이후 일반적으로 BOF를 발생하는 코드를 만들어 볼 것이다.

먼저 그냥 A를 넣었을 때 4141414141이 쭉 들어가긴한다.

동일하게 패턴을 넣어서 find.py을 만들고 .mp4파일을 생성하고 디버깅해서

EIP 위치를 찾아가자

EIP가 4C29644C가 나왔다.

!mona po 4C29644C 30000 -extended로 찾아주자

그러니 26070이 나왔다. 적용해서 다시 find.py 코드를 수정하자

수정해서 넣어보니 EIP에 43434343들어간것을 확인 할 수 있고(?)
424242가 들어가야하는데 trash값이 잘못 들어갔다.

(확인안하고 쭉쭉하다보니 EIP값까지 구해놔버렸다)

A의 숫자를 조절해서 EIP가 42424242 뜨는 것을 확인했다.

이 후 EIP 값을 넣고 nop도 넣고 뒤에 쉘코드 영역도 잘 들어간다.

그럼이제 EIP 위치를 찾아서 jmp esp 시켜주고 거기서 쉘코드를 또 실행할 수 있도록 한다.

다만 여기서 EIP 위치를 찾을때는 xp와는 조금 다르다.

먼저 디버거에서 컨버터를 F9를 통해 실행 시켜서 주소값을 고정 시키고 EIP를 찾는다.
(메모리 보호때문에 메모리 주소가 바뀐다)
!mona findwild -s "jmp esp" -n
-> 0x77cdca23

nop을 좀 넣어주고 파일을 넣으면 계산기가 뜬다.
(그냥 해도 뜨네..?)

아마 주소 값이 안바뀌어서 그런거 같다...

 

 


위에는 단발성으로 계산기를 실행시키는 방법이다.
(일단은?)

이번에는 메모리 보호를 사용하지 않는 모듈을 사용해서 우회 BOF를 해볼 것이다.

메모리 보호가 적용되지 않은 모듈을 쓰면 ESP 주소가 바뀌지 않기때문에 그대로 쓸 수 있다.

모듈을 확인하기 위해서 아래의 명령어를 사용할 것이다.
!mona modules

해당 모듈을 사용하기 위해서 컨버터를 올리고 F9로 실행시켜준다.
(모듈을 모두 로드한 상황에서 긁어오기 위해)

 

그러니 보호기법이 적용이 1도 안되져 있는 모듈이 있다.
[MSRMfilter03.dll]

그럼 이 모듈에서 jmp esp를 가지고 오면 될 것 같다. 그러기 위해 쓸 수 있는 명령어는 다음과 같다.
-mona findwild -s 찾고자하는 어셈명령어 -n -m 모듈이름
-mona findwild -s "jmp esp" -n -m MSRMfilter03.dll

 

근데 해당 모듈에서는 jmp esp를 쓰지 않아서 쓸 수가 없다...

그러면 이와 유사한 행위를 하는 어셈블 명령어가 필요하다.
push esp
ret
명령어가 jmp esp와 똑같은 행위를 한다. 위의 명령어로 다시 찾는다.
!mona findwild -s "push esp # ret" -n -m MSRMfilter03.dll

 

그러니 주소가 1개가 나왔다. 이 값을 EIP에 넣으면 된다.
(0x1001b058)

 

계산기가 잘 나온다.

보호기법을 사용하지 않은 모듈에서 사용하는 어셈블리 명령어를 통해 BOF을 실습했다.

이것을 통해 나중에 새로운 BOF를 찾는 마중물이 될 수 있으면 좋겠다.
(제발)

+ Recent posts