Tuesday, January 15, 2019

쉘코드로 계산기 실행

2019-01-15

SHELL CODE


  • 환경 : Unix-Linux
    • Windows 는 Shell 대용
  • Shell을 실행시키는 Code (기계어 코드)
  • Bash Shell을 실행시키면 마음대로 본 서버를 자유자재로 사용가능



소프트웨어 오작동을 이용하여, 
계산기를 실행시켜보기


  • 변수의 크기는 12byte 설정하였으나 읽어드릴 수 있는 데이터의 양은 1024인 점을 활용하여 계산기 실행시키기



    • 먼저, calc.exe가 실행되는 구조를 파악하기
[ calc.exe ]
PUSH-PUSH-CALL 로 WinExec함수가 실행됨




    • txtReader.exe를 파악하기

[ fread 함수 ]
main 함수 ( 파일을 읽는 부분 )을 파악
fread가 실행되기 이전.


[ fread 함수 ]
fread 함수가 실행되면서 파일의 내용이 들어감

이부분에 calc.exe가 실행되는 함수를 삽입하면 될 듯



  • calc.exe의 실행함수, WinExec가 실행되도록 Shell Code를 만들어보기




    • WinExec함수의 어셈블리어를 기계어로 바꿔보기
[ 버퍼 + 리턴주소 + 쉘코드 ]
더미값은 12byte로 지정하였기때문에 12byte를 채움
리턴주소는 다음 함수가 실행될 곳(main함수)으로 지정
쉘코드는 WinExec가 실행될 기계어부분

[ 공격페이로드를 HxD를 이용하여 변수로 지정 ]
txt파일로 저장


[ argv 로 지정 ]
값을 지정하고 오픈


[ fopen]
지정한 값으로 오픈됨


[ RETN 값 ]
STACK에 보이는 0012FF80 의 값 확인



[ RETN후의 주소이동을 들어가봄 ]
WinExec가 아닌
UnhandledExcep 이라는 다른 함수가 들어가 있음


[ 0012FF84 ]
0012FF80 으로 리턴주소를 잡았는데 RETN값 에러


  • 리턴주소 수정하기
    • WinExec함수의 어셈블리어를 기계어로 바꾸기

[ Visual Studio ]
calc.exe 가 WinExec로 실행되는 소스코그
어셈블리어 함수를 기계어로 바꾸어주는 프로그램이 따로 있어 사용하면 좋으나
리버싱을 통하여 어셈블리어와 기계어를 파악하기위해 비주얼 스투디오를 사용


[ 위의 소스코드 ]
Release하여 Reversing
입력한 값대로 어셈블리어가 나옴
기계어를 뽑아내어 보기


[ 기계어만 뽑아내기 ]


[ 값을 정리하여 보면 ]


[ HxD로 txt파일 만들어서 argv,argc로 지정 ]


[ argc 값을 넣고 실행 ]


[ RETN 값으로 넣은대로 나옴 ]


[ 값이 대입됨 ]
0012FFBC 기계어확인


[ 다 들어감 ]

 
[ calc.exe 가 push ]


[ calc.exe 실행됨 ]




No comments:

Post a Comment

List

MobSF

MobSF는 오픈소스 모바일 앱 자동 보안 진단 프레임워크로 자동 분석 시스템 구축할 때 사용한다. 정정 및 동적 분석이 가능하며, Android, iOS, Windows에 대해 침투 테스트, 멀웨어 분석 및 보안 평가를 할 수 있다. 참고자료 필...