본문 바로가기

4-9. 2020-2 심화 스터디/웹 퍼저

[2020.09.19] Web Fuzzing

Web Fuzzer 팀은 이번주차에 취약점 분석을 위한 퍼징 및 Microsoft 문서를 학습하였다.

  • 취약점 분석을 위한 퍼징 : 2. Web Fuzzing
  • Automated Penetration Testing with White-Box Fuzzing : Defect Types Found with Fuzzing ~ Fuzzing Process

<취약점 분석을 위한 퍼징 : 2. Web Fuzzing>

[질의응답]

1. Injection SQL, parameter

  • 질문 : [예제1]에서 입력된 데이터가 ' or 1=1 'or 1=1 이라면 , 1=1 은 무조건 참인데, 이렇게 될 경우 이 코드가 공격에 성공하는 이유는?
[예제1 : SQL Injection에 취약한 로그인 인증 코드]
String param1 = request.getParameter ("user_id");
String param2 = request.getParameter ("user_pass");

rs = stmt.excuteQuery ("SELECT count(*) FROM user_t WHERE userid = '"+param1+"' AND userpw = '"+param2+"'"); 
rs.next ();
if (rs.getInt (1) == 1)
{
        // 로그인 성공
}
else
{
       //로그인 실패
}
  • 대답 : ' or 1=1 'or 1=1의 경우, 1=1은 항상 참인 값이 입력된 것이기 때문에 로그인에 성공하게 된다.

 

2. 유형별 퍼징 방법 - XSS, Injection SQL, parameter

  • 질문 : GET 방식의 경우는 아래와 같은 형식으로 패킷을 생성한 뒤 목적지 페이지를 GET 방식으로 요청한다. 각 파라미터의 값은 ‘sql 이나 “>XSS 와 같은 에러가 발생할만한 데이터를 넣는다. 이 때 다음의 코드가 공격에 성공하는 원리가 어떻게 되는 것인가?
[예제 2 : GET 방식 요청]
GET DEST?[Parameter_name]=’sql /HTTP/1.1 HOST : DEST
  •  대답 : 'sql 이나 '>XSS의 경우 '(따옴표)가 올바르게 닫히지 않았기 때문에 구문 오류(syntax error)가 발생하면 에러 핸들링이 적절히 되지 않았다는 것을 알 수 있다. 

 

 

 

3. HTTP 헤더 “200 OK”의 의미

<유형별 퍼징 방법>
(1) XSS, Injection SQL, parameter
form태그를 파싱하여 파라미터에 'sql 이나 ">XSS 등의 에러가 발생할만한 데이터를 삽입하여 패킷을 생성한다.
GET, POST 방식에서 요청 후 전송되어온 패킷을 분석 하여 HTTP헤더가 "200 ok"를 포함하면 에러 핸들링이 적절히 된 것이다. 
(2) 서버 인증 우회
POST, GET 이외의 메소드(PUT, OPTIONS, HEAD 등)로 해당 페이지에 요청을 했을 때 "200 ok"를 포함하면 해당 메소드로 요청시 인증 우회가 가능할 것으로 판단할 수 있다. 

  • 질문 : 같은 결과임에 불구하고, 다르게 해석하는 이유가 무엇인가?
  • 결과 : (1)과 (2) 모두 "200 ok"를 리턴하지만, (1)의 경우는 에러 메시지를 삽입했을 때 정상적인 연결을 한 것이므로 에러 사항을 필터링한 것이지만, (2)의 경우 권한이 없는 사용자가 인증 우회를 하여 요청했음에도 불구하고 정상적인 연결이 된것이므로 취약하다고 할 수 있다.

<Automated Penetration Testing with White-Box Fuzzing : Defect Types Found with Fuzzing ~ Fuzzing Process>

[요약]

1. 퍼징: 보안 버그 중 가장 심각한 부분을 차지하는 코드에서 결함을 찾아내는 체계적인 방법 

2. 퍼징으로 찾을 수 있는 결함: 원격 코드 실행(buffer overruns), 영구 서비스 거부(unhandled exceptions, read AV, thread hangs) 및 임시 서비스 거부(leaks, memory spikes)를 찾을 수 있다. 
퍼징은 버퍼경계 유효성 검사뿐만 아니라 상태기계 논리, 오류처리, 정리코드 결함도 찾아낸다.

3. 퍼징 분류 체계

 

 

[출처]

부경대학교 CERT-IS - 취약점 분석을 위한 퍼징

hisjournal.net/doc/[KUCIS_Project]_Fuzzing_for_Finding_Vulnerabilities_by_CERT-IS.pdf

github.com/Funniest/Easy_fuzzer

 

Funniest/Easy_fuzzer

fuzzer study, use ptrace. Contribute to Funniest/Easy_fuzzer development by creating an account on GitHub.

github.com

Microsoft Document - Automated Penetration Testing with White-Box Fuzzing

https://docs.microsoft.com/en-us/previous-versions/software-testing/cc162782(v=msdn.10)?redirectedfrom=MSDN

 

Automated Penetration Testing with White-Box Fuzzing

Automated Penetration Testing with White-Box Fuzzing 10/14/2009 20 minutes to read In this article --> John Neystadt Microsoft Corporation February 2008 Summary: This article covers how to employ a white-box testing approach to fuzzing, leveraging availabl

docs.microsoft.com