본문 바로가기

웹해킹59

webhacking.kr 48번 [Command Injection] 48번 문제를 보면 아래와 같은 화면을 볼 수 있다.먼저 테스트로 파일 a와 abcd라는 메시지를 send하였다. 그 결과, 아래와 같은 창을 볼 수 있다. 이 때 delete를 지원하는 것을 볼 수 있다.파일을 delete한다면, rm [file_name]을 이용하지 않을까 하고 추측할 수 있다. 만약 그렇다면, ;을 이용하여 원하는 명령어를 수행할 수도 있을 것이다.예를 들면, rm ; ls이면 rm을 수행한 뒤 ls를 수행한다. 따라서 ;ls라는 이름의 파일과 abcd라는 메시지를 Send하였다. 아래와 같이 정상적으로 Send 되었다. 그 뒤 Delete를 누르면 아래와 같이 ls의 결과를 볼 수 있다.예상대로 delete가 rm 명령어를 수행하도록 구현되어 있.. 2019. 1. 29.
webhacking.kr 41번 41번 문제를 보면 아래와 같이 파일을 입력받는다. 아래는 index.phps 코드이다. 코드를 보면, 파일을 입력 받은 뒤 hidden_dir 폴더에 필터링을 거친 파일 이름으로 파일을 생성한 뒤 pw를 write한다. 따라서 hidden_dir의 이름을 알 수 있으면 해당 파일을 열어 pw를 읽을 수 있을 듯하다. 이 때, 입력한 파일 이름이 필터링 되는 것을 이용하여파일 이름이 공백이 될 경우를 시도해 보았다. 입력 시에 공백을 입력하지는 않았지만 필터링 된 값에 대한 검증이 없는 경우 문제가 될 수 있다. 공백으로 replace되는 >를 이름으로 하는 파일을 업로드 하였다.그 결과 Warning 메세지를 통해 hidden_dir을 알 수 있다. 이제 해당 경로를 통해 pw를 읽기 위해 임의의 파일.. 2019. 1. 29.
webhacking.kr 51번 51번 문제를 보면 아래와 같은 admin page를 볼 수 있다. index.phps를 보면 아래와 같은 코드가 있다. solve()를 호출하기 위해서는 query문 결과의 id가 admin이어야 한다.이에 주석을 시도해보았으나 Wrong이 출력된다. 따라서 다른 방법으로 풀어야 하는데,md5()에서 raw_output을 true로 준 것을 알 수 있다. php 메뉴얼을 보면 md5의 두번째 인자인 raw_output은 default로 false이다. True로 설정할 경우 raw binary format으로 리턴된다. 이 점을 이용하여 password를 true로 만들면 clear할 수 있다. 출처: http://php.net/manual/en/function.md5.php pw=’$input_pw’.. 2019. 1. 29.
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.