Wargame 64

Webhacking.kr old 27번 문제 풀이

27번은 SQL Injection 문제이다. view-source를 통해 소스코드를 보자. 위의 소스코드를 보면, 1) /#|select|\(| |limit|=|0x/i 가 필터링 되고, 2) no 값에 입력값이 들어가고, 3) no=2가 되면 admin으로 인식되면서 문제가 풀리는 것을 알 수 있다. SQL 문장을 좀 더 자세히 보자. select id from chall27 where id='guest' and no=({$_GET['no']})") $_GET['no']가 입력값이고, no에 들어가는 값이 ()로 묶이는 것을 볼 수 있다. 우리는 no에 2라는 값을 넣어야 하기 때문에 where문에서 기존에 적혀 있던 값은 무효화 하고 no=2를 넣어주어야 한다. 즉, 아래와 같은 값을 넣는 것이다. ..

Webhacking.kr old 25번 문제 풀이

25번을 클릭하니 linux 체제의 파일 목록과 함께 입력창에 hello world가 입력된 것을 볼 수 있다. url을 보니 ?file=hello가 보내지는 걸 볼 수 있고, 파일 이름인 것 같아서 flag와 index를 추가로 입력해보았다. index 파일에는 별다른 내용이 없었고 flag 파일의 내용을 보았더니 FLAG is in the code이라고 출력되었다. 그래서 코드를 보았더니 코드에서 알아낼 수 있는 게 없었다. 이후 code 파일을 찾아보려고 했으나, 찾지 못했고 구글에 찾아보니 LFI 취약점을 통해 푸는 문제임을 알 수 있었다. cf) LIF(Local File Inclusion) 취약점 : 대상이 되는 파일이 공격 대상의 서버에 존재하고, 서버에 존재하는 파일에 접근하여 원하는 값을..

Webhacking.kr old 19번 문제 풀이

19번 문제를 클릭하면 위와 같은 화면이 뜬다. form 태그가 있는 것으로 보아 SQL Injection 문제임을 유추할 수 있다. 코드를 보자. 코드에서는 최대 입력 값이 5라는 것을 제외하고는 별 다른 내용을 찾을 수 없었다. 입력되어 있던 admin을 보내면 'you are not admin'이라는 메시지와 함께 url에서 id 변수로 admin 값을 넘기는 것을 볼 수 있다. id 값에 1을 넣어서 보내니 hello 1이 뜨는 것을 확인할 수 있었다. 그런 다음 logout을 위해 logout 버튼을 눌렀는데도 logout이 되지 않았다. 그래서 그냥 url만 이용해야겠다고 생각했고, sql 문법일 테니까 id에 admin을 넣고 뒤에 문법은 주석처리 하는 admin'--을 입력하였다. 이때 a..

Webhacking.kr old 54번 문제 풀이

드디어 마지막 100점짜리 문제다. 문제를 클릭하면 위와 같이 is 다음의 문자 값이 변하게 되고 마지막으로 ?가 출력된다. 소스코드를 보면, 서버로부터 데이터를 받아와서 aview.innerHTML = x.responseText를 통해 받아온 값을 하나씩 보여주는 것 같다. 문자가 끝나면 ?를 출력하게 되어 있다. 값을 하나하나 일일이 받아 적어도 되지만, 너무 번거롭기 때문에 Console 창을 이용하여 코드를 수정하였다. 아까 보았듯이 aview.innerHTML = x.responseText를 통해 받아온 값을 화면으로 보여주는데 =만 되어 있어서 값이 계속 갱신되었다. 우리는 문자 하나하나가 아닌 전체 문장을 보고 싶기 때문에 이를 붙여주는 작업이 필요하다. 그래서 aview.innerHTML ..

Webhacking.kr old 38번 문제 풀이

