Network/Webhacking.kr

[webhacking.kr] Challenge(old)_31[150]

dcho 2019. 10. 14. 19:02
SMALL

이번문제는

get 파라미터명 : server

해결해야 되는 부분 : 기본적으로 server 인자값에 나의 ip가 들어간다. 그리고 fsockopen() 함수를 이용해 소켓연결을 하는데 포트가 랜덤이고 흔히 쓰지 않는 10000-10100 이다. 

소켓통신 (https://mangkyu.tistory.com/48

즉, 소켓통신은 Server와 Client가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식으로서 실시간 통신이 필요한 경우에 자주 쓰인다.

 

우선 fsockopen 함수에 대해 알아 보았다. 소켓연결을 하는 함수이다. 

이것 저것 삽질을 통해 보니 인자값이 41개 이상이면 no hack이라고 뜬다. 뭔지 모르겠다..

빈칸을 넣어보니 ssrf 문제도 아니라고 한다. 뭘까..

※SSRF란?

SSRF는 Server-side Request Forgery의 약자이다. CSRF와 달리 서버가 직접 호출해서 발생하는 문제이다. 이를 통해서 외부에서 내부망에 대해 접근하거나 스캔하고 각종 보안장비들을 피해갈 수 있다.

패킷을 분석해 보니 관심이 가는 부분이 생겼다. 음 연결시간이 3초가 지나면 timeout이 뜨니까 더 빨리 하면 되지 않을까??

패킷에서의 timeout 을 조작해보려고했지만 엄청난 삽질끝에 해결하지 못했다.

※패킷 조작하려다가 패킷공부함

패킷과 패킷(데이터) 송수신 전송 흐름 (https://blog.naver.com/sung_mk1919/221177021021)

생각을 계속 하다가 로컬PC 에서 해당하는 포트를 열면 어떨까 하다가 실패..

힌트를 조금 얻어 내가 가지고 있는 GCP 리눅스 서버를 이용 하기로 했다.

하지만 잘 모르는 탓에 또 엄청난 삽질을 하게 되는데...

먼저 방화벽이 제일 관건 이였다. 

검색해보니 iptables 로 포트를 여는 것 같았다. 

https://blog.naver.com/vnfn4/220224420170 (리눅스 방화벽 포트 열기)

https://luvery93.github.io/articles/2018-02/iptables-setting-in-ubuntu (iptables를 사용한 방화벽 설정)

근데 iptables 에 설정해 놓은 포트가 저장이 되지 않는다. 알고보니 Ubuntu는 ufw 방화벽을 제공한다고 한다. 

  • iptables

    • iptables -nL : 설정보기

    • iptables -A INPUT -p tcp --dport 10000:10100 -j ACCEPT (포트추가)

    • iptables -D INPUT -p tcp --dport 10000:10100 -j ACCEPT (포트제거)

  • ufw 설정

(https://varins.com/library/server/ubuntu-server-initial-setup/)

근데 보니까 초기에 우분투 설정할때 방화벽을 제대로 설정하지 않아 문제는 없어 보인다.. ufw도 실행중이 아니고 

http://blog.naver.com/PostView.nhn?blogId=clown7942&logNo=110108561424&redirect=Dlog&widgetTypeCall=true (에코서버구현)

이제는 이 에코서버를 구현을 해서 일일이 백그라운드로 포트를 열어주며 0~20 만 랜덤에 걸리도록 기다렸는데 또 안된다!!

※ 명령어 모음

  • 명령어 & : &로 지정해주면 백그라운드에서 실행된다.

  • kill %1 : 백그라운드에서 실행중인 프로세스를 죽여준다. 하나씩 되는듯..? 옵션중 -1 하면 pid가 1보다 크면 다꺼진다고 한다.

  • jobs : 현재 작업을 나열한다.

  • netstat -tnlp | grep 100 : 포트가 100 으로 시작하는것은 다 보여주도록 했다. 

  • tcpdump -l | grep 10000 : 10000포트로 통신하는 모든 패킷을 덤프한다.

  • iptables !

우분투 내부아이피,포트로 접속하면 잘 된다. 하지만 외부IP를 통해  들어오는 것이 안된다. 

계속 고민하다가 GCP 방화벽 규칙을 보고 잘 못하다가 도움을 받아 뚝딱 해결하였다.

근데 이제 백그라운드로 일일이 하는것이 아닌 nc 서버를 이용해서 요청을 받기로 했다. 

 

포트를 여러개 열고싶었는데 

안된다...ㅜ

결국 알아낸 정보 

  • for j in 202{0..5}; do nc -lvnp $j & done

  • This should open up a number of listening ports from 2020 to 2025, or whatever range you want.

감격의 플래그..... 너무 고생많은 이번문제였다.