728x90
반응형
상단에 나오는 쿼리문은 DB에 해당 쿼리문으로 데이터가 들어간다고 알려준다.
이번에는 쿼리문에서 잘 보면 id에 이미 admin 이라는 값과 pwd는 ''로 이미 들어가 있다.
query : select id from prob_orc where id='admin' and pw=''
아래에는 php 코드가 나와있으며, 이걸 참고해서 문제를 푸는 것 이다.
해당 php 코드에서 자세하게 봐야 하는 부분은 이 부분인 것 같다.
아래 조건문을 보면 일부 문자를 필터링 하며, 입력할 공간은 pw이며, DB의 결과와 입력한 pw가 같을 경우 문제가 풀린다.
id부분은 비교하는 문장이 보이지 않아서 pw 부분을 공략하면 될 것 같다.
+++코드 중간에서 addslashes 함수가 쓰이기 때문에 Blind SQL 인젝션을 사용해 pw값을 알아내야 하며, length, substr 함수가 필요하다.
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if($result['id']) echo "<h2>Hello admin</h2>";
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc");
문제풀이 할 방법
- pw 길이 알아내기
?pw=' or length(pw)=n# - pw 한 글자씩 알아내기
?pw=' or pw like 'a%
?pw=' or substr(pw, n, 1)='[0 - 9], [a - z]
pw의 길이와 글자 알아내기
-> pw 길이 알아내기
-> pw 한 글자씩 알아내기
▶ 8글자인 [ 095a9852 ] 를 알아냈다.
?pw=095a9852 를 입력하면 문제는 클리어된다!
728x90
반응형