리얼월드 (Real world)

웃긴대학 SQL Injection 취약점 제보

2018. 2. 4. 16:37

최근에 웃긴대학 사이트에서 SQL Injection 취약점을 발견하게 되어 정리하겠다. 


===== 취약점 요약 =====

취약점 유형 : SQL Injection

취약점 연계 : DB Leak, Get file contents

===================



웃긴대학은 세기 말부터 존재하던 사이트이기 때문에 오랜 시간을 버티면서 취약점을 견고히 막으려 보안을 강화해왔을 것이다. 나도 XSS 취약점 말고 꾸준히 SQL injection 취약점을 찾아왔지만, 계속 보이지 않다가 며칠 전에서야 찾을 수 있게 되었다. 


취약점 벡터 (Vector)

해당 취약점은 `내 사물함`에서 `사진첩` 기능에서 일어나는 취약점이다.


http://mini.humoruniv.com/album_read.html?nick=%B4%CF%B0%A1%BE%C6%B4%C2%B1%D7%BE%D6&album=27086&number=207489&pg=0 


해당 링크로 들어가면, '니가아는그애'라는 닉네임을 가진 유저의 사물함을 볼 수 있다. 해당 링크는 절대로 이상한 것이 아니라, 학교 친구가 이상한 글에 와드(ㅇㄷ)를 박은 것을 박제하여 놓은 것이다. 


여기에서 album 파라미터에 sql injection test를 해보았다. 


[*] POC : http://mini.humoruniv.com/album_read.html?nick=%B4%CF%B0%A1%BE%C6%B4%C2%B1%D7%BE%D6&album=27086+or+sleep(1)=0%23&number=207489&pg=0


sleep 함수를 써서 테스트를 해보았는데, 예상대로 sleep 현상이 일어나는 것을 확인할 수 있었다. 

Time based SQL Injection이 성립하는 것을 알 수 있었다. Time based SQL Injection 말고도 다른 기법들을 사용하려 노력했지만, 이상하게도 다 잘되지 않아서 Time based SQL Injection을 사용하여 Database Leak을 하기로 하였다. 


아래의 사진은 Time Based SQL Injection을 이용해서 DB Table을 긁어온 것이다. 



(Table 은 나름대로 민감한 정보이기 때문에 모자이크 처리를 하였다.)

취약점 연계  

 이 취약점이 그저 SQL Injection의 순수 기능인 DB leak만 가능한다고 하면 조금 아쉬운 부분이 없지 않아 있었겠지만, LOAD_FILE() 함수가 가능하다는 것을 알게 되었다. 

 LOAD_FILE() 함수를 이용해서 ( SELECT LOAD_FILE('/etc/passwd') ) 쿼리를 만들어 시도하여 보았더니 /etc/passwd 파일을 볼 수 있었다. 해당 함수를 이용할 수 있었기 때문에, Guessing으로 index.html 등의 소스를 볼 수 있는 등의 위험한 공격으로 연계할 수 있었다.


취약점 제보  

 해당 취약점을 2018년 2월 4일에 웃긴대학 관리자님께 이메일로 전달드렸다.

 


코드게이트 진출과 더불어 연속적인 대경사에 기분이 좋아진다. 


2018년 2월 7일 오전 9시에 아래와 같은 답변을 받았다.