본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 2-7.SQL 인젝션 [Stored (Blog)]

by Robert8478 2023. 12. 12.

이 페이지는 사용자가 입력한 내용을 저장하고 테이블 형태로 출력한다.

빈칸에 ' 를 입력 후 버튼을 눌러 SQL 에러가 나는지 확인하자. 에러 발생 시 SQL 인젝션에 취약하다. 또한, MySQL을 쓰는 서버인것을 확인한다.
또한, ​bee') 라는 오류 내용을 보고 사용자의 아이디를 가장 마지막에 저장한다는 점도 유추할 수 있다.
bee는 표에서 가장 왼쪽에 계속 표시되었으므로 이 칸에 SQL 쿼리를 넣는다면 값을 노출시킬 수도 있을것이다.

버프슈트로 확인해보니 변수는 entry와 blog를 사용하는듯 하다. 텍스트 입력 공간에 입력한 값이 entry로 넘어간다.
오류 메시지를 살펴보기 위해 '1 이라는 값을 entry 변수에 넣고 forward 해보자.

그랬더니 '1','bee')' 라는 오류 메시지가 나왔다. 잘못된 문법 사용으로 오류가 발생한 것으로 작은따옴표의 짝이 맞지 않아 발생하는 오류이다.
쿼리의 마지막에 사용자의 아이디가 있으므로 작은따옴표와 괄호를 사용하여 쿼리를 만들어보자.

hi',(select password from bWAPP.users where id=1 limit 0,1))#
이와 같은 구문을 입력하여 id가 1번인 계졍의 비밀번호 해시값을 알아내었다.

, 를 입력한 것은 ,'bee' 가 본 쿼리였으므로 이를 대체하기 위해 ,를 넣어주어야 하고 또한 )가 하나 더 들어가는 것도 마찬가지다. 그리고 뒤에 남게되는 ','bee')' 는 #이 주석처리 시키므로 쿼리가 정상적으로 수행되었다.



[난이도 중,상]
난이도 중의 대응방안 - addslashes 함수 (' " 등 특수문자에 \ 추가하여 필터링)
난이도 상의 대응방안 - mysql_real_escape_string 함수 (여러 특수문자들에 \ 추가하여 필터링)