반응형

워게임 77

[webhacking.kr] 27번 문제

150점인 27번 문제를 풀어보자. id가 admin이면 문제가 풀리는 것으로 확인된다. 그러나 select, limit, 스페이스, =, 0x 등의 문자열이 필터링 되고 있다. admin의 no값이 2이므로 우리는 우회하여 no의 값을 2로 만들면 된다. '='가 필터링 되므로 like 를 사용하고, 공백은 %09(탭)으로 대체해서 쿼리문을 작성한다. 쿼리문 : no=0)%09or%09no%09like%09%272%25%27%09--%09 정상적으로 문제가 풀리는 것을 확인할 수 있다.

[webhacking.kr] 26번 문제

100점인 26번 문제를 풀어보자. 첫화면은 소스코드 보기만 있고, 별 다른 특징은 없다. 소스코드에서 $_GET['id']값이 admin이면 "no!"를 echo하게 된다. 그리고 $_GET['id']을 url 디코딩 했을 때 값이 admin이면 문제가 풀리게 된다. admin을 URL 인코딩 후 전송해보았지만 "no!"라는 값이 뜨게 된다. 이렇게 된 이유는 웹 서버와 브라우저 사이에서 데이터 교환 시 브라우저는 폼에서 입력받은 데이터를 자동으로 인코딩한 값을 php서버로 보내고 php는 받은 인코딩된 값을 자동으로 디코딩하기 때문에 우리가 GET방식으로 보낸 url은 php서버에서 자동으로 디코딩 됬기 때문에 preg_match에 걸려 "no!"가 뜨게 된 것이다. 그럼 여기서 admin을 2번 U..

[webhacking.kr] 25번 문제

150점인 25번 문제를 풀어보자. file에 file명을 입력하면 자동으로 php가 붙어 include 되는 것으로 보인다. LFI 취약점을 이용해 보자. 우리는 php wrapper를 사용해서 LFI 사용해보자. - php wrapper란? 우선 wrapper란 실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램입니다. 원래 php wrapper는 개발자들의 개발을 돕기 위해서 만들어진 기능이지만 우리는 이 기능을 사용한 lfi에 대해 알아보도록 하겠습니다. 우리가 php wrapper를 사용한 lfi공격에 대해 알아야 하는 이유는 앞에서 배운 기본적인 lfi공격은 다음과 같은 형식으로 구성되어 있었습니다. www.[우리가 공격할 웹 사이트의..

[webhacking.kr] 24번 문제

100점인 24번 문제를 풀어보자. 문제를 들어가면 접속한 ip와 agent 정보가 나오게 된다. 소스코드를 확인해 힌트를 찾아보자. $REMOTE_ADDR은 클라이언트의 IP주소를 가져오고, $HTTP_USER_AGENT는 클라이언트의 접속환경 정보를 가져오게 된다. 그러나 $_SERVER보다 $_COOKIE가 뒤에 처리되므로 $REMOTE_ADDR를 쿠키에 넣어주고 조작할 수 있따. if문을 살펴보게 되면 만약 $REMOTE_ADDR이 존재한다면 a) .. -> . b) 12 -> 공백 c) 7. -> 공백 d) 0. -> 공백 으로 치환하게 된다. 문제에서는 $REMOTE_ADDR값이 127.0.0.1이면 문제가 풀리게 되는데, 치환되는 값을 생각해서 쿠키값을 입력해보자. REMOTE_ADDR : ..

[webhacking.kr] 23번 문제

200점인 23번 문제를 풀어보자. XSS 공격에 성공하면 문제가 풀리는 것 같다. 대소문자 변환, img태그, base64인코딩 등을 이용한 시도를 해보았지만 전부 no hack이 뜨게 된다. 특수문자가 이스케이프 처리 되는 지 입력해 보았는데 한 글자씩 입력해보면 치환을 거치지 않는 것을 확인했다. 그럼 문자열을 입력해보게 되면 필터링이 된다. 그럼 각 글자사이마다 NULL byte를 입력해서 재시도 해본다. 여기서 NULL byte injection이란? URL로 인코딩 된 널바이트 문자(0X00 또는 %00)를 이용해, 악의적인 공격자에 의해 의도하지 않은 동작을 시키는 것이다. 문자열을 저장할 때 null 문자를 삽입하여 null문자열이 있는 곳까지만 출력하고 끝난 것으로 간주함을 이용한 공격이..

