웹개발자를 벌벌 떨게 만든다 – Paros Proxy

사용자 삽입 이미지수많은 사람들이 내 블로그에 접속하는 검색 키워드로 paros를 사용한다는것을 뒤늦게 알았다.

아마도 mod_security의 옵션중에 하나인 paros 차단 옵션이 검색되어진 모양이다.

검색하고 오신 분들이 크게 실망을 하였을것 같아 그분들의 기대에 부흥하는 글을 써볼까 한다.

우선 paros는 무엇일까?

Paros는 웹프록시 프로그램이다. Request를 받을 서버와 Client의 중간에 위치하며 모든 Request와 Response를 기록한다.

모든 페이지가 트리 형태로 분류되어 사이트 구조를 쉽게 파악할수 있으며 스캐너를 이용하여 웹의 취약성 스캔을 할수 있다.

또한, 옵션으로 다양한 인코딩 형식에 대하여 Hash 또는 Encoding/Decoding을 지원한다.

설치를 하여보자. 자세한 이야기는 적지 않겠다.

http://www.parosproxy.org/

에 방문하여 Download에서 Win32버젼을 다운받아 설치하자. Paros는 Java로 제작되어 JDK가 설치되어있어야 실행가능하다.

없다면 http://java.sun.com 에서 다운받아 설치하자.

Paros는 8080포트를 Listen한다. 혹시라도 같은 포트를 사용하고 있는 서비스가 있는지 확인해 보자. 예) 톰캣

그리고 웹브라우저의 프록시 서버에 파로스가 실행중인 서버의 정보를 적는다. 자신의 PC에서 돌릴경우 다음과 같이 적으면 된다.

사용자 삽입 이미지
그리고 Paros를 실행하여 보자.

사용자 삽입 이미지
위와같이 볼것없는 녀석이 보인다. 이것으로 무엇을 할수 있다는 말인가?

이제 프록시 설정을 한 브라우저를 사용하여 웹서핑을 하여보자. 로그인도 해보자.

사용자 삽입 이미지
한국 인터넷 시장을 76% 점유하고 계신다는 네이버에 로그인하여 보았습니다.
위와같이 Request와 Response가 모두 정확히 보여집니다. 이 작업을 하기위해 로딩된 모든 페이지에 대한 정보도 표시됩니다.
사이트 구조를 파악하거나, 어떤 쿼리와 어떤 작동을 하는지 파악하는데 도움이 되는 자료들일것입니다.

오늘은 Tools 메뉴에 있는 것들에 대해 간단한 소개만 할까 한다.

1. Filter : 브라우저 정보를 변조하거나, 특정 매칭되는 정보가 전송될시에 값을 바꾸어 보낸다거나 할수 있다.

2. Encode/Hash : 웹에서 사용되는 많은 Encoding들과 Hash값들을 Encode/Decode해볼수 있다. 와우해커웹게임같은데서 요긴하게 사용가능하다;

3. Manual Request Editor : 이게 정말 무서운 녀석이다. 내마음대로 Request를 만들어서 전송할수 있다. 물론 하시는분들은 간단히 C코드를 작성하여 변조된 Request를 날리시겠지만, 이것은 프로그래밍적인 사전지식이 없이도 그것을 가능하게 만든다. 어찌보면 별것 아닌 부분일지 모르겠으나, 잘 생각해 보면 정말 무서운 기능이다. 쿠키와 POST/GET의 값을 변조할수도 있다. 쿠키에 무작정 값을 담아두는 개발자들에게 경고!?

이 3가지 이외의것들은 별로 중요한것들이 아니라 넘어가겠다.

그렇다면 이 Paros로 무엇을 할수 있으며 개발자는 무엇을 조심해야 하는것일까?

사실 제목과는 달리 너무나도 당연하고 너무나도 별것아닌 내용일수 있겠으나, 수많은 개발자들이 크게 신경쓰지 않는 부분일것이라 생각해서 적어본다.(대부분의 작은 규모의 사업체들이 크게 신경쓰지 못하는 부분일것이라 생각한다)

특정 악의적인 목적을 가진 사람이 특정 사이트에 다음과 같은 값으로 로그인을 시도하였다.

[code]ID : admin
PW : ‘ or 1 = 1 –[/code]

하지만 우리 개발자도 만만치 않았다. Javascript로 해당 폼을 체크하여 숫자나 문자이외의 값이 포함되어있을 경우 잘못된 값이 들어있다는 에러를 내뿜어 주었다.

하지만 이 악의적인 분도 포기하지 않았다.

곧바로 Paros의 Manual Request Editor 기능을 사용하여, 바로 다음페이지로 POST값을 만들어내어 전송하였다.

그리고 로그인 성공…

결론은 무엇일까? 사용자적인 측면에서 Client Side의 체크는 분명히 존재해야 할것이다.
하지만 Server Side의 값 체크를 게을리 하지 말자. 어떤식으로 곧바로 어떤값이 입력될지 않수없다.

Form값의 Validate를 충실히 해야 할것이다.

마지막으로 싸이월드의 아바타 수정시에 값을 변조하여 보냈을때 결과물이다.
여러분의 서비스를 이용자가 이렇게 이용하길 바라십니까?

사용자 삽입 이미지
참고 : http://www.unixwiz.net/techtips/sql-injection.html