Webhacking.kr 46 -SQLi
46번 300점짜리 문제입니다.
SQLi 은 왤케 햇갈리지....이번문제도 풀고보니 그리 해맬 문제가 아니였는데 저번 order by id desc 가 있던 문제가 있이서 이번문제는 짜증날 정도로 해맸다.
문제의 소스코드
lv=1 일 때
lv=id 일때
저렇게 출력이 나와서 뭔가 order by와 관련이 있을 것이라 생각하고 뻘짓을 했었습니다.
$q=@mysql_fetch_array(mysql_query("select id,cash from members where lv=$_GET[lv]"));
소스코드의 핵심부분인데 저 lv 변수에 저는 계속해서
?lv=id%0Aorder%0Aby%0Aid%0Adesc == ?lv=id order by id desc 이런 식의 정렬문제인줄 알고 계속 시도했었습니다.
그러다가 좀 쉬고 다시 생각해보자는 마음으로 다시 봤는데 단순히 sql 구문의 where 인, 즉 조건식 부분을 바꿔주면 풀렸습니다.
$q=@mysql_fetch_array(mysql_query("select id,cash from members where lv=2 or id=admin"));
이렇게 해주면 lv=2 이거나 id가 admin인 members 테이블로부터 id와 cash를 골르라는 뜻이 됩니다. id가 admin인 부분은 문제에서 보여지듯 당연하게 있으므로 답이 출력됩니다.
여기서 제 실수가 하나 들어났는데요 공백은 %0A로 우회해주면 되지만, admin은 'admin' 이렇게 넣어주게 되면 예전 문제를 풀때 언급했든 php에서 magic_quoter_g..뭐시기 땜에 " ' 이런 것들이 사용이 안된다고 했습니다.
따라서 admin의 hex값을 넣어주었는데 계속 안되서 문제 접근을 잘못했나하고 소스를 다시보니 0x가 필터링이 되어있었습니다.
따라서 char(97,100,109,105,110)으로 각각의 십진수를 char 형으로 바꾸어 admin이 되도록 인증했습니다.
그랬더니 성공!!!
0 개의 댓글