WebHacking 42

[webhacking.kr] 25번

리눅스에서 볼 수 있는 화면임. 위의 URL창을 보니 file=hello 이 디폴트로 설정돼있음. index, index.php, password, password.php를 입력해보았으나 hello world만 계속해서 나오는 상태임. 확장자 .txt를 디폴트값으로 설정해놨기 때문일 것이라고 유추할 수 있다. 따라서 문자열의 끝을 알리는, NULL값을 url인코딩한 을 붙여 뒤에 붙을 .txt를 무시해버리도록하자. 따라서, file=password.php 과 같이 입력하면 클리어. *리눅스의 특징 - 확장자랑 관련 없이 이름만 같으면 파일을 읽을 수 있다. 그러나 여기서는 웹 해킹 문제이므로, .php 확장자를 입력해주어야 비밀번호를 얻을 수 있다.

WebHacking 2020.01.06

[webhacking.kr] 24번

index.phps를 통해 나온 힌트 ip = 127.0.0.1이면 클리어 되는듯 버프스위트로 프록시 설정후 아이피 127.0.0.1로 접속하면 될 것이라 예상했으나 안됨 소스 다시 보니 REMOTE_ADDR이라는 쿠키에 있는 아이피를 가져와서, 12, 7. 0. 이 있으면 공백으로 변환시켜버림 일단 EditThisCookie로 쿠키 추가 - REMOTE_ADDR 이라는 쿠키 생성. 127.0.0.1로 만들어서 새로고침하면 소스에 있는 if문에 의해서 다 짤려나감. 우회하기 위해 REMOTE_ADDR을 112277..00..00..1 로 바꿔주고 새로고침, 클리어.

WebHacking 2020.01.06

[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