LOS : https://los.rubiya.kr/ ✔️ 문제 문제는 다음과 같다. 자기 스스로 주석처리를 하고 있는데..? ✔️ 풀이 풀이를 위한 코드는 다음과 같다. if($result['id'] == 'admin') solve("dragon"); admin을 출력해야하는데, guest를 출력하고 자기 스스로 주석처리를 하고 있다. 그럼 주석을 무마하면서 id를 출력할 수 있게 해야한다. # 이라는 주석은 한 줄 주석을 의미하기 때문에, %0a 같은 개행 문자, Line Feed를 통해서 다음줄로 구문을 바꾸면 될 것 같다는 생각이 들었다. 개행 문자를 입력하면 정상적으로 구문이 먹히지 않는 것을 확인할 수 있고, 뒤에 풀이를 위한 페이로드를 작성해보도록 하자. 1234 or id='admin' # ..
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) #과 - 이외의 주석처리를 진..
LOS : https://los.rubiya.kr/ ✔️ 문제 문제는 다음과 같다. 함수가 추가된 것을 확인할 수 있다. ✔️ 풀이 풀이를 위한 코드는 다음과 같다. if($result['id']) solve("zombie_assassin"); 이번 문제에서는 strrev() 함수와 이전 문제들에서 자주 보였던 addslashes 함수가 등장하는데, addslashes 우회는 알고 있기 때문에 strrev에 대해서 찾아보도록 하자. https://www.php.net/manual/en/function.strrev.php PHP: strrev - Manual It's faster and flexible than tianyiw function (comment #122953) www.php.net 해당 공식문..
LOS : https://los.rubiya.kr/ ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 풀이를 위한 코드는 다음과 같다. if($result['id']) solve("succubus"); id만 존재하면 간단하게 풀리는 것으로 보이는데, id와 pw에 각각 싱글쿼터에 대한 필터링이 걸려있다. 그런데, 어디서 많이 본 구문이라고 생각이 들었다. 이전 문제에서 참고한 글 중에 해당 하는 내용과 비슷한? 동일한? 페이로드로 되어있는 것이다. 제한적인 구문 안에서 사용이 가능한데, 한번 바로 시도해보도록 하자. id=\&pw= or 1 # 다음 구문을 GET 방식으로 파라미터에 넣어주게 되면, 쉽고 빠르게 풀 수 있게 된다. 해당 페이로드는 싱글 쿼터를 우회하는 내용으로 백슬래쉬 \ 를 id 인자로 넘겨..
LOS : https://los.rubiya.kr/ ✔️ 문제 문제는 다음과 같다. pw에 간단하게 싱글쿼터 필터링이 걸려있는 듯하다. ✔️ 풀이 풀이를 위한 코드는 다음과 같다. if($result['id'] == 'admin') solve("assassin"); 간단하게 admin 값을 넣어주면 풀리는 문제인데, 싱글쿼터가 필터링으로 걸려있고 해당 구문에서는 = 연산자와 동일하게 적용되는 like 구문을 이용하고 있다. 즉, where pw='{$_GET[pw]}' 와 동일하다고 생각하면 된다. 그러면 지금까지 해왔던 문제들과 똑같지 않은가! 라고 생각하기에는 싱글쿼터 필터링이 있기 때문에 우리가 조작하려고 하는 페이로드가 먹히지 않게 된다. 그렇다면 어떻게 해야할까? 이전 문제와 동일한 참고 글을 ..