본문 바로가기

Web Hacking/Wargame

(112)
Webhacking.kr : old-03 그림 1과 같이 Nonogram을 풀어주면, 아래와 같이 GET 인자값이 전송되며, 그림 2의 페이지로 이동한다. https://webhacking.kr/challenge/web-03/index.php?_1=1&_2=0&_3=1&_4=0&_5=1&_6=0&_7=0&_8=0&_9=0&_10=0&_11=0&_12=1&_13=1&_14=1&_15=0&_16=0&_17=1&_18=0&_19=1&_20=0&_21=1&_22=1&_23=1&_24=1&_25=1&_answer=1010100000011100101011111 그림 2에서 볼 수 있듯이 input창이 존재하는데, name=id이다. 필자는 SQL Injection을 해당 입력 창에 시도했었지만, 그대로 출력이 될 뿐, Injection ..
Webhacking.kr : old-24 php의 extract 함수에 관한 취약점이 존재한다. extract($_COOKIE)는 쿠키의 값을 변수화 함을 의미하며, $REMOTE_ADDR는 사용자 클라이언트 IP(클라이언트 IP를 가져오는 PHP 환경변수)를 나타낸다. 그러므로 아래와 같이 문제 해결을 해준다. htmlspecialchars() 함수와 , str_replace() 함수를 고려해야 하므로 그림 1 과 같이 쿠키 값을 설정해 필터링을 우회해 준다. 예제 1) 그림 2 는 extract() 함수를 사용하고 있는 test.php 파일이다. 그림 3 과 같이 localhost/test.php 접속 시, 그림 2에 의해서 'test_string'이 페이지에 출력된다. 그림 4는 ex..
Webhacking.kr : old-06 아래 PHP코드는 문제풀이에 힌트가 되는 코드이다. 현재 쿠키값이 어떤 식으로 만들어졌는지를 볼 수 있다. $val_id 값으로 예를 들면, 이 값이 base64 encode를 20번 수행하고, str_replace 함수에 맞춰 문자들이 변환되어 쿠키값에 저장된다. 다음(아래 코드) 결정적인 힌트가 되는 코드이다. 쿠키 값 decode 과정을 통해 id == admin, pw == nimda 이면, solve 할 수 있다. 즉, admin, nimda 값을 위의 base_64 encode 과정을 통해 쿠키 생성을 해주면 된다. 그림 1과 같이 버프슈트를 통해 admin의 base64_encode를 20번 진행해 준다. 그리고 아래 문자열 replace 함수를 통해, 규칙대로 문자변환을 ..
Webhacking.kr : old-06 < base64 > let user_id = 'admin' const encoding_string = btoa(user_id); console.log(encoding_string); function base64_encode(input_value){ for ( let i = 0; i
Webhacking.kr : old-54 function run(){ if(window.ActiveXObject){ try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch (e) { return null; } } }else if(window.XMLHttpRequest){ return new XMLHttpRequest(); }else{ return null; } } x=run(); function answer(i){ x.open('GET','?m='+i,false); x.send(null); aview.innerHTML=x.responseText; i++; if(x.response..
Webhacking.kr : old-39 - php 코드 -
Webhacking.kr : old-17 웹 페이지의 요소를 개발자 도구를 통해 확인하자, 그림 1과 같은 수상한 숫자모음이 확인되었다. 자세히 보니 계산식이였고, console 창에서 계산을 진행해 주었다. 계산을 하니, 그림2 의 pw 파라미터 값이 나왔고, 이를 전송하니 Wrong alert가 작동하지 않았다. 즉, unlock = 780****값이 맞다. 그림1의 sub() 함수에서 또 한번의 계산식을 통해, 경로를 구해준다. 해당 경로로 이동하니 그림3 과 같이 정답판정을 받았다. 한줄 평 : 솔직히 조금 쉬웠다.
Webhacking.kr : old-18 그림1 에서 볼 수 있듯이 sql 문이나, 공백과 관련된 문자들이 필터링 되고 있다. %20이나+도 필터링이 된다. 그래서 아래와 같은 injection 코드는 필터링 되어 no hack 문구가 보여진다. ?no=%27%27or%20id=%27admin%27-- 그림2 는 injection에 성공한 것을 볼 수 있는데, 사용된 코드는 아래와 같다. no=%27%27or%0aid=%27admin%27-- 주어진 PHP 코드를 자세히 보아야 하며, 특히 쿼리문자(%27)을 몇개 사용해야 하는지 주의해야 할 것 같다. 필자는 공백문자의 필터링을 %0a로 우회하였다. ( %0a는 url 상에서 사용이 되는 우회 기법이다. ) 한줄 평: php 코드 좀.. 꼼꼼하게 보자