alphanumeric 쉘코드 적용방법
시스템 2014. 3. 14. 17:23 |
유니코드 환경이나, 파일 복사과정에서 문자열의 ragne를 체크하는 경우가 있다. kmplayer취약점의 경우 복사과정에서 0x20보다 값이 작으면 복사가 중단된다.
이럴 때 일반적으로 사용되는 쉘코드를 쓰게되면, 쉘코드가 복사과정에서 잘리는 문제가 발생한다.
이럴 때 alpha3.py를 이용하면 ascii영역의 쉘코드를 생성할 수 있다.
다운로드 URL: https://code.google.com/p/alpha3/
프로그램을 사용하려면 먼저 쉘코드를 바이너리 파일로 만들어야 한다.
data = "\xeb\x10\x5a\x4a\x33\xc9\x66\xb9\x3c\x01\x80\x34\x0a\x99\xe2\xfa\xeb\x05\xe8\xeb\xff\xff\xff\x70\x4c\x99\x99\x99\xc3\xfd\x38\xa9\x99\x99\x99\x12\xd9\x95\x12\ //쉘코드 이하 생략 " open('code.bin', 'wb').write(data) |
명령어는 다음과 같다.
ALPHA3.py x86 lowercase EBX --input="code.bin"
여기서 레지스터(EBX)를 지정하는 것이 상당히 중요하다. 그 이유는 쉘코드를 실행해보면 알수있는데, 아래와 같이 에러가 발생한다.
이 문제를 해결하려면 EBX의 주소, 정확히는 우리가 지정한 레지스터에 쉘코드의 시작주소를 정확하게 넣어줘야 한다.
주소를 넣기 위해서 간단한 op코드를 추가하면 되는데, 유니코드라던가 스택의 상황에 맞게끔 맞춰서 넣어주면 된다. 나의 경우에는 stack에 비슷한 주소가 있어서 pop을 한 후, 쉘코드의 주소 오프셋을 더해줬다.
<주소 실행 전>
<실행 후>