LOS : https://los.rubiya.kr/ ✔️ 문제 문제는 다음과 같다. 겉보기에는 비슷한데, hell_fire 문제랑 같겠냐고 약올리고 있다. ✔️ 풀이 풀이를 위한 코드는 다음과 같다. if(($result['email']) && ($result['email'] === $_GET['email'])) solve("evil_wizard"); 이전 문제와 비슷한 것 같지만, 필터링에 추가된 것들이 있고 진짜로 같겠냐라면서 문제에서 약올리고 있다. 하지만 필터링에 걸릴만한 것은 이전 코드에서도 사용하지 않았기 때문에 한번 그대로 시도해보자. 잘 삽입이 되는 것으로 보이고, 이번에는 admin의 score가 200에서 50으로 줄은것으로 보인다. 한번 이메일의 길이를 찾아보도록 하자. import ..
LOS : https://los.rubiya.kr/ ✔️ 문제 문제는 다음과 같다. 이번 문제는 조금 색다른게 테이블이 존재한다. ✔️ 풀이 풀이를 위한 코드는 다음과 같다. if(($result['email']) && ($result['email'] === $_GET['email'])) solve("hell_fire"); 색다르게 email이 맞아야하는데, id가 admin이면 이메일이 노출되지 않는 것으로 보인다. 또한, order by 구문을 사용하여 order을 GET으로 받고 있는 것을 확인할 수 있다. order by 구문은 지정된 컬럼을 기준으로 정렬이 가능한데 다음처럼 score를 작성하면 점수별 정렬이 가능하다. 여기서 이제 rubiya의 이메일이 아니라, 코드 하단부에 admin의 이메..
XSS game : https://xss-game.appspot.com/ ✔️ 문제 문제는 다음과 같다. 이번에도 동일하게 어딘가에 alert를 삽입해야하는 것으로 보인다. ✔️ 풀이 해당 문제에 Sign up 링크로 들어가보자. 다음과 같이 input 태그가 하나 주어진다. 아무거나 입력하고 보내면 다음과 같이 되는데, 코드를 한번 살펴보자. Thanks for signing up, you will be redirected soon... 다음과 같이 코드가 삽입되어 있다. 자바스크립트 코드만 떼어서 생각해보게 되면, setTimeout( function() { window.location = '{{ next }}'; } , 5000); 보기 편하게 다음과 같이 작성할 수 있는데, 해당 next에 대한 ..
XSS game : https://xss-game.appspot.com/ ✔️ 문제 문제는 다음과 같다. 어플리케이션에 자바스크립트 alert를 삽입하는 것으로 보인다. ✔️ 풀이 다음처럼 script 구문을 삽입하게 되면 time 제한에 걸리는 것으로 보이니 코드를 살펴보자. function startTimer(seconds) { seconds = parseInt(seconds) || 3; setTimeout(function() { window.confirm("Time is up!"); window.history.back(); }, seconds * 1000); } 다음과 같은 자바스크립트 코드가 구성되어 있다. seconds 파라미터를 받아와서 문자열을 숫자로 변환하거나 또는 3의 변수를 저장하고, ..
LOS : https://los.rubiya.kr/ ✔️ 문제 문제는 다음과 같다. 필터링에 regex, like 등이 추가된 것으로 보인다. ✔️ 풀이 풀이를 위한 코드는 다음과 같다. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("xavis"); 느낌이 앞선 블라인드 인젝션 문제처럼 풀어야 할 것 같은 느낌이다. 일단 필터링에 regex와 like가 걸려있는 것으로 보이는데, 한번 기존에 늘 삽입하던 구문을 삽입해보자. 정상적으로 페이로드가 먹히면서 admin을 반기는 것을 확인할 수 있다. 그렇다면 한번 패스워드 길이를 확인해보도록 하자. import requests url = "https://los.rubiya.kr/chall/xavi..
LOS : https://los.rubiya.kr/ ✔️ 문제 문제는 다음과 같다. 문자열 길이에 제한이 걸려 있는 것으로 보인다. ✔️ 풀이 풀이를 위한 코드는 다음과 같다. if($result['id']) solve("nightmare"); strlen 함수로 pw 길이가 6글자를 넘어가지 못하게 막혀있는 것을 확인할 수 있다. 그리고 특이한 것은 id != admin 이면서 pw를 검사하고 있고, 풀이를 위해서는 id 값이 들어가야하는 것이다. 당연히 아무런 반응이 없는 것을 확인할 수 있다. 또한, preg_match 함수로 #과 - 각 주석처리에 대해서 필터링 처리 되어 있는 것을 확인할 수 있다. 생각해볼 수 있는 것이 1) 6글자를 넘지 않는 페이로드이면서 2) #과 - 이외의 주석처리를 진..