webhacking/sql, sql injection

wargame.kr DB is really GOOD

qkqhxla1 2014. 10. 1. 17:28
뭔지 몰라서 한참찾았다. 이것저것 별 난리를 다해봐도 넘어가는데 이상이 없다.

문제 클릭을 해보면 유저와 db사이에 관계? 를 파악하는 문제라는데 답이 없어보인다.


첫번째날은 그냥 포기해버리고 다음날에는 admin으로 접속하면 안된다고 자바스크립트로


표시된 부분에 주의하여, admin계정으로 접속하면 뭔가 있을것같아서 접속했다.


어 근데 자바스크립트로 되있어서 아무값이나 입력 후 프록시로 잡아채서 admin으로 바꿨는데


안된다. 클라이언트측에서도 검사하고 서버측에서도 검사하나보다.


서버측에서 검사할땐 일반적인 php....같은걸로 할테니까 예전에 어디서 보았던 php의 널바이트


였나? ;%00 으로 잘 조합하면 될것같기도 했다.


user_id=adm;%00in 로 바꿔서 보내봤더니 이런 소스가 뜬다.?




그리고 alert창으로 1이 두번 뜬다. 두번째날에는 왠지 이 페이지가 취약점같아서


(아래 보면 alert(user())등이 있는데 왠지 컬럼 이름같아서....) 계속 반복해가면서 입력했는데 얻은게


아무것도 없다. 이런 샹.


계속 삽질하던 도중 뭔가 이상함을 발견했다. 똑같이 adm;%00in으로 변조하는데


어떨때는 저 화면이 뜨고 어떨때는 다른 메모가 뜬다. 이것저것 실험해보니 메모는 사용자 id에 따라서


하나씩 주어지는것 같다. 근데 왜 저건 입력할때마다 바뀌지..? 싶다가...


중요한 사실을 하나 잊어버렸다는걸 깨달았다. 바로 content-length....


바디부분에 올 문자의 갯수를 content-length부분에 정확한 갯수를 써줘야 하는데


입력할때마다 달라서 다른 범위만큼 입력되는 거였다.


예로 content-length=8이면 user_id=adm;%00in이라고 프록시에 적어 보내도


user_id=까지만 서버가 받아들여 아이디는 입력하지 않은 것과 같다. 이런 실수를.......


전에 이거 중요하다고 포스팅하기까지 한것 같은데 벌써 까먹다니..


어쨋든 content-length부분을 맞춰주고 user_id를 adm;%00in같이 입력해보면 에러가 뜬다. 


주요 부분.


Stack trace: #0 /home/www/db_is_really_good/sqlite3.php(7): SQLite3->open('./db/wkrm_adm;?...')


sqlite3.php라는 점에서 보아 sqlite3 db를 쓰며, php로 만들어진 페이지이다.


./db/wkrm_adm;?...라는 파일을 열수없다. 라는 에러인데...


저 경로로 들어가봐도 아무것도 없다(404에러) 경로를 자세히 살펴보는데 뭔가 이상하다.


adm;?... 이라는 경로가 이상하다. 생각해보니 내가 아이디를 입력할때 이렇게 입력했다.


adm;%00in 그러면 adm;까지 입력되고 %00이 널바이트 처리되서 이상하게 변형되서


에러가 발생한것 같다. 근데 ./db/wkrm_admin으로 들어가봐도 404에러가 뜬다.


./db/wkrm_admin.php해도 에러가 난다.


sqlite3는 솔직히 잘 몰라서 검색해보니 sqlite3는 확장자가 .db인것같다.


./db/wkrm_admin.db로 입력하니 파일이 하나 다운받아지고 안에 flag가 들어있다.


sqlite3는 처음이라서 몇일 헤맨것같다......


교양 레포트써야되는데 이거때메 답답해서 풀었는데 푼 보람이 있는듯


'webhacking > sql, sql injection' 카테고리의 다른 글

wargame.kr tmitter  (0) 2014.10.04
webhacking.kr 18번.  (0) 2014.10.03
information_schema  (0) 2014.09.28
wargame.kr lonely_guys  (0) 2014.09.28
rubiya.kr 19번 다른방법.(원래방법?)  (3) 2014.09.11