문제 클릭을 해보면 유저와 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 |