y0u_bat
[Window] 2. 윈도우 버퍼오버플로우(여러가지 쉘코드로 점프) 본문
[Window] 2. 윈도우 버퍼오버플로우(여러가지 쉘코드로 점프)
1장에서는 jmp esp을 이용한 기본적인 BOF를 했었다.
2장에서는 쉘코드로 점프하는 여러 방법에 대해 설명 되어 있다.
방법은 여러가지 있다.
1. jmp or call // 1번문서와 같이 JMP ESP를 이용하는것이다 또는 Call esp를 이용하는 것이다.
2. pop/return // pop과 ret을 이용하여 쉘코드로 이동하는것이다.
3. push/return // push와 ret을 이용하여 쉘코드로 이동하는것이다.
4. jmp [reg+offset] // jmp esp 할때 그버퍼가 esp 시작점에 위치하지 않을때 오프셋을 이용하여 쉘코드로 이동하는 것이다.
5. blind return //
6. 사용가능 버퍼가 제한되어 있을때때 // 여유있는 버퍼로 점프하여 수행 할 수 있다.
7. SEH // 모든어플리케이션에는 예외 처리가 있는데, 만약 예외 처리가 없다 하더라두 공격자는 SEH 핸들러를 자신이 원하는 주 소로 덮어쓰고, 쉘코드로 점프를 수행하도록 할 수 있다.
먼저 1번 jmp esp 가 아닌 call jmp을 이용해서 해보겠습니다(jmp esp은 1번에서 했음)
1. jmp or call
우선 프로그램에서 로딩되는 dll에서 findjmp.exe로 call esp를 구해줍니다.
저는 kernelBase.dll 에서 구했습니다
이제 페이로드는 (buffer+ebp) + eip + shellcode
이렇게 해주면 되고 eip를 call esp로 해주므로 call esp되어 shellcode가 실행되서 계산기가 뜹니다.
크래쉬도 안뜨고 바로 계산기가 뜨는걸 볼 수 있습니다.
2. pop/ret 을 이용한 쉘코드로 점프
pop/ret 그리고 jmp esp를 이용하면 된다.
pop 을 하면 스택에서 4바이트를 꺼내기 때문에 +4가 된다.
ret 어셈은 pop eip; jmp eip 다.
buffer + eip + (esp시작을 쉘코드로 두기위해 쓰레기내용 4바이트) + nop8바이트 + jmp esp + shellcode
eip에 pop pop ret을 넣으면 총 pop 3번으로 12바이트가 + 되고 그다음에 있는 jmp esp가 eip가 되고
ret에 jmp eip가 되어 jmp esp로 점프 하여 shellcode로 이동 되게 된다.
페이로드 : buffer + eip(pop pop ret) + 쓰레기4바이트 + nop 8바이트 + jmp esp + shellcode
여기서 jmp esp는 저번처럼 dll에서 구해주면 된다.
그리고 pop이랑 ret은 dll에서 마찬가지로 구해주면 된다.
이런식으로 정상적으로 계산기 뜨는걸 확인 할 수 있다.
3. push/ret 을 이용한 쉘코드로 점프
단순하다 push esp; ret 하게 되면
pop eip;jmp eip 하게 되어 스택에 있던 esp주소가 eip에 들어가서 jmp eip하여 쉘코드가 실행되게 된다.
4. jmp [reg+offset]
이것두 단순하다 dll에서 jmp [esp+4] , jmp [esp+8] 이런 가젯을 찾아서,
eip로 해주면 된다.
'System' 카테고리의 다른 글
[SSA] 시스템 스터디 3주차 (0) | 2015.10.20 |
---|---|
[SSA] 시스템 스터디 1주차 정리(어셈블리) (1) | 2015.10.06 |
[Window] 1. 스택 버퍼 오버 플로우 (0) | 2015.08.29 |
hand-ray 연습5 (0) | 2015.08.19 |
hand-ray 연습4 (0) | 2015.08.19 |