외로운 Nova의 작업실

파이썬 interactive() 원리 본문

Computer App Penetesting/System Vulnerability

파이썬 interactive() 원리

Nova_ 2023. 1. 17. 18:11

파이썬 interactive() 함수는 신기합니다. 저의 쉘과 상대방의 쉘이 연결된 것 처럼 보입니다. 이를 어떻게 구현하는지 한번 알아보겠습니다.

 

- interactive()함수가 신기한 이유

먼저 우리는 소켓 프로그래밍을 할때 서로간의 통신은 문자열로 통신을 합니다. recv() 함수와 send()함수로 말입니다. 하지만 상대방의 쉘에 send()함수로 명령을 내려도 쉘에서 나온 문자열이 send() 되지 않으니 상대방 쉘이 출력한 값을 알 수 없습니다. 하지만 interactive()함수는 그것을 가능하게합니다.

 

- creatprocessA() 함수

c언어에서 CreateProcessA() 함수가 있습니다. 이 함수를 아래와 같이 씁니다.

CreateProcessA(NULL, "cmd.exe", NULL, NULL, TRUE, 0, NULL, NULL, &sInfo, &procInfo);

나의 컴퓨터에서 cmd.exe를 실행시키고 &sInfo에 있는 핸들값으로 연결하는 함수입니다. 이때 핸들값에 상대방 컴퓨터와 연결되어있는 핸들을 준다면 나의 cmd.exe는 상대방의 컴퓨터로 연결됩니다. 이때 조건이 하나 있습니다. 상대방의 컴퓨터에서 똑같은 프로세스 즉, cmd.exe가 나와 연결된 포트로 listen상태여야한다는 것입니다. 만약 그렇게된다면 똑같은 프로그래밍 이기때문에 동기화되어서 나의 컴퓨터에서 상대방의 쉘을 다루는 것 처럼 조작할 수 있습니다.


- 실제 exploit

저희가 공부한 basic_exploitation_000 문제에서 접속정보를 통해 포트번호가 확인이 되며 그 포트에서 상대방은 취약점이 있는 스크립트를 프로세스로 만들고 실행하게됩니다. 이후 exploit하여 그 프로세스에서 cmd를 실행시키게되면 포트와 연결이 되므로 CreatProcessA()함수가 실행되어 동기화되어서 나의 컴퓨터에서 상대방의 쉘을 다루는 것 처럼 조작할 수 있습니다. 

- 정리
1. CreateProcessA()함수에 상대방과 연결된 핸들값을 주고 cmd.exe(프로그램)을 인자값으로 준다.

2. 나와 연결된 상대방의 포트에서 상대방의 cmd.exe가 실행되면 자동으로 나와 연결되어 내가 상대방의 cmd를 조작하는 할 수 있다.

- 참고
https://hackability.kr/entry/%EC%9D%B5%EC%8A%A4%ED%94%8C%EB%A1%9C%EC%9E%87-%EA%B0%9C%EB%B0%9C-06-%EC%89%98-%EC%BD%94%EB%93%9C

 

[익스플로잇 개발] 06. 쉘 코드

본 문서는 원문 저자인 Massimiliano Tomassoli의 허락 하에 번역이 되었으며, 원문과 관련된 모든 저작물에 대한 저작권은 원문 저자인 Massimiliano Tomassoli에 있음을 밝힙니다. http://expdev-kiuhnm.rhcloud.com

hackability.kr

 

Comments