wargame : https://webhacking.kr/ ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 auth 버튼을 누르면 access_denied가 반겨주기 때문에 바로 소스를 한번 살펴보자. php로 작성된 코드에서는 2, -, +, from, _, =, \s, *, /에 대한 필터링이 보이고 rand 함수로 작성된 조건문이 보인다. 여기서 Hello admin이라는 alert를 띄우는 구문과 풀이는 다음 코드로 보여진다. if(!$data[0]) { echo("query error"); exit(); } if($data[0]==1){ echo(""); } elseif($data[0]==2){ echo(""); solve(7); } 다음 코드를 보면 쿼리 에러를 발생시켜주는 부분이 있고, data[..
wargame : https://webhacking.kr/ ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 guest라는 ID로 현재 로그인이 되어있는 듯하고, 해당 view-source에 들어가보자. 엄청나게 긴 코드가 나오게 되는데, 풀이를 위한 코드는 다음으로 보인다. if($decode_id=="admin" && $decode_pw=="nimda"){ solve(6); } decode_id가 admin이고 decode_pw가 nimda면 해당 문제가 풀리는 것으로 보인다. $decode_id는 cookie의 user이고, $decode_pw는 cookie의 password를 의미하는데 guest가 base64 인코딩을 20번을 돌리고, 그 중 문자열에 1~8까지 포함되는 것들은 해당 기호로 변환되는 것..
wargame : https://webhacking.kr/ ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 우선 로그인 페이지는 다음처럼 나온다. 비밀번호가 틀리면 Wrong password라는 창이 뜬다. join 버튼을 누르게 되면, 다음과 같이 뜬다. 해당 메인 페이지와 login.php가 존재하는데 혹시나 php의 directory를 확인할 수 있는가에 대해서 경로에 ..을 삽입해보았다. 다음과 같이 두 php 파일이 보이는데, 우리가 접근하지 못했던 join.php 소스코드를 한번 보도록 하자. bye 라는 alert와 함께 검은 화면이 보이는데, 개발자 도구를 열어서 확인해보면 다음과 같은 문자들이 보인다. 복사해서 가독성있게 확인해보자. l = "a"; ll = "b"; lll = "c"; lll..
LOS : https://los.rubiya.kr/ ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 풀이를 위한 코드는 다음과 같다. if(($result['pw']) && ($result['pw'] === $_GET['pw'])) solve("ouroboros"); 패스워드만 찾아내면 되는 간단한 문제라고 생각이 들기에는 단계가 높아진 상태인데, 페이로드를 다 넣어봤지만, 아무것도 되는게 없었다. 이번에는 union 필터링이 없으니까 한번 넣어보았다. 단서를 하나 얻었다. 조회를 하게 되면 pw 값이 내가 입력한 select 1이 출력되는 것을 확인할 수 있는데 이는 위에서 본 것처럼 pw가 존재하지 않기 때문이다. 그렇다면, pw 값을 입력($_GET['pw'])하면서 동시에 $result['pw']와 어..
LOS : https://los.rubiya.kr/ ✔️ 문제 문제는 다음과 같다. 지금까지 본 문제 중에서 가장 긴 코드인 것 같다. ✔️ 풀이 풀이를 위한 코드는 다음과 같다. if(($result['email']) && ($result['email'] === $_GET['email'])) { mysqli_query($db,"delete from prob_phantom where no != 1"); solve("phantom"); } 보이지 않는 이메일을 입력하면 되는 문제로 보인다. 해당 이메일을 입력하면 no가 1이 아닌 것을 삭제하면서 solve가 되는데.. 일단 joinmail을 받을 때, duplicate 라는 문자열을 필터링 하는 것으로 보이고, insert into 에 해당하는 삽입을 하..
LOS : https://los.rubiya.kr/ ✔️ 문제 문제는 다음과 같다. ✔️ 풀이 풀이를 위한 코드는 다음과 같다. if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("frankenstein"); pw를 알아내야 풀리는 문제로 보인다. 현재 아이디가 frankenstein으로 설정되어 패스워드를 받고 있고, union 구문과 괄호가 필터링으로 걸려있다. 하나의 힌트로는 db 에러가 발생하였을 때, error라는 exit 하게 되는데 이것을 바탕으로 Error Based Sql Injection을 시도해보면 좋을 것 같다. 현재 필터링 된 괄호는 case 구문으로 우회하는 방법이 있다고 한다. 다음과 같이 case 구문을 활용하여 sql..