1. Proxy 서버란?

 

 

   -> 컴퓨터 네트워크에서 다른 서버 상의 자원을 찾는 클라이언트로부터 요청을 받아 중계하는 서버이다

   -> 클라이언트와 서버 사이에 있는 '대리인' 이다.

   -> 요청된 내용들을 캐시를 이용하여 저장한다. -> 전송시간 절약

 

 

 

다음 사진과 같이 Client가 request를 Server에게 전달하고,

Server가 response를 Client에게 전달하는 과정에 Proxy서버가 대리인 역할을 해줌으로써,

Proxy 서버 안에 전달된 정보들이 담겨져있게 된다.

 

 

2. 프록시 서버의 역할

 

 

   1) 프록시 서버 측에서 위험이 예상되는 웹 콘텐츠 및 악성코드 필터링이 가능하다.

       -> 클라이언트 측의 보안 향상

 

   2) 내부 통신과 외부 데이터 접근을 통제 할 수 있다.

       -> ex) 원치 않는 사이트 차단

 

   3) 자신의 IP 기록이 남지 않게 할 수 있다.

 

   4) 보안 및 통제를 뚫고 나가기 위해 차단 우회가 가능하다.

       -> 이 점을 악용하는 사람들이 많기 때문에, 많은 사이트에서 프록시 IP 차단

 

 

 

3. 프록시 패킷 접근, 조작

 

 

   1) Proxy 서버 생성

 

 

위에 사진과 같이 Proxy서버 생성을 하는 툴을 이용해도 되지만,

인터넷에서 '인터넷옵션 -> 연결 -> LAN 설정' 을 통해서도 Proxy서버를 생성 할 수 있다.

여기서, Host에 '127.0.0.1' 은 시스템 자기 자신을 의미하는 루프 백(loop back) 주소이다.

 

다음과 같이 proxy server를 생성한 뒤, 'on' 상태로 만들면 웹 프록시 툴을 사용 할 수 있다.

 

 

 

   2) 웹 프록시 툴을 이용해 프록시 패킷에 접근

 

다음 툴은 'burp suite' 라고 하는 툴인데, 대표적인 웹 프록시 툴이다.

이 툴을 이용하여 프록시 서버에 담긴 데이터들(파라미터, 헤더 등등)을 조작 할 수 있다.

 

이 툴을 'on'상태로 하려면 'intercept is off'를 눌러 'intercept is on' 상태로 만들어준다.

그런 상태에서 여러 조작들을 한 뒤 'Forward'를 누르면 조작된 정보가 서버로 전송이 된다.

'intercept is on'을 다시 누르면 'intercept is off' 상태가 되는 데,

이때는 패킷에 담긴 데이터를 확인하지 않은 채 바로 전송이 된다.

 

데이터를 조작하는 방식은 여러가지이다.

다음과 같은 화면에서 바로 조작해도 되지만,

'Action'을 누르면 여러 카테고리들로 보낼 수 있다.

 

개인적으로 데이터 조작에 활용하기 편하고 간편해서 'intruder'랑 'repeater'를 자주 쓴다.

그래서 예시로 intruder와 repeater를 설명하고자 한다.

 

 

 

예를 들어, intruder의 경우,

 

'Action'에서 'send to intruder'를 클릭하고 'intruder' 카테고리를 클릭하면,

다음과 같이 조작할 값들을 선택 하도록 나와있다.

조작하고 싶은 값들을 클릭 한 뒤 Payloads를 클릭하면

 

 

 

 

이런 화면이 나온다.

'Payload type' 에서 선택한 값들을 어떤 형식으로 조작 할 것인지 선택 할 수 있다.

(예를 들어서, 영문자 2개 숫자 2개의 조합으로 설정이 되면 영문자 2개 숫자 2개인 모든 조합을 값에 넣어서 실행을 시킬 수 있는 type이 있다.

aa00부터 .... zz99까지 ....

하지만 경우의 수가 너무 많은 규칙들은 그만큼 시간이 엄청 많이 걸린다.)

 

지금 선택되어 있는 건 'Simple list' 인데, 사용자가 원하는 값들을 넣은 뒤 'Add'를 누르면 그 원하는 값들을 다 조작하고 싶은 값에 넣는다.

그러고 (사진엔 짤렸지만) 오른쪽 위에 'start to attack' 버튼을 누르면 실행이 된다.

 

예를 들어서, 'a, b, v, d, f, e' 의 값을 'Add'를 눌러 다음과 같이 집어넣게 되면,

전 사진에 나와있는 화면에서 선택된 test의 값과 PHPSESSID의 값에 'a, b, v, d, f, e' 라는 값들을 넣어준 뒤 서버의 결과를 보여준다.

 

 

 

이렇게!!!

 

 

 'repeater' 의 경우,

 

'Action' 을 눌러 'send to repeater'를 누른 뒤 'repeater' 카테고리를 클릭하면,

다음과 같은 화면이 나온다.

 

 

 

'Request' 라고 써진 화면 아래는 데이터가 repeater에 send가 된 상태이다.

