ping 서비스에 대한 공격코드 작성
※ 이 글은 파이썬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] 시연
'Try Attack > python[basic]' 카테고리의 다른 글
python으로 zip파일 크랙하기 (0) | 2019.01.28 |
---|---|
python으로 매크로 제작하기 (0) | 2019.01.26 |
python 코드 분석 방법 (4) | 2019.01.25 |
python으로 Linux에서 zip파일 압축 및 해제 (0) | 2019.01.19 |
python으로 채팅구현하기 (0) | 2019.01.19 |
댓글