Try Attack/python[basic]

ping 서비스에 대한 공격코드 작성

D4tai1 2019. 1. 19.

 

※ 이 글은 파이썬3을 기준으로 작성되었으니 참고하시기 바랍니다.

 

1. 제공되는 서비스 확인

▶ 나의 경우 핸드폰으로 트러블슈팅을 하기위해 핑테스트 어플리케이션을 받아서 사용할 때가 있다.

▶ 예전에 웹 사이트에서 핑테스트서비스를 해주는 경우도 보았다.

▶ 이러한 서비스는 입력값에 대한 검증이 없다면 생각보다 서버에 심각한 영향을 줄 수도 있다.

▶ 원격서버로의 연결은 [nc "IP_address" "port"] 로도 가능하지만 python을 이용해서 접속을 시도해보려고 한다.

 

(1) 서버

 [1] 제공할 서비스

  ▶ 제공하는 서비스는 C언어로 간략하게 작성한다.

 

 [2] 서비스를 제공할 포트

  ▶ 58번째 줄에 tcp프로토콜을 이용한 80번 포트로 test라는 서비스가 제공되고 있다.

  ▶ 보통 80번 포트는 웹서버 포트로 사용하지만 well-known port의 편견을 깨고 다른포트로 사용할 수 있다는 것도 말하기 위해 일부러 80번 포트로 서비스를 제공하였다.

  ▶ http서비스는 다시 사용해야하니.. #으로 주석처리!ㅎ

 

 [3] 매핑

  ▶ 80번 포트를 열어주었으면 그에 대한 서비스를 매핑시켜준다.

  ▶ 위의 양식형태는 만든 사람이 위와 같은 형태로 만들었으므로 양식에 맞춰서 작성해준다.

  ▶ 중요한것은 stream은 tcp를 말하고 REUSE는 동시접속을 허용한다는 의미이다.

  ▶ 서버는 포트로 접속시 제공할 어플리케이션을 말한다.

 

 [4] 서비스 재시작 후 포트 확인

  ▶ [service xinetd restart] 명령어를 이용하여 서비스관리 데몬을 재시작한다.

  ▶ [netstat -atln] 명령어를 이용하여 서비스중인 포트 및 상태를 확인한다.

  ▶ 그림과 같이 명령어를 입력해도 좋고 명령어 옵션은 자유롭게 사용하여도 무방하다.

 

(2) 클라이언트

 [1] 공격코드 작성

  ▶ 4라인에서 원래 핑테스트할 ip만 적어야 한다.

  ▶ 4라인에서 서버에 하고싶은 나쁜?짓(echo \"\" > haha.php)을 나열하면 된다.

  ▶ 위 내용은 command injection과 동일하다.

  ▶ 6라인은 소켓을 생성한다.

  ▶ 8라인은 (IP, port)튜플을 이용하여 소켓에 연결한다.

  ▶ 10라인은 데이터를 바이트형태로 전송한다. (원래 통신은 이진테이터를 전송한다.)

  ▶ 12라인은 서버에서 ping명령어를 사용하는동안 대기한다.

  ▶ 14라인은 4096바이트만큼 결과를 받아 result에 저장한다.

  ▶ 12, 14라인대신 pwntools 모듈을 이용해서 recvuntil("결과")과 같이 결과에 적은 내용이 나올때까지 대기 후 나오면 받을 수 도 있다. 

  ▶ 15라인은 bytes(result, 'utf-8')과 같이 적거나 그림과 같이 적어도 무방하다.

 

 [2] 시연

 

 

 

댓글