목록web (20)
Tyojong
보호되어 있는 글입니다.
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("skeleton"); highlight_file(__FILE__); ?> 문제 목표if($result['id'] == 'admin') solve("skeleton");id가 admin이면 해결된다.$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0";조회 되는 쿼리 뒷 부분을 보면 and 1=0 이 추가로 붙어있다. 하지만 별다른 필터링이 없기 때문에 그냥 뒷부분을 주석처리하면 된다. 문제 해결?p..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("vampire"); highlight_file(__FILE__); ?> 문제 목표if($result['id'] == 'admin') solve("vampire");id가 admin이면 해결된다.$_GET[id] = strtolower($_GET[id]);$_GET[id] = str_replace("admin","",$_GET[id]);입력받은 id를 모두 소문자로 바꾸고 admin이라는 문자열은 공백으로 바꿔 필터링한다. 문제 해결admin문자열을 공백으로 치환 시 한번의 과정만 진행한다.?id=..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("troll"); highlight_file(__FILE__);?> 문제 목표if($result['id'] == 'admin') solve("troll");id가 admin이면 해결된다.if(preg_match("/admin/", $_GET[id])) exit("HeHe");admin문자열을 필터링하고 있다. 문제 해결sql에서는 대•소문자를 구분하지 않는다.admin문자열을 필터링하고 있는 정규표현식을 보면 admin이라는 소문자로만 이루어진 문자열만 검증하고 있다.이런식으로 id에 대문자를 섞어 작성..
이벤트 핸들러 (script태그 우회)onload해당 태그가 요청하는 데이터를 성공적으로 로드한 후에 실행onerror해당 태그가 요청하는 데이터를 로드하는데 실패할 시 실행onfocusinput 태그에 커서를 클릭하여 포커스가 되면 실행autofocus 속성을 이용해 자동으로 포커스 시키거나, URL의 hash부분에 input태그의 id 속성 값 입력 (ex. https://tyojongblog.site/#inputID) 를 넣어 자동으로 포커스 되도록 한다.문자열 치환 필터링 우회script 라는 키워드를 제거하는 필터링이면 scrscriptiptonerror 라는 키워드를 제거하는 필터링이면 oneonerrorrror활성 하이퍼링크 (javascript:, Html Entity Encoding)ja..
보호되어 있는 글입니다.
기능 분석내 ip와 agent 정보가 뜨면서 Wrong IP! 라는 문자열이 출력된다.view-source 버튼을 누르면 소스코드를 볼 수 있다. 코드 분석 if($ip=="127.0.0.1"){ solve(24); exit(); } 코크들 보면 사용자의 ip가 127.0.0.1이면 문제가 해결된다. extract($_COOKIE);$ip = $REMOTE_ADDR;코드를 보면 php에서 extract함수는 배열을 변수로 바꿔주는 함수이다. 즉 extract($_COOKIE)를 하게되면 cookie의 key값을 변수 이름으로 cookie의 value값을 변수의 값으로 설정하게 된다.해당 코드에서는 ip를 REMOTE_ADDR이라는 변수에서 가져오기 때문에 REMOTE_ADDR이라는 이름으로 ..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge"); highlight_file(__FILE__..
query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; if($result['id'] == 'admin') solve("darkelf"); highlight_file(__FILE__); ?> 문제 목표if($result['id'] == 'admin') solve("darkelf"); id가 admin이면 해결되지만if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");or과 and 문자열이 필터링된다. 문제 해결or 대신 || 를 사용하면 필터링을 우회할 수 있다. (sql injection ..
문제에 접속하면 flag가 한 글자씩 순식간에 지나간다. 개발자 도구를 이용해 script태그의 코드를 확인해보면 글자가 출력되는 코드가 작성되어있다. 해당 javascript 코드를 복사해 콘솔창에 붙여 넣고 두 가지 코드를 수정하면 된다.aview.innerHTML=x.responseText; 코드는 텍스트 응답을 html코드에 넣어 한 글자씩 띄운다. = 를 +=로 변경하게 되면 앞 글자들도 지워지지않고 더해져서 출력되기 때문에 모든 문자열을 확인할 수 있다. if(x.responseText=="") aview.innerHTML="?"; 코드는 플래그가 다 출력되고 기존에 작성된 문자열을 지우고 ?를 띄우기 때문에 출력된 flag를 사라지지 않게 하기 위해서는 해당 코드를 지우면 된다. 수정 후 콘..