본문 바로가기

Hack The Packet/@ 2014 POC

2014 HTP offline 문제풀이

문제 다운로드>> http://goo.gl/jsAfHM

파일 크기        >> 126MB

 

BOF 문제를 풀다가 리턴 값을 계산하기 귀찮아서 Brute Force Attack을 하기로 했다. 그런데

운영진 측에서 연락이 오더니 자꾸 패킷 많이 쏘면 탈락시킨다고 한다. 다행히도 공격에 성공을

했는지 바인드쉘 포트가 열렸다. 하지만 명령어가 안먹힌다. 살펴보니 바인드쉘 쉘코드를

제대로 만들지 못했었다. 쉘코드는 간단히 수정했으나 다시 BF를 할 수도 없고 정확한 리턴 값

계산하기도 귀찮다. 정확한 주소를 찾아주세요!

 

An attacker decided to use BF to solve BOF chall. Some hours later, he/she got shell from chall server

(bindshell). But he/she did mistake, lost the shell connection! He/She can’t do BF anymore(was warned

by OP). Find correct return address in the exploit packet!

 

 

파일은 매우매우 크다고 할 수 없지만, 분석하는 데 약간 까다롭다고 볼 수있다.

Brute Force Attack이기 때문에 같은 패턴의 TCP steam이 중복되기 때문이다.

곳곳에 RST 빨간 패킷이 눈에 띄는것으로 보아 "실패"인 경우 "ERROR" 메시지를 보내고 서버에서 해당 커넥션을 거절하는 것으로 보인다. (아무 패킷이나 찍어서 스트림을 보면 아래와 같다)

 

 

추측1) 성공인 경우  ERROR가 아닌 다른 메시지를 던질 것이다.

  -> [130 서버-> 131번 사용자 / Bytes A <- B]로 보내는 바이트 수가 다를 것이다. 

추측2) 성공인 경우 다른 동작이 예상되므로 패킷수가 다를 것이다.

 

네트워크 패킷 데이터를 마이닝하여 통계정보로 정답을 찾는 수 밖에 없다. "ANOMALY DETECTION"

이 경우, 비정상(오류) 패킷이 아닌 정상이 ANOMALY가 된다.

 

일단 Statistics > Converstation List > TCP (또는 Conversations) 정보를 살핀다. 

 

        Total Packets : 1,212,130

TCP conversations :    109,249

 

 

간단히 각 탭을 클릭하여 정렬해서 비이상 스트림을 찾을 수도 있지만

통계정보를 보기 쉽게 창 하단에 Copy버특을 클릭 하여 CSV파일로 저장!

액셀에서 정렬&필터를 걸어 정보를 살펴보자.


"추측1"에 따라 필터를 적용해보면 중복되는 패킷들이 많지 않은 경우를 발견한다. 그 중 바이트가 344인걸로 골라내면 공격이 성공하여 ERROR를 반환하지 않는 스트림이다. 즉 서버가 응답하는 데이터의 전체 크기가 다른것을 찾은 것이다.

 

 

"ERROR"문자가 포함되지 않아 11bytes가 아닌 6 bytes를 보내는 것으로 확인된다.

주의 할 점은 이것은 통계정보에서 보이는 전체 패킷이 가지고 있는 bytes가 아니라, 순수 데이터에 해당하는 것이다.

 

 

다른 풀이 방법은 공격이 성공했다면 지연시간이 길 것이라는 생각으로 푼것이다. 문제 제작자가 정확히 의도한것이 맞다면, 공격이 성공한 47361, 41800 두 포트의 duration이 길어야 할 것이라고 판단된다. 하지만 47361은 결국 RST 패킷이 오는 것으로 보아 성공은 "41800"이 맞는 것 같다.

어쨌든 관련 풀이 내용은  http://pagez.kr/2014/11/06/hackthepacket-2014-offline-prequal/ 를 참고!

 

어떻게든 풀었으면 장땡!!ㅋㅋㅋㅋㅋㅋㅋㅋ 

 

#############################################

# 위와 같이 간단히 끝났으면 좋았지만....

# 처음 문제를 풀 때는 통계정보 복사가 잘 못 되어 아래와 같은 방법으로 풀었다.

# 큰 패킷 파일을 쪼갤 때 유용하니 참고하시길..

#############################################

 

이런 큰 패킷 파일을 받으면 일단 쪼개고 싶어진다.

그럴때 유용하게 사용하는 것이 "splitcap"이라는 윈도우 기반 툴이다. (GUI 버전도 있다)

만개 파일 핸들이상이 발생하면 에러가 나므로 사전에 세션수를 미리 짐작하여 옵션으로 주는 것이 필요하다.

 

 

 

이렇게 파일을 쪼개면 파일이름과 같은 폴더가 생기면서 IP와 PORT를 기반으로 pcap파일이 쪼개진다.

120 여만개 패킷 2.7만개의 파일로 쪼개지고 파일크기도 10KB 이하이니 통계정보를 기반으로 상세내용을 살필 때 매우 유용하다.

 

 

위 각 pcap파일의 통계정보를 csv파일로 저장하여 통계정보를 이용하여 위처럼 풀 수 있다. (앞에서 말했듯이 처음에 통계정보를 잘못보았는지 쪼갠것과 원본의 통계치가 달라 이런방식으로 한것이다. 사실상 문제는 없다. 그러니 처음부터 그냥 위처럼 통계정보를 이용해도 똑같다.) 파일을 각 csv 통계파일로 저장하는 명령어는 아래와 같다. "-nr" 옵션은 파일명을 인자로 주어 파일을 읽는다는 것, "-z"가 statistics 옵션이고 "conv,tcp"는 대화 중 tcp를 선택하겠다는 의미다. 마지막 "-q"는 캡쳐된 파일 숫자 등을 보여주지 않기 때문에 -z 옵션(통계)을 사용할 때 같이 사용하면 좋다.

 

'tshark -nr target.cap -z conv,tcp -q >> result.csv'