목록Wargame/Webhacking.kr (10)
cgy12306
#, select, (, whitespace, limit, =, 0x 필터링 되어있다. 또한, 쿼리문에서 no가 ()로 막혀있다 id와 no를 거짓값으로 만들고 or로 뒤의 쿼리문을 참으로 만들면 된다. whitespace는 %0b(VT)로 우회하고, =은 like로 우회하면 되고, #은 --로 주석처리 해주면 된다. 여기서 주의해야 할 점은 주석뒤에 공백처리를 해줘야 한다는 점이다. 공백을 넣지 않으면 위의 소스코드에서 --)로 끝나기 때문에 정상적으로 주석처리가 되지 않는다. https://webhacking.kr/challenge/web-12/?no=0)%0bor%0bno%0blike%0b2%0b--%0b
LOG injection 문제이다. Log Injecion은 로그 파일에 원하는 코드를 삽입할 수 있는 공격이다. 페이지 소스를 보게 되면 admin page가 주석처리 되어 있다. 해당 페이지로 접속하게 되면 로그들을 볼 수 있다. 나의 IP도 확인이 가능하다. IP 주소 :admin 을 개행해서 넘기게 되면 풀리는 문제인것 같다. %0a로 개행을 해서 넘겨보자. %0a 그대로 넘어가는 듯하다.fiddler로 패킷을 까보자. %가 %25로 인코딩 돼서 넘어가고 있다. 우리는 개행을 해주는 코드로 바꿔줘야한다. 를 아래와 같이 변경 해 준다. hex를 직접 넣어준다. 32 32로 되어있는 부분을 0D와 0A로 바꿔주면 된다. 변경후 Run to Completion을 눌러서 패킷을 보내면 문제가 풀리게 된다.
? 부분의 문자가 계속 바뀌다가 마지막에 ?로 바뀐다. 웹 페이지 소스를 보면 시간을 따로 정해서 한 글자씩 보여주는 자바스크립트이다. setTimeout("answer("+i+")", 20);에서 20을 500으로 늘려서 다음 글자가 뜨는 딜레이 시간을 늘려준다. 모두 받아 적으면 FLAG{a7981201c48d0ece288afd01ca43c55b}라는 글자가 뜬다. 이 플래그를 Auth에 가서 입력을 하게 되면 클리어 된다. aview.innerHTML=x.responseText; 부분을 +=로 바꿔줘서 화면에 이어서 출력할 수 있게 된다. 또 if(x.responseText=="") aview.innerHTML="?"; 코드를 지워서 페이지에 플래그를 유지할 수 있게 해준다.
id를 입력하는 칸이 보이고, 제출 보튼이 보인다. id를 5글자를 최대로 입력할 수 있다. https://webhacking.kr/challenge/js-6/?id=123123 하지만 GET방식으로 인자를 넘겨주게 되면 6글자 이상을 넘겨줄 수 있다. admin을 입력하게 되면 아래와 같이 you are not admin이 출력이 된다. https://webhacking.kr/challenge/js-6/?id=admin admin 사이에 NULL문자를 넣어보자. NULL문자는 %00이다. https://webhacking.kr/challenge/js-6/?id=ad%00min
view-source만 달랑하나 있다. 눌러서 소스를 확인해 보자. GET['id']로 넘겨받은 값이 admin이면 preg_match함수로 필터링 한다. 그리고 id 값을 url디코딩해주고, 해당 값이 admin이면 문제가 풀린다. admin을 url 인코딩을 해주게 되면 %61%64%6d%69%6e이라는 값이 나온다. 하지만 php로 값을 넘겨 받을 때 디코딩해서 넘겨 받기 떄문에 admin으로 값을 받아와서 preg_match 함수에서 걸리게 된다. url 입력 =======> ? ========> admin (디코딩) (디코딩) 생각을 해보면 url을 브라우저로 넘기면 url인코딩을 하고, 서버로 디코딩해서 넘겨줄 때 %를 인코딩해서 보내준다면, 서버로 %가 %25로 변경해줬기 때문에 %25를 %..
SQL Injection문제이다. 페이지 소스를 보자.'(작은따옴표)에 대해 필터링이 걸려있지 않다. 그리고 뒤에 주석으로 admin의 번호는 2라고 착하게 알려주고 있다. 그럼 no는 정수형으로 추측을 할 수 있다. id='guest' and no=를 거짓으로 만들고 뒤에 or 연산자를 통해 admin의 id를 입력해주면 앞의 문장이 거짓이라도 뒤의 문장이 참이기 때문에 select 쿼리문에서 id를 반환할 것이고 조건문을 무사히 통과할 수 있다. 또 whitespace도 필터링 되어 있기 때문에 tab문자를 통해 값을 url로 넣어주자. tab은 %0b이다. https://webhacking.kr/challenge/web-32/index.php?no=12%0bor%0bno=2
빈칸만 있다. 페이지 소스보기를 하자. unlock의 결과값이 입력한 값과 같아야 한다. console창에서 unlock의 계산 결과값을 확인해보자. 7809297.1을 입력해보자.