내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
2차 주입 취약점은 웹 애플리케이션에 널리 퍼져 있는 보안 취약점의 한 형태입니다. 1차 주입 취약점에 비해 2차 주입 취약점은 탐지가 더 어렵지만, 1차 주입 취약점과 동일한 공격력을 가지고 있다.
해커는 브라우저나 기타 소프트웨어에서 처리하기 위해 서버에 HTTP 데이터 패킷 요청을 제출하는 형식으로 데이터를 구성합니다. 제출된 데이터 패킷 요청에는 해커가 구성한 SQL 문이나 명령이 포함될 수 있습니다.
서버측 애플리케이션은 해커가 제출한 데이터 정보를 일반적으로 데이터베이스에 저장합니다. 저장된 데이터 정보의 주요 기능은 애플리케이션이 다른 기능을 수행하고 클라이언트 요청에 응답할 수 있도록 원본 입력 데이터를 제공하는 것입니다.
해커는 첫 번째와 다른 두 번째 요청 데이터 메시지를 서버에 보냅니다.
서버는 해커가 제출한 두 번째 요청 정보를 받은 후 요청을 처리하기 위해 데이터베이스에 이미 저장되어 있는 데이터 정보를 질의하여 처리하게 되며, 이를 통해 해커가 첫 번째 요청에서 구성한 SQL 문이나 명령이 생성됩니다. 터미널 환경에서 서비스를 실행합니다.
서버는 실행 결과 데이터 정보를 반환하며, 해커는 반환된 결과 데이터 정보를 이용하여 2차 주입 취약점이 성공적으로 악용되었는지 확인할 수 있습니다.
정리하자면, 2차 주입은 데이터베이스에 저장할 때 데이터를 필터링하지 못했기 때문에 먼저 생성된 특수 문자 요청을 제출하여 데이터베이스에 저장한 다음 두 번째 요청이 제출되면 해당 문자가 함수가 처음으로 데이터베이스에 제출되어 실행될 새 SQL 문이 형성되었습니다.sqli-labs 레벨 24를 예로 들어 보겠습니다.
sqli-labs less-24
1. 아래를 클릭하여 사용자 등록을 해주세요.
여기에 등록된 사용자 이름은 admin'#
이 시점에서 데이터베이스를 확인하면 등록된 사용자가 저장되었으며 관리자의 비밀번호는 DDD입니다.
2. 등록된 계정으로 로그인 후 비밀번호를 ccccc로 변경하세요.
이때 비밀번호가 성공적으로 변경되었다는 메시지가 표시됩니다.
이때 admin의 비밀번호는 ccccc로 변경되었으나 등록된 사용자인 admin'#의 비밀번호는 변경되지 않은 것으로 확인되었습니다.
취약점의 원인
1. 사용자 등록시 ', # 등의 특수문자는 허용됩니다.
2. 비밀번호 변경 페이지의 소스코드에서 명백한 인젝션 취약점이 발견되었습니다.
$sql = "UPDATE users SET PASSWORD='$pass', username='$username', password='$curr_pass'";
admin'# 계정으로 로그인하여 비밀번호를 변경하면 sql 문은 다음과 같이 됩니다. #다음 코드를 주석 처리하므로 사용자 admin의 비밀번호가 ccccc로 변경됩니다.
$sql = "UPDATE users SET PASSWORD='$pass', username='admin'#', password='$curr_pass'";
원본 링크: https://blog.csdn.net/qq_44159028/article/details/114325805