Root-Me 25

[root-me] CSRF - 0 protection

CSRF(Cross-Site Request Forgery) 문제. register를 통해 가입 후, profile을 보면 status라는 체크박스가 보인다. 하지만 체크할 수 없도록 되어 있다. "You are not an admin"이라는 메시지가 나오는데, admin 권한으로만 설정이 가능한 듯 하다. Contact탭을 보면 admin에게 메시지를 날릴 수 있는데, 여기서 CSRF를 이용하면 된다. 내가 사용한 스크립트는 아래와 같은데, Profile 탭에서 소스를 가져오고 필요한 부분 외에는 다 잘라냈다. 추가적으로 document."form name".submit() 스크립트문을 추가해주면 된다. 스크립트를 Comment부분에 넣고 Submit하면 잠시 후 관리자에 의해 스크립트가 실행되면서 Pr..

WebHacking 2020.01.06

[root-me] PHP preg_replace()

e modifier 취약점 문제. 찾아보니까 real world에서는 대부분 패치되어 이용하기 힘든 취약점이라고 한다. preg_replace함수는 특정 문자열을 필터링할 수 있는 함수인데, /e 옵션을 넣어주면 "치환되는 문자"부분을 php코드 그대로 해석해준다. 즉, php코드로 실행시킬 수 있다는 말이 된다. search부분에는 /[0-9]/e 로 /e옵션을 줬고, replace부분에는 원격 파일을 읽을 수 있는 방법 중 하나인 file_get_contents('flag.php'); 를 입력했다. content부분에는 숫자 1을 입력해줘서 문자열이 치환되도록 했다. *fopen함수를 이용해서 읽었을 때는 resource id #2 라는 문구가 출력됐는데, 나중에 좀 더 알아보자.

WebHacking 2020.01.06

[root-me] PHP Loose Comparison