여기서 값들을 조작하고 싶은 대로 조작을 한 뒤, 'Go' 를 누르면 'Response' 라고 써진 화면 아래에서

조작 된 후에 조작된 데이터를 서버에다 전송하면 결과가 어떻게 나올지를 미리 볼 수 있다.

 

 

이 외에도 데이터를 조작 하는 데에는 많은 방식들이 있다.

 

이렇게 프록시 서버를 생성하고 웹 프록시 툴을 사용하면서 프록시 패킷에 접근하여 데이터 조작을 할 수 있다.

그러므로, 해킹을 할 때에도(예 : SQL Injection 등) 활용이 가능하다.

 

 

 

 

 

4. proxy 서버 조작 활용 - SQL Injection (webhacking 3)

 

 

 

 

 

webhacking 3번에서 로직을 풀면 다음과 같은 칸이 나온다.

 

일단 값을 모르니까 아무 값이나 쳐보자.

 

 

 

다음과 같이 빈 칸에 기입한 글자들이 결과 값으로 화면에 나온다.

 

 

 

다음 사진에서 Payload는 answer와 id의 값을 나타낸 것이다.

여기서 answer의 원래 정해진 값이 '1010100000011100101011111' 이었으나, 값을 '1'이라고 해도

결과 값으로 나오게 되었다.

이것을 보고 answer의 값을 injection하면 된다는 것을 알았다.

 

 

 

 

answer의 값을 저런식으로 바꿔주면 풀리는 문제로 추측이 가능하다.

 

 

 

그런데 answer의 값을 저렇게 바꿔주니까 no hack이라는 문구가 나왔다.

그래서 필터링을 우회하기 위해 or 대신 ||를 써주면 된다.

 

 

 

 

 

 

 

 

 

created by 사실산타는없거든A

'WEB > Web' 카테고리의 다른 글

페이지 이동 Loction.href  (0) 2017.11.20
base64  (0) 2017.11.06
자바스크립트 용어  (0) 2017.10.28
아스키 코드(ASCII)  (0) 2017.10.16
javascript indexOf 함수와 lastindexOf 함수  (0) 2017.09.25

XSS는 웹 브라우저에서 동작하는 악의적인 스크립트이다. 일반적으로 사용자의 개인정보, 쿠키탈취등을 한다.

 

대부분 XSS취약점을 진단하고자 할 때 <script>alert(1)</script> 와 같은 형태로 공격구문을 넣는다.

 

이를 우회하는 방법에는 여러가지가 있다.

 

 

1. 대소문자를 구분하는 함수를 이용해 보안을 해 놓았을 경우

 

공격 코드 : ex) <ScripT>alert(1)</SCRipT>

 

  

 

2. 금지어의 값을 Null 처리하는 함수를 이용해 보안을 해 놓았을 경우

 

공격 코드 : ex) <sscriptcript>alert(1)</sscriptcript>

 

  

 

 

3. HTML 태그 속성을 이용한 우회

 

특정 문자열만을 치환하는 방식의 함수가 쓰였을 때에 onmouseover 옵션을 사용하여 우회할 수 있다.

 

<?
 function XSSFilter($inputString)
 {
  $content = str_replace("<","&lt;",$content);
  $content = str_replace(">","&gt;",$content);
  return $content;
 
?>                                                                       

 

위와 같은 코드가 있다고 가정하자. 위 코드는  '<'와  '>' 문자열에 대해서 필터링을 한다.  예를들어 ?file=<script>alert(1)</script>   와 같은 형태로 공격구문을 넣었을 때 필터링과정을 거쳐    &lt;script&gt;alert(1)&lt;/script&gt;  와 같이 출력될 것이다.

 

 

공격 코드 : ex) <img scr="hello" onmouseover="alert(1)l">

 

"hello"라는 이미지 파일에 마우스를 올려 놓았을 경우 스크립트가 실행된다.

 

 

  

 

4. 문자열 분리를 통한 우회


자바 스크립트의 eval 함수를 이용하여 우회한다.

여기서 eval 함수에 대해 짚고 넘어가겠다.

 

eval() 함수의 인자는 기본적으로 문자열이다. 만약 문자열이 표현식을 나타낸다면 eval()은 표현식을 실행하지만, 인자가 있는 경우에는 문장을 반환한다.

 

예를 들어 eval("1+2") 는 3을 반환하지만, eval(new String("2+2")); 는 "2+2" 인 문자열 객체를 반환한다.

이때 변수를 선언하고 그 변수에 객체를 저장한 다음 toString()을 사용하면 이 제약을 피할 수 있다.

ex) var A = new String("1+2");

    eval(A.toString());  => 3을 반환!

 

공격 코드 : var inputString="aler" + "t(al" + "ert" + "(1));" ;

               eval(inputString);

  

 

 

5. 연속된 문자열을 거부하는 함수 우회

 

ex) 웹해킹 23번

 

 

위와 같은 경우 문장의 종료를 나타내는 'null'값을 문자열 사이 사이에 url 인코딩하여 넣어주면 된다 (위의 경우에는 GET방식으로 입력받기 때문)

 

