>  기사  >  데이터 베이스  >  간단한 수동 SQL 주입 프로세스에 대해 이야기해 보겠습니다.

간단한 수동 SQL 주입 프로세스에 대해 이야기해 보겠습니다.

WBOY
WBOY앞으로
2022-01-28 17:02:474606검색

이 기사는 주입 지점 결정 및 주입 유형 결정과 관련된 문제를 포함하여 SQL의 수동 주입과 관련된 문제를 다루는 모든 사람에게 도움이 되기를 바랍니다.

간단한 수동 SQL 주입 프로세스에 대해 이야기해 보겠습니다.

삽입 지점 결정

1. 작은따옴표 방법: 페이지가 정상적으로 표시되지 않고 브라우저가 일부 예외 정보를 반환하는 경우 링크에 SQL이 있을 수 있음을 의미합니다. 주입 취약점

2.1 =1 및 1=2: URL 뒤에 get 매개변수에 1=1을 추가하면 표시가 정상이고, 1=1을 1=2로 바꾸면 표시가 비정상이어서 SQL 주입이 있음을 나타냅니다. 웹 페이지에서.

삽입 유형 결정

1. 숫자 주입: 주입된 변수의 값은

select * from user where id=$id;

와 같이 따옴표로 묶을 필요가 없습니다. 문자 주입: 주입된 변수는 `와 같이 따옴표로 묶입니다.

select * from user where username='$username';`

주입시 주의하세요. 따옴표를 닫으세요.
3. 검색형 주입:

select * from user where username like '%$pass%';

sql문을

select * from user where username like '%$pass%' union select语句 '%%';

로 구성합니다. 즉, 전달된 변수는 pass%' Union Select 문 '%로 클로저를 형성합니다.

인젝션 포인트 제출 방법 결정

패킷 캡처를 통해 인젝션 포인트 제출 방법이 get, post 또는 cookie인지 결정합니다.

order by를 사용하여 필드 쿼리

order by 문을 사용하여 데이터베이스에 있는 필드 수를 쿼리하면 지속적인 시도를 통해 데이터베이스 필드 수를 확인할 수 있습니다. 예를 들어 oeder를 9로 입력하면 페이지에서 다음을 보고합니다. 오류가 발생하고 order by 8을 입력하면 페이지가 정상적으로 표시됩니다. 즉, 데이터베이스에 8개의 필드가 있습니다.
예를 들어 쿼리 문은 다음과 같습니다. select * from user where id='$id';select * from user where id='$id';
可以构造下面的输入:(id = ') ' order by 3 '+--+
即查询语句为:select * from user where id='' order by 3 '--'

使用联合查询来查询当前数据库、用户、版本信息

使用 union select 语句来查询当前使用用户 user() , 数据库database() ,数据库版本 version() ,服务器操作系统的@@version_compile_os等信息
version版本十分重要,如果版本在5.0以上,就可以使用information_schema库来轻易的查询想要的信息
构造语句:

select * from user where id='' union select user(),database(),version()+--+;

查询当前数据库中的表,列和值

5.0 版本以上的mysql数据库自带的information_schema库中存储着数据库中所有的表名和列明信息。
下面我们就应该根据第五步查询的当前数据库的结果(如数据库为database_1)名下所有的表名tables的信息。
Information_schema.tables :记录着数据库中所有表名信息的表。
构造的查询语句如下:

Select * from user where id='' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database_1;--

查询的结果为:第五步查询的当前数据库中的表名信息。
Information_schema.columns: 다음 입력을 구성할 수 있습니다: (id = ') ' order by 3 '+ --+<br> 즉, 쿼리 문은 다음과 같습니다. <code>select * from user where id='' order by 3 '--'

Union 쿼리를 사용하여 현재 데이터베이스를 쿼리하고, 사용자 및 버전 정보

Union 사용 select 문은 현재 사용자 user(), 데이터베이스 데이터베이스(), 데이터베이스 버전 버전(), @@version_compile_os 및 기타 서버 운영 체제 정보를 쿼리하는 데 사용됩니다. 매우 중요합니다. 버전이 5.0 이상인 경우 information_schema 라이브러리를 사용하여 원하는 정보를 쉽게 쿼리할 수 있습니다.

명령문 구성:

Select * from user where id='' union selcet 1,group_concat(column_name),3 from information_schema.columns where table_name=table_1;--
현재 데이터베이스의 테이블, 열 및 값 쿼리 information_schema 라이브러리 mysql 데이터베이스 버전 5.0 이상과 함께 제공되는 데이터베이스에는 모든 테이블 이름과 나열된 정보가 저장됩니다. 🎜 다음으로 5단계의 현재 데이터베이스 쿼리 결과에 따라 tables라는 이름의 모든 테이블의 정보를 확인해야 합니다(예: 데이터베이스는 Database_1). 🎜Information_schema.tables: 데이터베이스의 모든 테이블 이름 정보를 기록하는 테이블입니다. 🎜 구성된 쿼리문은 다음과 같습니다. 🎜
Selcet * from user where id='' union select 1,column_1,column_2 from tables;--
🎜 쿼리 결과는 다섯 번째 단계에서 쿼리한 현재 데이터베이스의 테이블명 정보입니다. 🎜Information_schema.columns:는 데이터베이스에 있는 모든 테이블의 열 이름 정보를 기록합니다. 🎜 다음으로 위 쿼리에서 얻은 테이블 이름 정보를 기반으로 해당 열 이름 정보를 쿼리해야 합니다(예: table is table_1) 구성문은 다음과 같습니다. 🎜rrreee🎜컬럼명을 쿼리한 후, 조인트 쿼리를 통해 테이블에 저장된 정보를 직접 알아낼 수 있습니다. 지정된 데이터베이스 지정을 쿼리하려면 🎜rrreee🎜 문을 구성하세요.🎜🎜추천 학습: 🎜mysql 비디오 튜토리얼🎜🎜

위 내용은 간단한 수동 SQL 주입 프로세스에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제