본문 바로가기

Wargame/webhacking.kr56

webhacking.kr 53번 53번 문제를 보면 아래와 같이 hello world라는 문자열을 볼 수 있다. 힌트로 주어진 index.phps 는 아래와 같다. clear하기 위해서는 answer에 $hidden_table을 전달해야 한다. 이 때, mysql_fetch_array()의 결과를 echo()를 통해 출력하는 것을 볼 수 있다. 먼저 ?val=1을 해보면 위와 같이 test가 출력된다.select test1 from $hidden_table where test2=1의 결과이다. 여기서 test1의 값이 아닌 테이블의 이름이 출력되도록 하면 클리어할 수 있다. 따라서 mysql에서 제공하는 procedure analyse()를 이용한다. 출처: https://dev.mysql.com/doc/refman/5.6/en/pro.. 2019. 1. 29.
webhacking.kr 60번 [Race Condition] 60번 문제를 열면 아래와 같이 Access Denied라는 문자열이 보인다. Access Denied된 이유를 알기 위해 먼저 index.phps 코드를 보면 아래와 같다. 우선 쿠키 값에 숫자가 포함되어 있으면 Access Denied가 출력된다. clear()를 호출하는 조건은if($_GET[mode] == “auth”) 와 if(eregi(“$_SESSION”, $result)) 가 모두 참일 때 이다. if 문 바깥의 코드를 보면먼저 readme/$_SESSION[id].txt 파일을 생성한 뒤 $SESSION[id] 를 파일에 쓴다.그 뒤 $_SERVER[REMOTE_ADDR]이 “127.0.0.1”과 같지 않으면 1초간 sleep()한 뒤 파일을 unlink().. 2019. 1. 29.
webhacking.kr 43번 [File Upload] 43번 문제는 아래와 같이 webshell을 업로드하는 문제이다. 힌트는 file type이라고 한다. 먼저 test.php 파일을 업로드한 결과, 아래와 같이 access denied가 나온다. file type이 힌트이기에 확장자를 바꾸어test.png를 업로드하니 Done!이라는 메시지가 나오는 것을 볼 수 있다. 이 점을 활용하여 test.php 파일을 업로드하면 될 것으로 보인다. Burp Suite를 이용하여 test.png의 Content-Type을 확인해 보면아래와 같이 image/png인 것을 알 수 있다. test.php의 경우 Content-Type이 text/php이다.Content-Type이 image/png인 경우 업로드가 되는 것으로 보인다. 따라서 t.. 2019. 1. 29.
webhacking.kr 47번 Webhacking.kr#47[Mail Header Injection] 47번 문제를 보면 아래와 같은 화면을 볼 수 있다.제목을 통해 Mail Header Injection임을 알 수 있다. form의 method는 post이고, action은 index.php이다.힌트를 참고하여 index.phps를 보면 아래와 같다. 이 때 form을 통해 입력한 text가 mail()에서 header 정보 중 from으로 들어간다는 것을 알 수 있다. php에서 제공하는 mail()은 아래와 같다.아래에 보이는 것처럼 mail()의 역할은 메일을 보내는 것이다. (출처: http://php.net/manual/en/function.mail.php) 우리가 입력할 text가 들어갈 header에 관해 조금 더 자세.. 2019. 1. 29.
webhacking.kr 49번 [SQL Injection] 49번 문제를 열면 다음과 같다. 46번 문제와 매우 유사한 것을 볼 수 있다. 이번에도 form의 method가 get이고 action이 index.php이기 때문에 먼저 index.phps를 통해 코드를 볼 수 있다. 코드 또한 46번과 유사하다. 다른 점은 필터링의 대상이 더 많아졌다는 것이다. id가 admin이 되어야하는 것도 동일하다. 다만 46번에서 사용했던 or과 ()가 필터링 대상이 되었으므로 다른 방법으로 표현해야 한다. 먼저 char()를 이용할 수 없지만, 0x를 이용할 수 있으므로 16진수로 admin 문자열을 넘겨주고자 한다. 값은 아래를 참고하면 된다. or은 ||를 이용한다.따라서 입력할 값은?lv=2||id=0x61646d696e이 된다. 2019. 1. 29.
webhacking.kr 11번 [Regular Expression] 11번 문제를 보면 다음과 같은 화면을 볼 수 있다. Wrong이라는 문자열과 함께 정규식을 볼 수 있다. get으로 위의 정규식에 맞게 넘겨주면 clear할 수 있다. 가려진 부분은 ip에 해당한다. \t는 %09로 입력하면 된다. 실제 입력 값은 아래 그림과 같다. 2019. 1. 29.
webhacking.kr 34번 34번 문제를 보면 아래와 같은 3개의 script 코드를 볼 수 있다. 콘솔 창을 이용해 해당 스크립트를 실행해 보면 Wrong이라는 문자열을 출력하는 것을 볼 수 있다. 이 때, 마지막 script를 보면 if 문에 의해 Wrong을 출력하거나 Passw0RRdd.pww 페이지로 이동시키는 것을 볼 수 있다. 따라서http://webhacking.kr/challenge/javascript/Passw0RRdd.pww로 이동하면 패스워드를 얻을 수 있다. 이 값으로 인증하면 clear 된다. 2019. 1. 29.
webhacking.kr 22번 22번 문제를 보면 아래와 같은 화면을 볼 수 있다. 힌트를 보면 id가 admin이어야 패스워드를 출력하기 때문에username에 admin을 입력한 결과, Wrong!을 출력하는 것을 볼 수 있다.admin이라는 문자열을 직접 입력할 수 없는 것으로 보이므로 다른 방법으로 id에 admin을 넣어야 한다. 먼저 동작과정을 보기 위해 test로 로그인을 하였다. 그 결과, hi! test라는 메시지와 함께user key라는 이름으로 32바이트의 데이터가 출력된 것을 볼 수 있다.password로 입력한 1234의 크기와 다르며, 32바이트인 것을 보면, md5가 적용된 것이라고 추측할 수 있다. 따라서 online md5 decrypter를 이용하면 위와 같이 1234zombie라는 문자열을 볼 수 있.. 2019. 1. 29.
webhacking.kr 5번 5번 문제를 열면 아래와 같이 Login과 Join 버튼을 볼 수 있다. 그런데 Join 버튼을 누르면 Access_Denied라는 메시지가 나온다. Login을 누를 경우,http://webhacking.kr/challenge/web/web-05/mem/login.php로 이동되는 것을 볼 수 있는데, 기존 index.php에서 mem이라는 디렉토리가 경로에 추가된 것을 볼 수 있다. 이에 mem/index.php에 접근해보니 아래와 같이 /hint를 통해 join.php에 접근할 수 있게 되었다. join.php의 코드를 보면 아래와 같이 난독화가 적용되어 있다. 그리 복잡하지 않아서 손으로도 풀 수는 있지만, 크롬 개발자 도구의 콘솔을 이용하여 몇몇 문자열을 복호화해 보니 oldzombie라는 문자.. 2019. 1. 29.