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

[비박스를 활용한 웹 취약점 진단] 2-4.(시나리오) SQL 인젝션 [SQLMAP]

by Robert8478 2023. 12. 12.

[Sqlmap 공격 시나리오]
이번엔 Sqlmap을 이용해 beebox의 취약한 GET/Search 페이지를 공격하고 이를 통해 ​데이터베이스 관리자 계정까지 얻어보자.
공격자의 입장에서 생각하는 시나리오는 대응방안을 수립하는데에 있어 매우 중요하다.

sqlmap -u "http://192.168.56.102/bWAPP/sqli_1.php?title=" --cookie "PHPSESSID=6c5d5055066976b75b1ee7f03efeba16; security_level=0" --dbs 

위 명령어를 입력하였다. GET 방식이고 title 변수가 취약하기 때문에 -u 옵션에 ?title= 주소를 넣어주었다.
cookie 값은 버프슈트의 쿠키값을 그대로 넣었으며 --dbs 옵션을 통해 데이터베이스 정보를 얻었다.
이제 세가지 옵션을 조합해서 사용하여 데이터베이스의 권한을 확인해 볼 것이다.

[옵션]
--current-user : 현재 사용자에 대한 정보를 알려준다.
--is-dba : dba, 즉 database administrator 인지에 대해 알려준다.
--privilege : 권한에 대한 정보를 알려준다.

sqlmap -u "http://192.168.56.102/bWAPP/sqli_1.php?title=" --cookie "PHPSESSID=6c5d5055066976b75b1ee7f03efeba16; security_level=0" --current-user --is-dba --privilege

명령어를 사용하였더니 위의 current user이 root@localhost 로 되어있으며, DBA는 True로 되어있고 privilege 권한도 root급 권한을 가진것으로 보여진다. 그렇기에 데이터베이스에 대한 삭제 및 수정이 가능한 상태인 것이다.


이제 --password 옵션을 사용하고 sqlmap에서 기본 제공하는 사전파일을 이용해서 관리자 계정의 비밀번호를 탈취하자.
옵션에 대한 체크가 나오는데 y,Y,1,N 을 해주면 된다.

그랬더니 패스워드에 대한 hash 값과 그를 바로 복호화한 값인 비밀번호 bug 를 보여준다.
이제 root 계정의 패스워드가 bug 인것을 알았기 때문에 mysql에 관리자 권한으로써 로그인 할 수 있다.

mysql -h 192.168.56.102 -u root -p 명령어를 사용하고 password에 bug를 입력하여 mysql root 계정에 접속하였다.
이렇게 되면 악의적인 사용자가 데이터베이스를 조작할수 있는 권한이 생긴 것이기 때문에 큰 피해를 입을 수 있다.
데이터들을 모두 삭제하거나 데이터를 엿보고 유출할 수 있게 되는 것이다.

이처럼 작은 SQL 인젝션 취약점이라도 시나리오형식으로 본다면 큰 위험을 발생시킬 수 있다는 것을 인지하고 대응방안을 수립해야 한다.
외부에서 직접 DB에 접속하는 사례가 많지 않지만 내부에서 오픈소스 서비스를 활용한다면 내부에서도 충분히 발생할 수 있을 것이다.
이를 대비하기 위해 데이터베이스 접근 권한을 설정하고 특정 IP만 접근할 수 있도록 설정하며, 사용자 추가 시 특정 권한만 부여하도록 해야한다.