[webhacking.kr] 22번 문제

500점인 22번 문제를 풀어보자. admin 계정으로 로그인을 하라고 문제에서 힌트를 주고 있다. join 페이지로 이동해서 admin 계정은 이미 존재하는 계정으로 나오고, 테스트를 위한 임의의 계정을 생성한다. - 참인 경우 - 거짓인 경우 이제 참/거짓 반응을 이용해서 Blind SQL Injection을 시도하자. Request는 POST 방식으로 보내게 된다. import requests url = "https://webhacking.kr/challenge/bonus-2/index.php" cookies = {'PHPSESSID':'세션'} pw_length = "" pw = "" # 패스워드 길이 구하기 for i in range(0,100): data = {"uuid":"admin' and..

[webhacking.kr] 21번 문제

250점인 21번 문제를 풀어보자. Blind SQL Injection을 통해 해결하라는 힌트를 알려주고 있다. id : guest / pw : guest 로 로그인을 시도해보면 login success가 뜨게 된다. 우리는 admin 계정으로 로그인 하기 위해 Blind SQL Injection을 통해 참 / 거짓일 때의 반응을 살펴보자. - 참일 경우 wrong password - 거짓일 경우 login fail 참 / 거짓일 경우의 반환값을 확인했으니 이 조건을 이용하여 파이썬 코드를 통해 패스워드를 알아보자. - 패스워드 길이 및 패스워드 문자열 구하기 import requests url = "https://webhacking.kr/challenge/bonus-1/index.php" cookie ..

[webhacking.kr] 20번 문제

200점인 20번 문제를 풀어보도록 하자. 이 문제의 특이한 점은 제한시간 2초가 걸려있다. 2초 안에 이 값들을 입력해서 전송시키기가 어렵다. 개발자 도구를 통해 스크립트를 확인해보자. 코드를 확인해보면 각 id(nickname), cmt(comment), captcha 의 값이 빈값이면 각 폼으로 커서가 이동하고 captcha의 값과 captcha_의 값이 값지 않으면 captcha로 커서가 이동한다. 마지막은 submit 부분이다. 이제 문제 해결을 위해 스크립트 코드를 변조해보자. 우선, nickname과 comment 폼에 임의의 값 'test'를 저장하고, captcha부분에는 바로 임의의 코드값을 저장하게끔 해서 크롬의 console 기능을 이용해서 페이지 새로고침(F5) 후 코드를 전달해보..

[webhacking.kr] 19번 문제

150점인 19번 문제를 풀어보자. 입력값에 인젝션을 시도해봤지만 별다른 반응이 없었다. 문제의 힌트를 찾는 도중 임의의 문자로 submit 후 쿠키 값을 확인해보면 userid 쿠키값이 새로 생성되어 있는 것을 볼 수 있다. 맨 뒤에 %3d로 되어있는 것을 보아 URL 디코딩 하게 되면 YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWJjODFlNzI4ZDlkNGMyZjYzNmYwNjdmODljYzE0ODYyYw== 값이 나온다. Base64 디코딩까지 하게 되면 다음 값이 나온다. c4ca4238a0b923820dcc509a6f75849bc81e728d9d4c2f636f067f89cc14862c 여기에서 힌트를 찾는데 시간이 오래걸렸지만, md5로 인코딩 되어 있는 것으로 ..

[webhacking.kr] 18번 문제

100점인 18번 문제를 풀어보자. 다음은 소스코드를 확인해서 힌트를 얻어내보자. $result['id']가 admin이면 문제가 해결되는 것을 알 수 있다. no=2이면 id 값이 admin인 것을 알 수 있으므로, SQL을 주입시켜 id가 admin으로 반환되게끔 만들면 된다. 우선 SQL injection을 막기 위한 필터링이 있다. -> | , / , & , select , from , 0x 해당 필터링을 우회하기 위해 \t(tab, %09) \n(개행, %0a)를 이용하여 쿼리문을 짜보기로 하자. 쿼리문 : 2 or no=2 select id from chall18 where id='guest' and no=2 or no=2 결과적으로 이렇게 쿼리문이 작성되게 되는데 연산자 우선순위에 따라 an..

반응형