>  기사  >  SQL 주입 공격을 구현하는 방법

SQL 주입 공격을 구현하는 방법

(*-*)浩
(*-*)浩원래의
2019-05-10 17:12:5016641검색

이 글에서는 주로 SQL 인젝션의 의미와 SQL 인젝션을 수행하는 방법에 대해 중점적으로 설명합니다. 해당하는 사람들은 주로 테스터입니다. SQL 주입을 수행하는 방법을 이해하면 로그인, 게시 및 기타 모듈에서 SQL 공격 취약점을 테스트하는 데 도움이 됩니다. SQL 주입을 방지하는 방법은 개발자가 이해해야 합니다. 원리를 테스트하고 명확하게 하면 버그의 원인을 더 철저하게 이해할 수 있습니다~ 자, 더 이상 고민하지 말고 본론으로 들어가겠습니다~

추천 과정: MySQLTutorial#🎜 🎜## 🎜🎜#

SQL 주입 공격을 구현하는 방법

SQL 주입(공격)을 이해하는 방법은 무엇입니까?

SQL 인젝션은 입력 매개변수에 SQL 코드를 추가해 서버에 전달해 구문 분석 및 실행하는 공격 기법이다.

SQL 인젝션 공격은 입력 매개변수를 필터링하지 않고 직접 SQL 문에 연결해 분석하는 방식으로, 실행 시 예상치 못한 동작에 도달하는 것을 SQL 인젝션 공격이라고 합니다.

SQL 주입 공격 원칙:

SQL 주입 공격은 애플리케이션이 입력 콘텐츠를 사용하여 데이터베이스에 액세스하기 위해 동적 SQL 문을 구성할 때 발생합니다. . 필터링되지 않은 사용자 입력이 포함된 문자열로 전달되는 저장 프로시저를 코드에서 사용하는 경우에도 SQL 주입이 발생할 수 있습니다. SQL 주입을 통해 공격자는 애플리케이션 로그인을 사용하여 데이터베이스에서 명령을 실행할 수 있습니다.

애플리케이션이 과도한 권한을 가진 계정을 사용하여 데이터베이스에 연결하는 경우 이 문제는 심각해질 수 있습니다. 일부 형식에서는 사용자가 입력한 내용이 동적 SQL 명령을 구성하는 데 직접 사용되거나 저장 프로시저의 입력 매개 변수로 사용됩니다. 이러한 형식은 특히 SQL 주입 공격에 취약합니다. 많은 웹사이트 프로그램을 작성할 때 사용자 입력의 적법성이 판단되지 않거나 프로그램 내 변수가 제대로 처리되지 않아 애플리케이션의 보안 위험이 발생합니다. 이런 방식으로 사용자는 데이터베이스 쿼리 코드를 제출하고 프로그램에서 반환된 결과를 기반으로 일부 민감한 정보를 얻거나 전체 서버를 제어할 수 있으므로 SQL 주입이 발생합니다.

SQL 인젝션은 일반 WWW 포트에서 접근하는데, 표면적으로는 일반 웹페이지 접근과 별반 차이가 없어 현재 시중에 나와 있는 방화벽에서는 SQL 인젝션에 대한 경고를 발행하지 않습니다. 관리자가 확인하지 않습니다. IIS 로깅 습관으로 인해 오랫동안 눈치채지 못한 채 해킹당할 수 있습니다. 그러나 SQL 주입 방법은 매우 유연하며 주입 중에 예상치 못한 상황이 많이 발생하므로 원하는 데이터를 성공적으로 얻으려면 영리한 SQL 문을 구성해야 합니다.

SQL 주입은 어떻게 발생하나요?

1. 백엔드 데이터베이스를 크래킹하는 것은 웹사이트에서 민감한 정보를 훔치는 데 가장 일반적으로 사용되는 방법입니다.

2. 주입은 데이터베이스의 저장 프로시저를 사용하여 권한 상승 및 기타 작업을 수행할 수 있습니다.

