본문 바로가기

분류 전체보기157

webhacking.kr 27번 27번 문제를 보면 다음과 같이 no를 입력 받는 form이 존재한다. 제목을 보면 SQL Injection이 가능할 것으로 보인다. form의 action이 index.php이기 때문에 index.phps를 보면 다음과 같은 코드를 볼 수 있다. solve()가 호출되기 위해서는 $q[id]가 admin이어야한다.따라서 쿼리문의 수행 결과가 admin이 되어야하는데 쿼리문의 조건을 보면where id=’guest’ and no=($_GET[no])인 것을 볼 수 있다. 여기서 id가 admin일 때로 조건을 변경하기 위해서 or를 사용할 수 있다.where id=’guest’ and no=0 or no=2 와 같이 작성하면 된다.이렇게 되면 실제로는(id=’guest’ and no=0) or no=2 .. 2019. 1. 29.
webhacking.kr 25번 25번 문제를 보면 다음과 같이 hello world가 출력된 것을 볼 수 있다. url을 보면 ?file=hello라는 것을 볼 수 있다. 아래의 파일 목록의 세 개 항목 중 hello.txt 파일의 내용을 읽어 textarea에 출력되는 것을 볼 수 있다. hello.txt에서 확장자를 제외한 파일 이름만을 입력하였을 때 내용이 출력되는 것을 보면 자동으로 .txt가 붙는다는 것을 추측할 수 있다. 따라서 flag가 있을 것으로 추정되는 password.php파일을 읽기 위해 ?file=password.php를 입력할 경우, ?file=password.php.txt로 입력될 것으로 보인다. 실제로 ?file=password.php를 입력한 경우, 아래와 같이 hello world가 출력된 것으로 보아.. 2019. 1. 29.
webhacking.kr 4번 4번 문제를 보면 YzQwMzNiZmY5NGI1NjdhMTkwZTMzZmFhNTUxZjQxMWNhZWY0NDRmMg==라는 문자열과 함께 key라는 input을 받는다. 위의 문자열을 복호화 한 값을 input 값에 넣는 것으로 추정된다. 이 때 ==으로 끝나는 것을 보면 우선 base64로 인코딩 된 것임을 추측할 수 있다. 따라서 먼저 base64 디코딩을 수행하면 위와 같은 문자열이 나온다. 이 때 결과 값이 40바이트인 것을 보면 SHA1이 적용되었을 가능성이 크다. 이 때 디코딩한 결과 값이 또다시 40바이트이므로 한번 더 디코딩해보았다. 그 결과, test라는 key를 얻을 수 있었다. 2019. 1. 29.
webhacking.kr 54번 54번 문제를 열어보면 다음과 같이 Password is 라는 문자열과 함께 패스워드가 한 글자씩 나타나는 것을 볼 수 있다. 이 때 Chrome 개발자 도구의 network 탭을 보면 다음과 같이 Preview를 통해 나타나는 글자들을 볼 수 있다. 따라서 위의 문자를 입력하면 clear 된다. 2019. 1. 29.
webhacking.kr 38번 38번 문제를 보면 다음과 같이 id라는 input 창이 있는 것을 볼 수 있다.여기서 admin 버튼을 누를 경우, admin.php로 이동한다.Id에 1을 입력한 뒤 admin.php를 보면, 아래와 같이 [ip]:1이 입력되어 있다. 즉, Input 창에 데이터를 입력하면 [ip]:[입력값]의 형태로 로그가 출력된다. admin.php 페이지를 보면 hint가 admin임을 알 수 있다. 하지만 admin을 입력할 경우, 다음과 같이 admin이 아니라는 메시지가 나온다. 다시 admin.php를 보면, 을 기준으로 로그들이 분리된 것을 볼 수 있다. 따라서 “\n”을 입력한뒤 로그 형태를 참고하여 [ip]:admin과 같은 형태로 입력해주면 된다. a\n218.--------.61:admin위와 .. 2019. 1. 29.
webhacking.kr 24번 24번 문제를 보면 다음과 같이 ip와 agent, “Wrong IP!”라는 메시지가 출력되는 것을 볼 수 있다. 또한 주석을 참고하여 index.phps를 보면 다음과 같은 코드를 볼 수 있다. 코드를 보면 REMOTE_ADDR 쿠키가 존재하면 str_replace()를 수행한 뒤 $ip가 127.0.0.1과 동일한지 확인한다. 이 때, 12, 7., 0. 이 공백으로 바뀌기 때문에 str_replace()를 거친 뒤의 결과가 127.0.0.1이 되려면 112277..00..00..1를 입력해야 한다. 참고로 php manual에 따르면 $_SERVER와 $_COOKIE는 다음과 같다. (출처) http://php.net/manual/en/reserved.variables.server.phphttp:/.. 2019. 1. 29.
webhacking.kr 26번 26번 문제를 보면 다음과 같이 index.phps를 볼 수 있다. index.phps를 열어보면, 다음과 같은 코드를 볼 수 있다.$_GET[id]가 admin일 경우 solve()를 호출하지만, admin이라는 문자열을 필터링한다. 따라서 admin을 urlencode하여 전송하면 된다. 이 때, urldecode() 를 추가적으로 호출하기 때문에 admin을 인코딩한 %61%64%6d%69%6e를 입력하면 다음과 같이 admin으로 바뀌어 no!가 출력된 것을 볼 수 있다. 따라서 %61%64%6d%69%6e를 한번 더 인코딩한%2561%2564%256d%2569%256e를 입력하면 된다. 2019. 1. 29.
webhacking.kr 39번 39번 문제를 보면 다음과 같이 input 창이 있는 것을 볼 수 있다. form의 action이 index.php이므로 index.phps를 보면 다음과 같은 코드를 볼 수 있다. 쿼리문을 보면 ‘가 $_POST[id] 앞에만 존재한다. 하지만 ‘를 입력하면 ‘ 2개로 replace 된다. 이 때 substr을 이용하여 15자만 $_POST[id]에 넣기 때문에 15번째 문자로 ‘를 입력하면 ‘’ 중 앞의 ‘만 입력된다. 따라서 다음과 같이 15번째 문자로 ‘를 입력하여 submit 하면 된다. 앞의 문자가 admin일 필요는 없다. 위와 같이 입력하면 clear할 수 있다. 2019. 1. 29.
webhacking.kr 18번 18번 문제를 보면 다음과 같이 no라는 input 창을 볼 수 있다.이 때, form의 method가 get이고, action이 index.php임을 알게 된다. 따라서 index.phps를 보면 다음과 같다. 우선 입력 받은 값에서 스페이스나 select, union 등을 필터링하는 것을 알 수 있다. 또한 mysql_qurery()의 결과를 배열 형태로 저장하는 것을 볼 수 있다. 여기서 첫 번째 행, 즉 $q[0]이 admin인 경우 solve()를 호출한다.따라서 “select id from challenge18_table where id=’guest’ and no=$_GET[no]”에서 첫 번째 결과 행이 admin이 되도록 해야한다. where의 조건이id = ‘guest’ and no = .. 2019. 1. 29.