반응형

CTF 81

[Web Hacking] WebGoat Blind XXE 개념

※ Blind XXE 어떤 경우에도 공격이 성공하더라도 결과가 보이지 않는 경우가 있다. 혹은 읽으려고 하는 자료에 XML 파서에서 오류를 일으키는 문자가 포함되어 있을 수 있다. 예시를 통해 알아보자. 여기서는 외부 DTD를 하나 참조하는데 이것은 공격자의 서버(WebWolf)에서 통제가 가능한 특징이 있다. 당신은 공격자로서, WebWolf 서버를 통제할 수 있다.(동일한 기능을 할 수 있다면 굳이 WebWolf가 아니여도 상관없다) 한 가지 예를 들면, 이 서버의 랜딩 페이지인 "http://192.168.219.100:9090/landing"에 연결을 시도하면 클라이언트의 흔적을 남길 수도 있다. 그럼 어떻게 이를 활용하여 XXE 공격을 할 수 있을지 고민해보자. "attack.dtd"라는 파일을..

[Web Hacking] WebGoat XXE Modern REST framework 문제풀이

※ Modern REST framework 최신의 REST 프레임워크를 사용하는 서버의 경우, 개발자가 생각하지 못한 형태의 데이터(요청 메시지)를 받아들이는 경우도 있다. 이에 따라 JSON 엔드포인트(서버에서 JSON 형식의 데이터를 받아 처리하는 부분)는 XXE 공격에 취약할 수 있다. 해당 문제에서는 이 프레임워크로 서버용 웹 어플리케이션을 개발하는 경우, 클라이언트와 JSON 객체의 형식으로 메시지를 주고 받을 수 있고, 개발 의도와 무관하게 클라이언트가 JSON 객체가 아닌 형태로 요청 메시지를 보내도 서버 측에서는 그것을 받아들일 수 있다는 정도로 생각하면 된다. 문제의 힌트를 열어보게 되면 content type를 살펴보라고 나와있다. Content-Type을 살펴보면 application..

[Web Hacking] XML 외부개체(XXE Injection)

※ XML 외부 개체(XXE) XXE는 악의적인 자바스크립트를 막기 위한 필터장치를 우회하는 취약점으로 XML 문서에서 동적으로 외부 URI의 리소스를 포함시킬 수 있는 외부 엔티티(Entity)를 사용할 때 발생한다. 오래되고 설정이 엉망인, 많은 XML 프로세서들은 XML 문서 내에서 외부 개체 참조를 평가한다. 외부 개체는 파일 URL 처리기, 내부 파일 공유, 내부 포트 스캔, 원격 코드 실행과 서비스 거부 공격을 사용하여 내부 파일을 공개하는데 사용할 수 있다. ※ XXE Injection 일반적으로 잘못 구성된 XML Parser를 사용하여 신뢰할 수 없는 XML 공격 코드를 주입시켜 실행시키는 응용프로그램에 대한 공격을 말한다. 해당 공격을 통해서 주요 시스템 파일 접근(LFI)이나 외부 악..

[wargame.kr] md5 password

207point인 md5 password 문제를 풀어보자. 첫 화면은 password를 입력할 수 있는 부분과 소스코드를 볼 수 있는 창이 있다. 쿼리문을 살쳐보면 입력받은 password값을 md5로 처리해서 쿼리의 결과를 반환하는 것 같다. 그리고 결과값이 $row 변수에 들어있으면 $key값을 echo하여 화면에 출력해주게 된다. 해당 문제는 md5의 취약점을 이용한 문제인 것으로 판단되며, md5함수의 취약점에 대해 알아보자. - md5(string $str, [bool $raw_output=false]) $str 해쉬값을 구할 문자열 $raw_output true 로 설정하면, 결과값이 16자로 만들어준다. 설정하지 않을 경우, 32자의 길이를 가진다. default는 false이다. MySQL..

[wargame.kr] login filtering

132point인 login filtering을 풀어보자. 문제에서는 계정이 있지만 block 상태라 하고 있다. login을 우회 가능한지 묻는 문제인 것 같다. 이제 시작해보자. - mysql_real_escape_string : mysql query에서 특수 문자열을 이스케이프하기 위해 사용 - trim() : 시작 문자와 끝 문자에 공백(또는 특수문자)을 포함하고 있으면, 제거한 문자열을 반환 특수문자가 이스케이프처리 되어 버리기 때문에 Injection을 시도할 수 가 없다. PHP는 문자열 비교에 있어서 대소문자를 구별하지만, MySQL은 기본적으로 대소문자를 구분하지 않는다. 그러므로, block처리되어 있는 계정의 아이디 값을 대문자로 넣어 인증 우회를 시도해보자. Guest / guest..

[wargame.kr] QR CODE PUZZLE

111point 인 QR CODE PUZZLE문제를 풀어보자. 문제에 들어가면 QR 코드가 뒤죽박죽 섞여있는 모습을 볼 수 있다. 소스를 살펴보면 자바스크립트의 unescape 함수를 확인할 수 있다. - escape() : URI로 데이터를 전달하기 위해서 문자열을 인코딩 - unescape() : escape를 통해서 만들어진 URI 이스케이핑을 디코드 콘솔에 unecape함수의 코드를 실행해보면 "./img/qr.png"의 파일 경로가 나온다. 해당 경로로 접을 해보면 QR Code 가 나온다. QR 코드 인식 App을 이용해 스캔하면 http://http://wargame.kr:8080/qr_code_puzzle/Give_M3_th7_F1aG.php 주소가 나오게 된다. 해당 URL로 접근하면 F..

[wargame.kr] flee button

84point인 flee button 문제를 풀어보자. 문제에 들어가보면 clik me! 버튼을 누르라고 하고 있는데 마우스로의 움직임이 클릭이 안되게끔 만들어져 있다. 소스 코드에서 힌트를 살펴보도록 하자. 자바 스크립트 코드가 난독화 되어 있는 것으로 보인다. 해당 unescape_blue14 함수 안에 들어있는 난독화된 코드를 개발자 도구 콘솔에 넣어 실행해보자. 총 2번에 걸처 unescape_blue14 함수를 실행해보면 최종적으로 다음과 같은 코드가 나온게 된다. "" onclick="window.location='?key=11f5';" onclick 속성의 window.location를 통해 url뒤에 ?key=11f5 파라미터를 보내보도록 하자. FLAG 값을 확인할 수 있다. 해당 값을 ..

[wargame.kr] already got

81 point인 already got 문제를 풀어보자. 문제를 클릭하게 되면 HTTP 응답 헤더를 확인했는지 물어본다. Start 버튼을 누르게 되면 이미 key를 획득했다는 문자열이 반환된다. 프록시를 이용해 응답 헤더를 살펴보도록 하자. 헤더부에 FLAG 값이 들어 있는 것을 확인했다. 해당 값을 제출해보도록 하자. 문제가 정상적으로 풀리는 것을 확인할 수 있다.

반응형