3 공격자는 SQL 서버에 전송된 입력 매개변수를 사용하여 실행 파일을 구성합니다. SQL 코드(요청 받기, 게시 요청, http 헤더 정보, 쿠키 추가 가능)

SQL 주입 공격은 어떻게 수행하나요?

PHP 프로그래밍 언어와 mysql 데이터베이스를 예로 들어 SQL 인젝션 공격의 구축 기술과 구축 방법을 소개합니다

1. 🎜## 🎜🎜#브라우저 주소 표시줄에 다음을 입력하세요: learn.me/sql/article.php?id=1, 이것은 가져오기 인터페이스이며, 이 요청을 보내는 것은 쿼리 문을 호출하는 것과 같습니다:

$sql = "SELECT * FROM article WHERE id =",$id
# 🎜🎜# 일반적인 상황에서는 ID=1인 기사 정보가 반환되어야 합니다. 그런 다음 브라우저 주소 표시줄에 learn.me/sql/article.php?id=-1 OR 1 =1을 입력하면 이는 SQL 삽입 공격이며 모든 기사의 관련 정보를 반환할 수 있습니다. 왜 이런 일이 발생합니까?

이것은 id = -1이 항상 false이고, 1=1이 항상 true이고, 모든 where 문이 항상 true이기 때문입니다. 따라서 where 조건은 where 조건을 추가하지 않는 것과 동일합니다. 쿼리 결과는 전체 테이블의 내용을 기준으로 동일합니다

2. 문자열 삽입

다음과 같은 사용자 로그인 시나리오가 있습니다. 로그인 인터페이스에는 사용자 이름과 비밀번호 입력 상자가 포함됩니다. , 제출 버튼이 있습니다. 사용자 이름과 비밀번호를 입력하고 제출하세요.

로그인 시 learn.me/sql/login.html 인터페이스를 호출하여 먼저 데이터베이스에 접속한 후, 가지고 있는 사용자 이름과 비밀번호에 대한 매개변수 확인을 수행하는 게시물 요청입니다. 백그라운드에서 요청 매개변수를 게시합니다. 즉, SQL의 쿼리 프로세스입니다. 올바른 사용자 이름과 비밀번호는 user 및 pwd123이라고 가정합니다. 올바른 사용자 이름과 비밀번호를 입력하고 제출합니다. 이는 다음 SQL 문을 호출하는 것과 동일합니다.

SELECT * FROM user WHERE username = 'user' ADN password = 'pwd123'
사용자 이름과 비밀번호는 모두 문자열이므로 SQL 주입 방법 즉, 매개변수에 의해 전달된 데이터를 mysql에서 주석이 달린 문자열로 변환하는 것입니다. mysql에는 2가지 주석 방법이 있습니다:

1) '#': '#' 뒤의 모든 문자열은 주석으로 처리됩니다.

사용자 이름 입력: user '# (단일 따옴표는 사용자 왼쪽의 작은 따옴표를 닫습니다. 111과 같이 원하는 대로 비밀번호를 입력한 다음 제출 버튼을 클릭하세요. SQL 문과 동일:

SELECT * FROM user WHERE username = 'user'#'ADN password = '111'
'#'은 주석 처리되어 있습니다:

SELECT * FROM user WHERE username = 'user'
2)'-- ' (-- 뒤에 공백이 있습니다) : '--' 뒤의 문자열은 주석으로 처리됩니다.

사용자 이름 입력: user'-- (- 뒤에 공백이 있고 user 왼쪽의 작은따옴표가 닫혀 있음을 주의하세요. 작은따옴표로) 111과 같이 원하는 비밀번호를 입력한 후 제출 버튼을 클릭하세요. SQL 문에 해당:

SELECT * FROM user WHERE username = 'user'-- 'AND password = '111'
SELECT * FROM user WHERE username = 'user'-- 'AND password = '1111'
'-- '는 주석 처리되어 다음과 같습니다.

SELECT * FROM user WHERE username = 'user'

因此,以上两种情况可能输入一个错误的密码或者不输入密码就可登录用户名为'user'的账号,这是十分危险的事情。

위 내용은 SQL 주입 공격을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.