안녕하세요!
이전에 했었던 쉘코드를 이어서 진행 해보도록 하겠습니다!
(이번편을 보시기 전에 이전편을 보시고 와주세요!)
https://kamro17.tistory.com/entry
[시스템해킹 도전기 3편] 쉘코드(1)
안녕하세요~ 오랜만에 글을 씁니다 ㅎ.. 매일 매일 글을 쓰도록 노력해보겠습니다! 오늘은 쉘코드에 대해서 알아보고자 합니다! 쉘코드(shellcode) 1) 쉘코드의 의미 ◦ 시스템의 특정 명령을 실행
kamro17.tistory.com
4)쉘코드 제작 – 어셈블리
(1) 어셈블리 코드 제작
C언어 코드를 토대로 어셈블리를 제작 해보겠습니다.
어셈블리 코드의 내용은 message 내용의 “i2sec”을 출력한다는 의미입니다.
이후 어셈블리 언어로 컴파일을 하겠습니다.
무한루프가 발생하는 이유는 exit(0) : 종료 코드가 없기 때문에 무한으로 발생 하는 것을 볼 수 있었습니다
따라서 어셈블리 코드에 종료 코드를 삽입하여 수정해보겠습니다.
종료코드를 삽입 후 다시 컴파일 하여 실행 해보겠습니다.
5)쉘코드 제작 – 쉘코드(기계어) 추출
만들었던 어셈블리 파일을 통해서 쉘코드를 추출 해보도록 하겠습니다.
위 코드를 자세히 보시면 0x00 이 그대로 나온 것을 볼 수 있습니다 이 코드는 널바이트를 의미 하면서 기계어 코드를 넣고 실행 했을 시에 끊김이 발생 할 수 있습니다.
→ 따라서 널바이트를 제거해주는 작업을 진행 하도록 하겠습니다.
★ 널바이트 제거 방법
1. 0값을 삽입 한다.
→ XOR 연산을 이용 : 자기 자신을 XOR 하여서 0 값을 삽입한다.
2. short jmp : jmp short 는 2바이트만 사용한다
3. 레지스터 너비 수정 : 8비트, 16비트 레지스터 사용
어셈블리어를 수정 후 다시 컴파일을 하겠습니다.
쉘코드에 널바이트가 사라진 것을 볼 수 있습니다.
다시 쉘코드를 추출해보겠습니다.
6) 쉘코드 제작 – 쉘코드 완성
기계어를 완성한 C언어를 작성 해보았습니다.
i2sec이 잘 실행되는 것을 확인하였습니다!
이제 쉘코드를 작성하는 방법을 한 번 더 정리하고 마무리 하도록 하겠습니다.
★ 쉘코드 제작방법 ★
1. C언어로 구현한다.
2. gdb로 어셈블링을 하여서 필요한 부분을 찾는다.
3. 시스템 콜에 필요한 필수 부분만으로 구현한다.
4. 컴파일 후 objdump 로 기계어를 출력한다.
5. null 값(nullpoint)이 존재할 시 null 값을 없애기 위해 어셈블리어를 수정하여 없앤다.
6. 기계어 코드를 출력후 다시 C언어로 구현하여 완성한다.
여기까지 따라오시느라 수고많으셨습니다!
하지만 이제 시작입니다 ㅎㅎ..
다음은 쉘코드 심화 편으로 찾아뵙겠습니다!
수고하셨습니다!
'해킹 > 시스템해킹' 카테고리의 다른 글
[시스템해킹 도전기 6편] Stack Buffer OverFlow(1) (0) | 2021.02.09 |
---|---|
[시스템해킹 도전기 5편] 쉘코드 - 심화 (0) | 2021.02.08 |
[시스템해킹 도전기 3편] 쉘코드(1) (0) | 2021.01.30 |
[시스템해킹 도전기 2편] 특수 권한 (0) | 2021.01.21 |
[시스템 해킹 도전기 1편] 패스워드 크래킹 (0) | 2021.01.20 |