Try Attack/python[basic]

백도어 제작

D4tai1 2021. 3. 11.

우선, 이 글에 적혀있는 내용은 악의적으로 이용시 처벌받을 수 있음을 알려드립니다!!

저는 책임이 없습니다!

 

안녕하세요..!!

 

오랜만에 그것도 엄청엄청 오랜만에 글쓰기를 눌렀네요..

 

"귀찮아하면 소중한걸 잃게된다"는 말이 있죠,,

 

지식도.. 마찬가지겠죠?

 

그래서 아무거나라도 해보기위해 글쓰기를 눌렀습니다.

 

이 글의 제목은 아직까지 정하지 못했습니다.

 

음.. 그냥 어려운걸 찾아봅시다!!


세상에서 두 번째로 어려운 일은 

 

남의 지갑에서 돈을 뺏어오는 일이고,

 

세상에서 가장가장 어려운 일은

 

다른사람 머리속에 내 생각을 넣는 일이라고 하네요.

 

 

원하는 것을 뺏아오고 원하는 것을 넣기 위해.. 

 

오늘은 백도어를 공부해봅시다!

 

 

백도어란?

 

뒷문이겠죠? 즉, 방화벽과 보안장비를 우회해서 서버의 자원을 통제하는 기술..?정도로 합시다.

 

네트워크를 통해 서버에 백도어를 업로드 하는 일은 

 

라이터 없이 나무와 돌멩이로 불붙이는 것보다 힘드므로

 

게시판에 파일업로드기능을 이용하여 유용한 툴인척? 올리는 것이 보편적입니다. 

 

미끼를 앙 물은 사용자가 파일을 내려받으면 이 PC가 좀비PC가 되는 것이죠!

 

간단하게 통신기능만 적어보도록 합시다!!

 

먼저 좀비PC(백도어)에서 접속할 서버의 코드를 작성해볼게요

 

[그림1] 서버에서 동작할 코드

 

소스코드에 대해 간단하게 부연설명을 하면

6라인에서 소켓을 만들어요!

7라인에서 소켓의 옵션을 설정하는데 

첫 번째 파라미터

1) IPPROTO_TCP : TCP프로토콜 옵션

2) IPPROTO_IP : IP 프로토콜 옵션

3) SOL_SOCKET : 소켓과 관련된 일반옵션

 

두 번째 파라미터

SO_REUSEADDR은 사용한 주소를 다시사용하겠다는 의미

 

8라인은 생성한 소켓을 NIC에 연결하겠다는 의미이며 파라미터는 튜플형태로 입력해야해요

 

9라인은 서버와 연결하기위해 대기할 큐의 숫자를 지정하지요.

 

11라인은 통신요청시 수락한다는 의미입니다!


이제 백도어의 코드를 작성해볼게요.

 

[그림2] 백도어에서 동작할 코드

 

구지 특별하게 설명할거는 없지만 하나만 설명을 추가하면

 

17라인의 Popen클래스는 다양한 인자를 받는데 PIPE라는 약간 특별한 것이 있어요

 

PIPE는 운영체제에 존재하는 임시파일

IPC(프로세스간통신) 기법중 하나인데 하나의 호스트 내에서 

다른프로세스와 통신하기위해 사용하는 거라고 생각하면 됩니다!

 

쉽게.. 음.. 여기서 볼 때

python프로그램과 명령프롬프트(같은 호스트 내에서 다른 프로세스) 간 

통신을 위한 연결통로?! 정도로 보아도 좋겠어요

 

어쨌든 Popen은 3개의 PIPE를 통해서 데이터를 주고 받아요

"출력, 입력, 에러"로 구성되어있죠!

 

 

지금은 백도어에서 동작할 코드를 파이썬스크립트로 동작시키지만

실제로 백도어를 심는다면 exe로 변환 후 아이콘도 이쁜거로 바꿔서

그럴사하게 게시판에 올려야겠죠?

 

실행시키기 전에 서버에서 tcpdump를 켜고 진행할게요~

 

[그림3] tcpdump

위에 2개 arp는 빼고(이미지 내 노란색박스부터)

3번째 패킷 : 172.17.234.77(백도어감염된 좀비PC) -> 서버, [syn] 패킷 전송

4번째 패킷 : 서버 -> 좀비PC(172.17.234.77), [syn + ack] 패킷 전송

5번째 패킷 : 좀비PC(172.17.234.77) -> 서버, [ack] 패킷 전송

----------------------------여기까지 연결 성공이죠?!----------------------------

6번째 패킷 : 좀비PC(172.17.234.77) -> 서버, [psh] 패킷 전송

 *psh 플래그: 데이터를 어플리케이션으로 바로 넘겨주어 알아서 처리하도록 합니다!

 

[그림4] 활성화된 연결확인

[그림3] tcpdump에서 확인한 것과 동일하게 이미 연결되어있는 것을 확인할 수 있어요!

 

이제 연결이 잘 되었는지 서버에서 확인해 볼게요

 

[그림5] 좀비PC와 연결되어있는 서버

좀비PC와 연결이 되었기 때문에 명령만 내리면 되겠네요! 

 

여러분 저기 $ 모양 이쁜거 좀 보세요!! 하하

 

위에 출력된 "[*] Connection Established!" 문구는 좀비PC에서 보낸 내용으로

 

[그림3]의 파란색 박스에서도 확인할 수 있습니다.

 

[그림6] 명령어 입력에 따른 결과

ls를 입력하니 결과가 나오네요!!

 

[그림7] 명령어 입력에 따른 결과(패킷)

 

입력한 명령어(ls)는 패킷에서도 확인할 수 있죠?

 

 

[그림8] 새로운 파일 생성

새로운 파일을 생성해볼게요

 

[그림9] 새로운 파일 생성(패킷)

패킷에서도 우분투(서버)에서 좀비PC로 명령어를 보내는 것을

 확인할 수 있네요!!

 

[그림10] 생성한 파일 확인

파일이 잘 만들어졌는지 확인해보니 원래 있었던거마냥 잘 있네요!! (뿌듯)

 

지금은 제 컴퓨터로 테스트를 하고있으니 아무의미없는 내용을 적고있지만

 

실제로 공격자라면 레지스트리 추가 및 변경 명령어를 작성할 수도 있고,

어차피 바이트스트림을 전송하기때문에 새로운 파일을 바이트형태로 전송할 수도 있고, 

내부정보수집을 위한 행위 등 여러가지를 할 수 있겠죠?

 

이제 테스트를 마쳤으니 저는 컴퓨터를 종료시켜보겠습니다!!

 

[그림11] 좀비PC종료

 

[그림12] PC종료문구

 사실 축구를 보면서 작성하고 있었는데..

 

꺼지게 생겼네요.. 하하

 

shutdown -a 를 누르면 예약종료가 취소된답니다.

 

'Try Attack > python[basic]' 카테고리의 다른 글

토크나이징(Tokenizing)이란?  (0) 2020.12.24
python 에서 발생한 예외찾기  (0) 2019.01.29
python으로 zip파일 크랙하기  (0) 2019.01.28
python으로 매크로 제작하기  (0) 2019.01.26
python 코드 분석 방법  (4) 2019.01.25

댓글