반응형

Root me - CRLF 문제를 풀어보았습니다. 왠지 쉬운 것 같으면서도 안풀려서 오랫동안 방치해 놓았는데,

이번에 결국 풀었습니다..ㅜㅜ(별거 아니더라구요,, 반성,,)

 

우선, 문제에 들어가면 로그인 인증을 위해 ID와 PW를 받는 입력창이 보입니다.

그리고 그 하단에는 인증 로그가 출력되어 있죠.

이 로그를 통해 admin 계정은 존재한다...를 알 수 있겠죠?

 

그래서 ID와 PW에 admin / admin 을 입력하고 로그인 시도 해봤더니, 역시 failed to authenticate 가 뜨네요.

 

원래는 문제가 CRLF 내용이라서 CRLF Injection을 검색해서 시도해보았는데요, 

이 문제의 핵심은 CRLF Injection이 아니라 Log Injection이었습니다...ㅜㅜ

 

CRLF(Carriage Return Line Feed) 란?

 

-줄 바꿈(개행)을 의미하는 컨트롤 캐릭터

-CR은 0x0D LF는 0x0A

-윈도우에선 CRLF(\r\n), UNIX에선 LF(\n) 사용

 

CRLF에 대해 간단하게 알아보았고, 문제를 풀어보겠습니다.

https://medium.com/@shatabda/security-log-injection-what-how-a510cfc0f73b

 

링크의 자료를 이용하여 문제를 풀었습니다.

가짜 레코드, 즉 성공적인 로그인 이벤트를 삽입하여 로그를 위조할 수 있다는 내용이었습니다.

 

그래서 성공적인 로그인 이벤트(admin authenticated.) 문자열과 개행(CRLF)를 이용하여

정상적인 로그 이벤트와 위조한 로그인 이벤트, 2가지가 출력되는 것이죠.

 

결과는 이렇게 출력됩니다. 아래에 Flag 값까지 출력되었군요ㅋㅋ 문제해결!

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] XPath injection - authentication  (0) 2019.07.25
[root-me] SQL Truncation  (0) 2019.07.18
[root-me] Javascript - Obfuscation1  (0) 2019.04.15
[root-me] Javascript - Authentication2  (0) 2019.04.15
[root-me] Javascript - Source  (0) 2019.04.15

반응형

Javascript Obfuscation 문제입니다. 원래 Obfuscation 뜻을 몰랐는데 이번에 찾아보고 알았습니다.

난독화라는 뜻이더군여..ㅋㅋㅋ 즉, 자바스크립트 난독화 문제입니다.

 

자바스크립트는 소스보기를 통해 쉽게 유출되기 때문에 난독화 적용을 주로 하고 있는데, 요즘에는 워낙 알려진 난독화방법이 많아 그만큼 쉽게 복호화되기도 합니다.

 

문제를 풀어보겠습니다. 역시나 밑도 끝도 없이 비밀번호를 입력하라는 창이 뜨네요.

 

소스를 보면 패스워드가 요상한 문자로 되어있는 것을 볼 수 있습니다. 

하지만 URL Encoding으로 단순 인코딩되어있다는 느낌이 오네요.

 

URL 디코더로 해당 문자열을 복호화 시키면 평문으로 Flag값을 획득할 수 있습니다.

 

URL 디코더는 Burp Tool을 써도되고 online tool을 써도 무방합니다.

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] SQL Truncation  (0) 2019.07.18
[root-me] CRLF  (0) 2019.07.18
[root-me] Javascript - Authentication2  (0) 2019.04.15
[root-me] Javascript - Source  (0) 2019.04.15
[root-me] Javascript - Authentication  (0) 2019.04.15
반응형

역시 Javascript 문제입니다.

 

문제 들어가보니 그냥 달랑 로그인 버튼밖에 없네요. 일단 소스보기를 해봅니다.

 

이 곳에도 login.js 파일을 참조하고 있습니다. 해당 파일을 열어봅니다.

 

username이 TheUsername이고, password가 ThePassword일 때, 로그인 인증이 가능한데

 

위에서 TheUsername과 ThePassword를 TheSplit 배열에서 가져오고 있습니다.

 

근데 또 TheSplit 배열은 TheLists 리스트를 문자열로 자른거네요. 그러니까 GOD이 아이디, HIDDEN이 패스워드가 되는 거죠.

 

어차피 패스워드를 인증값으로 받고 있어서 로그인 해보지는 않았습니닿ㅎㅎ

 

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] CRLF  (0) 2019.07.18
[root-me] Javascript - Obfuscation1  (0) 2019.04.15
[root-me] Javascript - Source  (0) 2019.04.15
[root-me] Javascript - Authentication  (0) 2019.04.15
[root-me] HTML - disabled buttons  (0) 2019.04.15
반응형

Javascript 소스 문제입니다.

 

문제에 들어가니 패스워드 입력 창밖에 나오지 않네요.

 

문제도 그렇고... 우선 소스 보기를 해봅니다.

그냥...패스워드가 나와있군여. 저걸로 인증하면 패스!

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] Javascript - Obfuscation1  (0) 2019.04.15
[root-me] Javascript - Authentication2  (0) 2019.04.15
[root-me] Javascript - Authentication  (0) 2019.04.15
[root-me] HTML - disabled buttons  (0) 2019.04.15
[root-me] Path Truncation  (0) 2019.02.26
반응형

자바 스크립트 문제이다.

 

문제에 들어가보니, 로그인 폼이 있어서 그냥 아무 값이나 넣어서 로그인 시도를 해보았다.

 

음... 당연히 로그인이 안되네요..ㅎ

 