38번을 클릭하면 위와 같은 화면이 뜬다. LOG Inejction 문제라고 알려주고 있다. 소스 코드를 보면 admin page와 연결된 admin.php가 있음을 알 수 있다. URL에 입력하여 이동하자. admin.php 페이지로 이동하면 아무것도 없는 것을 볼 수 있다. 아마 이전 페이지의 입력창에 값을 입력해야 변화가 있을 것 같다. 이전 페이지에서 admin을 입력해보았더니, 'you are not admin'이라는 문자가 떴다. 이 외에도 1, 2, 3이라는 숫자를 입력했더니 log viewer에서 이를 볼 수 있었다. log viewer에 기록된 로그를 보면 IP주소:입력한 값이 떠 있었다. 이를 바탕으로 SQL Injection처럼 2문장을 한 번에 써서 보내면 문제가 풀릴 것이라고 예상..

Webhacking.kr old 26번 문제 풀이

26번을 클릭하면 위와 같은 화면이 뜬다. view-source를 눌러서 소스 코드를 보자. 소스코드를 보면 id 값이 admin이면 문제가 풀리는 것을 볼 수 있다. if문을 보면 admin은 필터링 되는 것을 알 수 있고, 그 밑의 코드를 보면 GET방식으로 받아온 id 값을 URL Decoding을 수행하는 것이 보인다. 이때 우리가 봐야할 것은 URL Decoding을 한 번만 수행한다는 것이다. 즉, 'admin'을 URL Encoding을 2번 시킨 값을 URL에 입력하면 문제가 풀릴 것이다. www.freecodecamp.org/news/url-encoded-characters-reference/ HTML URL Encoded Characters Reference A URL is an add..

Webhacking.kr old 24번 문제 풀이

24번 문제를 클릭하면 위와 같은 화면이 뜬다. Wrong IP!라는 메시지와 함께 테이블이 보인다. view-source를 통해 코드를 살펴보자. 문제가 풀리기 위해서는 $ip가 127.0.0.1로 설정되어야 한다. $ip의 값은 $REMOTE_ADDR의 값에서 가져오고, 가져온 값에서 ..과 12, 7, 0을 공백으로 치환한다. $REMOTE_ADDR의 값은 이전에 COOKIE의 값을 extract하는 것으로 보아, COOKIE에서 값을 가져온다고 유추해볼 수 있다. 이를 정확히 확인하기 위해 EditThisCookie를 사용하여 REMOTE_ADDR을 생성하고 127.0.0.1을 입력해보았다. 그랬더니 client ip의 값이 1로 바뀌었다. COOKIE의 REMOTE_ADDR에서 값을 가져오는 게..

Webhacking.kr old 6번 문제 풀이

6번을 클릭하면 위와 같은 화면이 뜬다. view-source를 클릭해서 소스코드를 보자. 코드를 간략히 보면, 첫 번째 php에서는 id와 pw를 base64를 통해 20번 암호화하고 숫자를 문자로 치환한 후 cookie에 저장한다. 두 번째 php에서는 cookie에서 가져온 id와 pw를 문자를 숫자로 치환한 후 20번 복호화한다. 이때 복호화된 id가 admin, pw가 nimda면 문제가 풀리게 된다. EditThisCookie를 통해 Cookie 값을 보면, 위와 같이 password와 user가 있는 것을 알 수 있다. user에는 admin을 base64로 20번 암호화한 값에서 숫자를 문자로 치환한 결과를, password에는 nimda를 base64로 20번 암호화한 값에서 숫자를 문자..

Webhacking.kr old 18번 문제 풀이

18번은 SQL Injection 문제인가보다. view-source를 클릭해서 소스코드를 보자. 형광펜 그어진 php 부분만 보자. preg_match를 통해 공백, /, 괄호, |, &, select, from, 0x 등을 필터링 하는 것을 볼 수 있다. SQL은 다음과 같다. select id from chall18 where id='guest' and no=$_GET[no] 이때 id가 guest로 잡혀있기 때문에 우리는 no에 거짓 값을 넣어주어 이를 상쇄시키고, or로 no=2를 추가 입력하여 admin에 접근할 수 있도록 하면 된다. (주석으로 admin의 no이 2인 것을 알 수 있다.) 즉, 우리가 완성하고자 하는 sql문은 select id from chall18 where id='gu..