zj3t

email: euntaejang@gmail.com

Latest Posts

Webhacking.kr 46 -SQLi

By 오후 3:14

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이 되도록 인증했습니다.


그랬더니 성공!!!

You Might Also Like

0 개의 댓글