우클릭해서 소스보기를 해보았습니다!! 그랬더니 소스 상에 login.js 파일을 참조한다고 나오는군요.

 

login.js 파일 분석을 해봅니다. id가 4dm1n이고 password가 sh.org일 경우 정상적으로 로그인이 된다는 로직입니다.

 

로그인을 시도해보면,

 

패스워드가 Flag 값이라는 소리군요. 대충.. 사실 이 과정 필요없이 바로 login.js에서 패스워드 확인 후 Flag 인증을 해도 아무 상관 없습니다!ㅎㅎ 

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] Javascript - Authentication2  (0) 2019.04.15
[root-me] Javascript - Source  (0) 2019.04.15
[root-me] HTML - disabled buttons  (0) 2019.04.15
[root-me] Path Truncation  (0) 2019.02.26
[root-me] SQL Injection - GBK  (0) 2019.02.21
반응형

아직 웹 서버 문제도 못 풀었지만, 클라이언트 문제라도 빨리 풀어버리고 싶어서... 시작해보았다.

 

첫번째 문제는 HTML 문제이다.

 

문제에 들어가보면 비활성화된 입력 폼과 버튼이 있는 화면이 뜨는데, 아마 이걸 활성화해서 보내면 되는 거겠지?

 

웹 프록시 도구에서 전송된 응답 값에서 입력 폼과 버튼 부분을 찾아, 그 곳에 "disabled" 속성이 있길래 이걸 그냥 삭제해보았다.

 

그랬더니, 정상적으로 입력 창과 버튼이 활성화 되었다. 그냥 임의의 값을 써서 보내보니,

 

Flag 값이 나왔다!

 

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] Javascript - Source  (0) 2019.04.15
[root-me] Javascript - Authentication  (0) 2019.04.15
[root-me] Path Truncation  (0) 2019.02.26
[root-me] SQL Injection - GBK  (0) 2019.02.21
[root-me] Server-side Template Injection  (0) 2019.02.08
반응형

우선, 엔디언이란  컴퓨터 메모리 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법이다.(출처-위키백과)

 

그 중에서 바이트 순서(바이트 오더)를 설명하는 용어를 "빅엔디언", "리틀엔디언"으로 나눌 수 있다.

 

엔디언(Big-Endian)은 바이트 열에서 가장 값이 먼저 저장되고,

리틀엔디언(Little-Endian)은 바이트 열에서 가장 작은 값이 먼저 저장된다.

 

위의 그림과 같이 빅엔디언 형식은 상위 바이트의 값(바이트 열에서 가장 큰 값)이 메모리의 시작주소에 먼저 저장되고,

리틀엔디언 형식은 하위 바이트의 값(바이트 열에서 가장 작은 값)이 메모리의 시작주소에 먼저 저장된다.

 

우리가 자주 사용하는 인텔(Intel)계열 프로세스는 리틀엔디언 형식으로 데이터를 저장하고 있으나, CPU간 데이터 전송을 위해 데이터를 전송할 경우에는 빅엔디언 형식으로 변환하여 전송한다.

 


01111011 10010101

 

예를 들어 위와 같이 2Byte, 즉 16bit의 값이 있다고 가정했을 때,

 

빅엔디안 순서로 읽으면 0x7B95 이고, 리틀엔디안 순서로 읽으면 0x957B가 되는 거죠.

반응형

반응형

1. 개요


파일업로드 취약점 발견 시 파일 확장자 필터링을 하는 경우가 많은데, 이를 우회하는 방법(화이트리스트가 아닐 경우)을 정리한다.


2. 우회방법


#1. 대소문자 치환 ; .jsp → .Jsp / .jSp / .jsP / .JsP 등.....


#2. Null byte ; .jsp%00.jpg / .jsp%00(URL Encoding).jpg 등...


#3. 2중 파라미터 ; filename=test.jpg, filename=test.jsp


#4. MIME Type만 검증하는 경우 ; ContentType=image/jpeg 등...


#5. 실행가능한 타 확장자 ; .jsp → .jspx / .jsv / .jsw

IBM 서버인 경우, jsp외 jspx, jsv, jsw 확장자를 디폴트로 실행 가능하게 설정하고 있다고 합니다.

출처 >> https://www.ibm.com/support/knowledgecenter/ko/SSAW57_9.0.0/com.ibm.websphere.nd.multiplatform.doc/ae/rweb_jsp_staticfile.html


[jsv] Hello World 출력

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

<% out.println("Hello World"); %> // jsp 문법과 같음

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

[jspx] Hello World 출력

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" xmlns="http://www.w3.org/1999/xhtml" xmlns:c="http"//java.sun.com/jsp/jstl/core" version="2.0">

<jsp:directive.page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"/>

<jsp:directive.page import="java.util.*"/>

<jsp:directive.page import="java.io.*"/>

<jsp:directive.page import="sun.misc.BASE64Decoder"/>

<jsp:scriptlet><![CDATA[out.println("Hello World");]]>

</jsp:scriptlet>

</jsp:root> // jspx는 CDATA로 감싸줘야함

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

[jspx] Hello World 출력2 // import 삭제

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0">

    <jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>

    <jsp:scriptlet>

        out.println("Hello World!!");

    </jsp:scriptlet>

</jsp:root>


3. 대응방안


#1. 화이트리스트 ; 허용된 확장자 파일만 업로드 가능하도록 함.


#2. 업로드경로 ; 업로드 디렉터리를 웹루트 이외로 설정. 혹은 웹루트 하위의 서버 사이드 스크립트 실행 권한 제거


#3. 랜덤 파일명 ; 업로드된 파일명을 난수화하여 유추 불가능하도록 한다.

반응형

+ Recent posts

반응형
반응형