공격 코드 : <s%00c%00r%00i%00p%00t>%00a%00l%00e%00r%00t%00(1);</s%00c%00r%00i%00p%00t>

  

 

 

 

참조 사이트

 

https://msdn.microsoft.com/ko-kr/library/12k71sw7(v=vs.94).aspx

 

http://dntsecurity.blogspot.kr/2017/02/xss.html

 

 

 

 

- Created by subo0521 -

'WEB > Web Hacking' 카테고리의 다른 글

error based sql injection  (0) 2017.09.18
Drive-By-Download(DBD)공격(실습편)  (0) 2017.05.29
Blind SQL Injection (이론편)  (0) 2017.05.14
파일 다운로드 취약점  (0) 2017.05.08
CSRF (Cross-site request forgery) 란  (0) 2017.04.28

웹해킹공부를 하면서 가장 자주 보는 것 중 하나가 location.href인 거 같다.

쉬운 내용이지만 글쓴이처럼 헷갈려하는 분들을 위해 알게된 내용을 정리해보았다. ㅎㅎ


1. Location.href란??

현재 페이지의 url을 설정하거나 반환해주는 javascript의 속성으로 

대부분 페이지 이동 시에 자주 사용하는 거 같다.


2. 페이지 이동시 사용되는 location.href

Location.href="~~" 형태로 사용되며 

"~~"은 String type의 value가 들어오게 되며 ~~에는 파일의 경로가 들어간다.

파일의 경로로 인터넷의 url이 들어올 수 있고 서버안에 있는 파일의 경로가 들어올 수 있다.


1) 인터넷의 url 

location.href="https://www.google.co.kr" 라고 설정하면 현재 페이지의 주소창이 https://www.google.co.kr로 바뀌면서  구글로 페이지 이동을 하게 된다.


2) 서버안에 있는 파일의 경로 

상대 경로의 개념으로 현제 페이지의 코드파일이 있는 곳을 기준으로 경로를 지정한다.

설명을 쉽게 하기 위해 예시로 다음과 같은 서버내 파일들이 있다고 가정해보자.

  ① 같은 디렉토리 내의 파일로 이동하는 경우 

  index.html가 현재 페이지의 코드가 들어있는 파일이라는 가정하에 FileTwo로 이동하는 경우로 

  location.href="FileTwo" 라고 설정해주면 된다.

  같은 디렉토리 내의 파일이므로 파일이름만 써주면 된다. 

  그리고 주소창의 변화를 보면 다음과 같다.

    - 현재 페이지 : https://xxx.xxx.xxx.xxx/xxxx/i/index.html

    - 이동 후 페이지 : http://xxx.xxx.xxx.xxx/xxxx/i/FileTwo


  ② 하위 디렉토리 내의 파일로 이동하는 경우 

  index.html가 현재 페이지의 코드가 들어있는 파일이라는 가정하에 FileOne으로 이동하는 경우로 

  location.href="./haha/FileOne" 라고 설정해주면 된다.  

  하위 디렉토리 내의 파일이므로 해당 디렉토리이름을 써주고나서 파일이름을 써줘야한다. 

    - 현재 페이지 : https://xxx.xxx.xxx.xxx/xxxx/i/index.html

    - 이동 후 페이지 : http://xxx.xxx.xxx.xxx/xxxx/i/haha/FilOne


  ③ 상위 디렉토리 내의 파일로 이동하는 경우 

    FileOne이 현재 페이지의 코드가 들어있는 파일이라는 가정하에 FileTwo으로 이동하는 경우로 

    location.href="../FileTwo" 라고 설정해주면 된다.  

    ../ 은 현재 위치의 상위폴더를 의미한다. 만약 두단계 상위 폴더로 가고 싶다면 ../../ 

      - 현재 페이지 : http://xxx.xxx.xxx.xxx/xxxx/i/haha/FilOne

      - 이동 후 페이지 : http://xxx.xxx.xxx.xxx/xxxx/i/FileTwo


loction.href을 사용해서 어떻게 어디로 이동하는지에 대해 내용을 정리해 보았다.


이를 통해 우리는 역으로 location.href="~~"라는 코드를 보고 어디로 이동하지도 알 수 있을 것이다.

예를 들면 location.href="FileTwo" 라는 코드를 보고 기준 파일의 경로를 기준으로 같은 디렉토리내의 파일인 FileTwo로 이동하는 것을 알 수 있으며 기준 페이지의 url이  https://xxx.xxx.xxx.xxx/xxxx/i/index.html 였다면  http://xxx.xxx.xxx.xxx/xxxx/i/FileTwo로 이동하는 것 또한 알 수 있다.


Create by Gae Ko


'WEB > Web' 카테고리의 다른 글

Proxy 서버와 조작  (0) 2017.12.18
base64  (0) 2017.11.06
자바스크립트 용어  (0) 2017.10.28
아스키 코드(ASCII)  (0) 2017.10.16
javascript indexOf 함수와 lastindexOf 함수  (0) 2017.09.25

+ Recent posts