티스토리 뷰
sql injection,,,이거는 작년 동아리 자유발표 시간에 조사했었던 기억이 있는 해킹방법이었다. 뒤에 or 어쩌구 저쩌구 하튼 문장 추가해서 무력화시키는 방법!.!
문법 잘 알지도 못하면서 혼자 해보겠다고 끙끙거리며 injection tool 이런거나 검색했다,,,ㅎ,,,ㅏ,,결국 뭣도 모르겠어서 다른 블로그의 설명으로 이해했당. 아쉽,,
하튼 내용을 풀자면
if($_GET[no])
{
if(eregi(" |/|\(|\)|\t|\||&|union|select|from|0x",$_GET[no])) exit("no hack");
$q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]"));
if($q[0]=="guest") echo ("hi guest");
if($q[0]=="admin")
{
@solve();
echo ("hi admin!");
}
}
생각보다 코드는 간단하다. 맨 윗줄부터 차례차례 해석해보자.
no 값을 GET 함수를 이용해 받아낸다.
eregi 는 대소문자 구별없이 똑같은 문자열을 찾는 함수로 no 에 저장된 값이 |/|\(|\)|\t|\||&|union|select|from|0x 이 친구들이면 no hack을 echo 한다!
그래서 해보니 정말이드랑.
얘는 | 입력한건데 저렇게 인코딩 되었다.
하튼 no 값에 저런 값들이 있으면 no hack!
$q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]"));
다음은 이 문장이다. 이게 참 sql을 모르니 답답하더라 힝구.
하튼 정말 문장 그대로 mysql에서 id가 guest인 표에서 no의 값과 일치하는 id 를 골라라!
그러니까 지금 no 값에 입력된 값이 ????라면 표에서 ????에 해당하는 id를 고르라는 것이징.
근데 이게 이제부터는 노가다인것 같았다. 뭐가 admin에 해당하는 값인지 알 수 없다...
일단 no라고 치면 hi guest가 나오길래 이거다 싶었다.(아니엇지만,,,)
1을 넣어주어도 hi guest라고 나온다! (타 블로그의 말에 의하면) 그렇다면 2가 admin에 해당하는 수일 가능성이 있다!
근데 그럼 이제 무얼 어떻게 해주냐,,이거지,,injection !
주소창을 보면 no=입력한 값 이렇게 나와있다.
그러니가 위의 문장에서 no=$_GET[no]에 저장된 값을 우리가 조작하면 되는거다.
no=0 or no=2 이렇게 no에 입력해준다면 and > or 이므로
select id from challenge18_table where id='guest' and no=0 or no=2
id 가 guest 인 상태에서 테이블에서 no 값이 0인 id를 찾거나 no=2인 id 를 찾으란게 된다.
id='guest'를 무력화 시켜주기 위해 저렇게 뒤에 or 을 붙여버린당
공백은 nohack이 되므로 \n만 사용가능한데 이를 인코딩한 값은 %0a란다.
즉 no=0%0aor%0ano=2를 주소창에 입력하면 뙇!
'웹해킹 공부(webhacking.kr)' 카테고리의 다른 글
webhacking.kr 26번 (0) | 2018.05.13 |
---|---|
webhacking.kr 24번 (0) | 2018.05.13 |
webhacking.kr 17번 (3) | 2018.04.30 |
webhacking.kr 4번 (0) | 2018.04.09 |
webhacking.kr 16번 (0) | 2018.04.07 |