Webhacking.kr 51번 문제 풀이!


많이 왔다


어서 다 풀고 다시 풀어봐야징



51번 문제 클릭!



Admin page 라고 나오고


ID와 PW를 입력하는 창이 나온다


그리고 오른쪽 밑에 보면 source 가 보인다


눌러보자



전에 index.phps 페이지의 버튼을 만들어 둔거 같다 ㅎㅎ


소스를 한번 보자


id와 pw를 받아서 pw는 md5로 해시화 하여 쿼리를 날려 비교하는거 같다


결국 id=admin 이 참이 되도록 해야한다


전 문제 처럼 /**/ 이런 주석으로 우회할 수 없도록 md5가 위에 빠져있다


그렇다면 어떤 방법으로 우회해야 할까..!?


md5 부분에 md5(pw,true); 라고 되어있는데


true가 왜 들어가있나해서


md5 를 검색해보았다



구글에서 md5 취약점 이라고 검색해보니


아래 블로그에서 좋은 정보를 얻을 수 있었다


http://hyunmini.tistory.com/43


그냥 md5(pw) 를 사용하면 결과 값이 16진수로 결과가 나오는데


md5(pw,true) 이런식으로 사용하면 binary 의 형태로 결과 값이 나오게 된다


근데 이 binary 값 중에 '=' 이런 문자가 포함되어 있다면


!@$!@$ '=' #$^@^


이런식의 결과 값이 나올 수가 있다


어떤 결과가 나올지 알기 위해 mysql에 test용 DB를 만들고 테스트 해봤다


mysql -u root -p


create database test;

use test;

create table Tb (id varchar(20), pw varchar(20));

show tables;


test 라는 Database에 Tb라는 테이블을 만들고


id, pw 칼럼을 넣었다



그리고 id pw에 aaa/AAA , bbb/BBB, ccc/CCC 라는 값을 추가해주었다


insert into Tb values('aaa', 'AAA');

insert into Tb values('bbb', 'BBB');

insert into Tb values('ccc', 'CCC');

select * from Tb;



이제 위의 소스와 비슷한 쿼리문을 만들어 테스트 해보자


일반적인 쿼리

select id,pw from Tb where id='aaa';


'='AAA 가 추가된 쿼리

select id,pw from Tb where id='aaa'='AAA';


'=true 가 추가된 쿼리

select id,pw from Tb where id='aaa'=true;


'=false 가 추가된 쿼리

select id,pw from Tb where id='aaa'=false;



결과를 보면 'aaa'=true 일 때를 제외하고는 모두


aaa 를 제외한 나머지 결과가 출력되었다


'aaa'=(거짓값) 이면 id가 aaa 인걸 제외한 모든 값이 나온다는 사실을 알았으니


이제 md5(pw,true) 의 결과에 '='이 들어가는 pw를 찾아서 넣어줘보자


원래의 쿼리를

select id from challenge_51_admin where id='$input_id' and pw='$input_pw'


md5(pw,true)를 이용하여 아래와 같은 쿼리로 만들면

select id from challenge_51_admin where id='admin' and pw='@#%! '=' !#$@%'


pw 부분에서 '@#%!' 의 값을 제외한 모든 값을 의미하게 되고


앞 부분에 id='admin' 의 결과가 쿼리의 결과로 나오게 될 것이다



md5(pw,true) 의 결과 중 '=' 이 포함되어 있는 pw 찾아내는건


로컬 웹 서버를 이용하여 간단히 php를 이용하여 알아 내였다




(찾아낸 pw 값은 모자이크처리했다)


이제 값을 입력해 보면..



Congratulation!



51번 문제 클리어당