본문 바로가기

[Wargame Write-up]/Lord of Buffer Overflow

[LoB RedHat 6.2] LEVEL 1: gate -> gremlin

LEVEL 1: simple BOF


RedHat 6.2버전에는 ASLR, NX, ASCII Armor 등의 메모리 보호 기법이 적용되어 있지 않다.


코드 내 방어 기재들만 우회하여 공격하면 된다.



아래 소스 코드를 보면 argc 제한 말고는 걸려 있는 장치가 없다.


strcpy에서 buffer 길이 검사를 하지 않는다는 취약점을 이용하여, Stack Buffer Overflow 공격으로 쉘을 얻는다.


공격에 들어가기 전, bash2 명령어를 입력해 쉘을 바꿔줘야 한다. 그냥 bash를 이용하면 0xff를 0x00으로 바꿔버리기 때문이다.




테스트해보니 256개에선 에러가 안나지만, 260개에선 에러가 나고 있다.




Permission 문제로 원본 실행 파일로는 디버깅이 불가능하니, cp 명령어로 복사한 뒤 복사본으로 분석해보자.


main 함수를 보면 다음과 같이 되어있다. strcpy 함수 호출 직후인 0x804846b에 breakpoint를 찍고 


A 256개를 인자로 하여 실행해보자.




argv[1]에 A 256개를 넣었을 때의 모습이다. 중간 쯤인 0xbffff950부터 NOP sled를 타다가 쉘코드를 실행하도록 작성해보자.




NOP(\x90) 200개 + 쉘코드 (25bytes)+NOP(\x90) 35개 + New RET addr (4 bytes)로 구성한 payload이다.


쉽게 쉘을 얻을 수 있다.