이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위 입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
A1 - SQL Injection - Stored (Blog)
SQL Injection은 사용자가 입력한 값을 서버에서 검증하지 않고 데이터베이스 쿼리 일부분으로 인식하여 데이터베이스의 정보가 노출되거나 인증이 우회되는 취약점 입니다. SQL Injection은 사용자가 데이터를 입력할 수 있는 곳 어디에서든 발생할 수 있습니다.
비박스 SQL Injection -Stored (Blog) 취약점 진단 페이지 화면 입니다.
Stored 공격 방식
접속자가 많은 웹 사이트를 대상으로 게시판 및 글을 저장할수 있는 공간에 공격자가 취약점이 있는 웹 서버에 공격용 스크립트를 입력시켜 놓으면, 방문자가 악성 스크립트가 삽입되어 있는 페이지를 읽는 순간 방문자의 브라우저를 공격하는 방식 입니다.
텍스트 입력 공간에 작은따옴표(')를 입력하여 취약점이 있는지 확인을 하였습니다. SQL Injection 공격이 가능하면 위와 같이 SQL 오류 메시지를 출력을 하게 됩니다.
여기서 확인된 오류메시지로 데이터베이스 서버가 'MySQL'이라는 정보를 알수 있으며, 입력하지 않은 'bee')'라는 오류 내용으로 블로그에 글을 입력하여 사용자의 아이디를 가장 마지막에 저장하는 점을 파악할수 있습니다.
이번에는 작은따옴표와 다른 글을 함께 입력을 해 보았습니다.
오류메시지 :'sql injection test', 'bee')'
소스코드
$sql = "INSERT INTO blog (date, entry, owner) VALUES (now(),'" . $entry . "','" . $owner . "')";
글을 입력시 다음과 같이 데이터베이스로 값이 전달된다는 것을 알수 있습니다.
('sql Injection test', 'bee')
쿼리의 마지막에 사용자의 아이디가 있으므로 작은따옴표와 괄호를 같이 사용하여 회원 순서 번호가 1번인 회원의 비밀번호를 출력하는 쿼리를 만들어 보았습니다. 다음과 같이 쿼리를 날리면 Owner 항목에 회원 순서가 1번인 회원의 비밀번호를 해시 값으로 출력하는 것을 확인 할수 있습니다.
테스트를 해보시는 분들은 앞에 블로그 내용을 참고하여 버전정보, 테이블 정보 등을 출력을 해보시기 바랍니다.
예시) 버전정보 표시
- ', (select @@version)) #
'Code::Security > 비박스(BWAPP)' 카테고리의 다른 글
비박스(bWAPP) SQL Injection - Stored (User-Agent) (0) | 2020.01.03 |
---|---|
비박스(bWAPP) SQL Injection - Stored (SQLite) (0) | 2020.01.03 |
비박스(bWAPP) SQL Injection (SQLite) (0) | 2019.11.15 |
비박스(bWAPP) SQL Injection (Login Form/User) (0) | 2019.11.14 |
비박스(bWAPP) SQL Injection (Login Form/Hero) (0) | 2019.10.24 |