흐음.. 몰까.. admin 제출을 누르면 위의 그림과 같은 화면과 함께 시간이 지나면 refresh 된다. 여기서 알 수 있는 것은 id=admin으로 GET형식으로 받아온다는 것 정도? test라는 값을 입력했을때 login이 되는 것을 확인할 수 있다. 스크립트 코드를 확인해 보았지만 힌트가 될 만한 단서는 없었다. 그래서 쿠키 값을 확인해 보았다. 그냥 저대로 basse64 디코더를 돌려봤는데 값이 나오지 않았다. 그러고 보니 %3D가 = 이기때문에 이걸 변경해서 base64로 디코딩 해보니 e358efa489f58062f10dd7316b65649ee1671797c52e15f763380b45e841ec3203c7c0ace395d80182db07ae2c30f034e358efa489f58062f10d..
사용된 공격기법 : LFI(Local File Inclusion) 25번 문제를 실행했다. 문제를 보면 여러가지 파일 및 디렉토리의 권한 및 정보가 나와있다. url을 확인해 보니 file=hello라고 되어 있는 것을 확인할 수 있다. url 에 파일명을 입력하기 때문에 GET방식으로 파일을 받아오는 것을 알 수 있다. file=flag를 입력해보니 밑의 그림과 같이 다른 내용이 뜨는 것을 확인 할 수 있다. flag.php파일의 내용이 textarea부분에 출력되고, .php가 생략되어서 실행되는 것으로 추측할 수 있다. 실제로 hello.php와 flag.php 를 실행했을때도 textarea에 출력되는 동일한 값이 출력되는것을 확인할 수 있다. 여기서 주어진 힌트는 FLAG is in the co..
38번을 실행하면 밑의 그림과 같다 해당페이지에서는 확인 할 수 있는 것들이 없으니 F12를 사용하여 스크립트를 확인했다. 코드를 확인해 보면 스크립트는 확인할 수 없고 admin.php페이지로 가라는 힌트를 확인할 수 있다. admin.php 화면으로 이동해 보면 login 의 로그로 보이는 화면을 확인할 수 있다. admin을 넣으면 문제가 해결될것 같지만 실제로 admin을 넣으면 you are not admin의 값을 반환한다. 밑의 그림과 같이 가장 밑에 내가 로그인한 로그를 확인할 수 있다. 로그가 위에서 아래로 순서대로 log viewer에 출력되는 것을 보니 CRLF Injection을 이용한 문제임을 추측할 수 있다. - CRLF Injection 이란? CRLF라는 용어는 캐리지 리턴 ..
24번을 실행하면 밑의 사진과 같다. wrong IP 라는 것으로 보아 IP 관련 문제인것으로 추측할 수 있다. 확인 할 수 있는 view-source 를 확인해보도록 한다. SERVER와 COOKIE의 정보를 받아오는 것을 확인 할 수 있다. $REMOTE_ADDR 는 웹서버에 접속한 접속자의 IP정보를 갖고 있다. $HTTP_USER_AGENT는 유저의 브라우저 접속환경을 파악하는데 사용 되어지는 변수이다. 이것으로 브라우저별로 스타일을 다르게 보여지게 하거나 필요한 동작을 요청할 수 있다. 어떤 문자들은 HTML에서 특별한 정의를 가지기에, 그 의미를 보존하려면, HTML 엔터티로 표현해야 한다. htmlspecialchars()이 함수는 문자열에서 특정한 특수 문자를 HTML 엔티티로 변환한다. ..
문제를 실행시키면 아래 사진을 확인할 수 있다. 확인 할 수 있는 것이 view-source뿐이니 view-source를 확인하도록 한다 소스코드를 확인해 보면 빨간색으로 표시한 박스 부분이 핵심 부분인것으로 추측할 수 있다. 여기에 사용된 preg_match() 함수는 해당 문자열에서 전달받은 정규 표현식과 일치하는 패턴을 검색한다. preg_match($pattern, $subject [,$matches]); 의 문법으로 사용된다. 따라서 admin 과 일치하는 $_GET['id'] 일 경우 no!를 알려주고 종료하고 $_GET['id']를 디코딩한 값이 admin과 같을 경우 문제를 해결하는 것으로 분석할 수 있다. 즉, admin을 인코딩한 값을 넣으면 문제가 해결될 것으로 추측할 수 있다. 따라..
16번의 문제를 확인하면 위의 그림을 확인할 수 있다. 별표와 작은 별표만 확인할 수 있다. 해당 화면에서는 확인할 수 있는 내용이 없기 떄문에 chrome의 F12를 이용하여 스크립트 코드를 확인해 보도록 한다. 빨간 박스 친 부분의 cd의 값들이 숫자로 나타나있는 것으로 보아 아스키코드라는 것을 추측할 수 있다. 따라서 100, 97, 119, 125, 124의 값들을 아스키 코드로 확인해 볼 수 있다. 각각 97 a, 100 d, 115 s, 119 w, 124 | 의 아스키고드의 값을 가지는 것을 확인 할 수 있고, 해당 키를 눌러 보았을때 밑의 그림과 같이 움직이는 것을 확인 할 수 있었다. cd=124 의 | (파이프)의 아스키 코드의 경우 location.href=String.fromChar..
14번 문제를 클릭하면 밑의 사진을 확인 할 수 있다. 검은화면에 입력창과 check로는 알 수 있는 것이 없기 때문에 chrome의 f12기능을 활용해서 script를 확인해 보도록 한다. check를 클릭하면 실행되는 ck() 함수 부분의 script를 확인해 볼 수 있다. 코드를 분석해 보면 function ck(){ var ul=document.URL; //문서의 URL을 ul에 할당 [URL: https://webhacking.kr/challenge/js-1/] ul=ul.indexOf(".kr"); // ul에서 .kr의 위치를 숫자로 변환 -> 19번째 이므로 18의 값을 가짐 ul=ul*30; // 18*30 = 540 if(ul==pw.input_pwd.value) { location.h..
1. Old-06 WriteUp 해당 문제를 클릭하면 밑의 그림과 같은 화면이 나타난다. 문제의 화면에서 view_source의 코드를 확인할 수 있다. 해당 코드는 2부분으로 나누어 설명하도록 한다. (1) 첫번째 부분 첫번째 부분의 코드를 분석해 보면, user 이름의 쿠키 값이 없다면 실행되는 것을 확인 할 수 있다. 이 때, guest와 123qwe값을 각각 20번 base64 인코딩 후 user, password의 쿠키 값에 설정된다. str_replace 함수가 있지만 base64값은 (0~9와 알파벳 대소문자, '+', '/' 그리고 '=') 문자로만 구성되어 있으므로, str_replace 함수를 신경 안써도 문제를 해결 할 수 있다. 실제로 guest를 base65 인코딩 20번한 결과값..
#06,14,17,18,26,38,54,16,24,39 제일 낮은 포인트를 가진 15번 문제를 먼저 해결하도록 하겠다. old.15번을 클릭하면 밑의 그림을 확인할 수 있다. falcon proxy를 실행시키고 burp suite를 사용하여 해당 내용의 패킷을 확인해 보겠다. "[Get Flag]"); 해당 코드를 해석해보면 getFlag의 url로 옮긴다라고 추측할 수 있다. alert을 지우고 forward를 해보면 [GET_Flag]의 하이퍼링크를 타고 들어간 후에 burp suit에서 forward를 재전송 하면 문제가 풀린것을 확인 할 수 있다.