바로 소스코드를 확인할 수 있으니 확인해보자. 간단하게 요약을 하면, sanitize_user_input함수는 preg_replace를 가지고 필터링을 한다. preg_replace("[검색 패턴]","[바꿀 패턴]","[기존 문장]")으로 사용이 되는데, preg_replace($re, "", $input); 라는 의미는 사용자가 입력한 값에 $re(='/[^a-zA-Z0-9]/) 부분이 있으면 ""로 바꾸겠다는 의미. 즉, 입력값에 영어나 숫자가 아닌 다른 값이 있으면 없애버리겠다는 의미이다. 이 함수를 거쳐 seed값이 필터링된다. secured_hash_function함수는 입력값을 받아 위처럼 필터를 거친 뒤, md5로 인크립트하는 과정이 추가되어 있다. 즉, md5 encrypt되는 값은 se..

WebHacking 2020.01.06

[root-me] Local File Inclusion - Double encoding

LFI문제이다. 문제에서 더블 인코딩이라고 표현했으니 아마 서버쪽에서 한 번 디코딩을 하는 과정을 거치기 때문에, 한 번만 인코딩을 하면 필터에 걸릴 가능성이 높을 것이다. 일단 첫 화면에서 아무 섹션이나 누르면, page=contact 형태로 url에 인자가 들어간다. 먼저, 파일을 찾기 위해 간단하게 url에 ../로 입력을 줘본다. Attack detected. 아무래도 '.'이나 '/'를 필터링한 듯 하다. LFI문제니까 PHP Wrapper를 이용한 접근을 한다. php://filter/convert.base64-encode/resource=home을 URL인코딩 두 번을 거쳐서 URL에 입력해준다. 그렇게 하면 PD9waHAgaW5jbHVkZSgiY29uZi5pbmMucGhwIik7ID8+Cj..

WebHacking 2020.01.06

[root-me] Local File Inclusion

LFI문제. 서버 내에 저장된 파일을 열면 된다. 힌트는 딱히 없고, admin섹션에 접근하면 될 것 같다. 일단 맨 처음 화면에서 아무 디렉터리나 들어가보면, URL이 files=archives로 입력되는 것을 볼 수 있다. 디렉터리를 살펴보면 index.html파일이 많은데, 힌트는 얻을 수 없다. 그래서 그냥 무시하고 상위 디렉터리로 넘어간다. 여기서 files=../로 입력해줘서 상위 디렉터리로 이동한다. 우리가 원하는 admin섹션을 볼 수 있다. 여기서 admin섹션을 "클릭"하면, 아무것도 볼 수 없다. 그래서 URL에 files=../admin으로 입력해줘서 접근한다. admin디렉터리 안에는 index.php라는 php파일이 있는데 이를 열어 소스코드를 보면 admin계정의 패스워드(fl..

WebHacking 2020.01.06

[root-me] PHP register globals

우선, register_globals이 뭔지부터 알아보자. register globals는 internal PHP setting이다. 서버에 액세스하는 방법을 제어하며, ON상태와 OFF상태가 있다. 디폴트 값은 OFF이다(보안 문제 때문). ON상태 - Global배열( GET[], POST[], REQUEST[] 등) 없이 양식 속성에 액세스 가능 OFF상태 - Global배열을 통해서만 모든 속성에 액세스 가능 OFF 상태인 경우, Global배열을 이용해서 파라미터를 받으면 액세스가 가능하다. 아무래도 보안에 취약한 점을 이용해서 문제를 냈을테니까, register globals가 ON상태임을 예상할 수 있다. 먼저, 힌트에서 준 백업 파일을 찾아보자. 패스워드가 어떤 방식으로 인증을 거치는지 알..

WebHacking 2020.01.06

[root-me] File upload - MIME type

php 파일 업로드 취약점. 우선, MIME타입에 대해서 알아보자. MIME : Multipurpose Internet Mail Extensions 보통 파일을 검사할 때 파일의 확장명으로 구분하는데, 여기서는 HTTP Response에 정의된 Content-Type Header값을 이용하여 인터넷 상의 파일을 특성 및 형식에 따라 식별하는 방법을 말한다. 간단히 말해, 확장자 말고도 파일을 검증할 방법이 있다는 소리이다. double extention 취약점이 통하지 않을 것을 예상할 수 있다. php코드를 짜서 .php파일로 업로드 시켜보자. 잘못된 확장자라고 출력된다. 이번엔 double extension을 이용해보자. .php.png로 php코드를 짜서 업로드 시키면, 업로드는 정상적으로 되는데 ..

WebHacking 2020.01.06

[root-me] PHP filters

PHP filter? 사용자 입력과 같은 안전하지 않은 소스로부터의 데이터를 유효성 검사 및 필터링할 때 이용. 화면에서 home을 눌렀을 때, inc=accueil.php login을 눌렀을 때, inc=login.php로 URL을 받는 것을 확인할 수 있다. 파라미터로 php파일을 받아서 실행시키는 것인데, 파라미터에 ../ 를 넣어보도록 한다. Warning 문구가 출력된다. include()함수에 뭔가 문제가 있는 것 같고, failed to open stream: Operation not permitted in /challenge/web-serveur/ch12/ch12.php 같은 문구가 출력됨을 확인할 수 있다. inc=ch12.php로 넣어주면 처음 화면과 같은 화면이 나온다. 이쯤에서 필터..

WebHacking 2020.01.06

[root-me] File upload - null byte

php null byte 인젝션 취약점에 대한 문제. double extension과 비슷한 문제라서 일단 비슷하게 코드를 만들었다. 를 notepad로 작성하고, 확장자는 test.php.png로 저장한다. 문제의 의도대로 이미지 확장자(png)만 업로드가 가능하며, 이를 우회해야 한다. 이번 문제에서는 double extension으로 우회가 불가능하다. 경고문구로 Wrong filename과 Wrong file extension이 있다. 널 바이트를 이용해 우회를 해줘야 하는데, 버프스위트로 파일을 올리는 과정을 잡았다. HEX값에 0x00을 삽입해 우회하려 했으나,, 잘 안됐다. 그래서 그냥 raw에 있는 filename.php.png 형태로 만들어 null byte를 삽입해서 flag를 얻을 수..

WebHacking 2020.01.06

[root-me] File upload - double extensions

삽질 문제에서 PHP 코드를 업로드하라고 한다. 그런데 게시판에는 이미지 파일만 업로드 할 수 있도록 png,jpg등의 확장자 파일만 올릴 수 있도록 필터링을 해둔 것 같다. 문제 제목에서 유추할 수 있듯이, double extention을 이용한다. file_name.php.png 와 같이 확장자를 두 번 쓰게 되면 우회가 가능하다. 그렇다면 php 코드를 노트패드에 작성해서 확장자를 .php.png로 저장하고 업로드하면 될 것으로 보인다. 간단하게 로 작성해서 업로드한다. 파일 경로를 따라 들어가보면, php코드가 정상적으로 실행이 됨을 알 수 있다. 이제 비슷한 방법으로 웹 쉘 코드를 작성해서 .passwd파일이 어디에 있는지를 찾아서 읽어내면 된다. Command Injection을 이용해 문제를..

WebHacking 2020.01.06