네트워크 보안 Rookie Learning-SQL의 취약점 (5)

오늘 우리는 mysql 와이드 바이트 바이 패스 주입에 대해 이야기 할 것입니다. 오래된 규칙, 먼저 어떤 상황에서 그것을 사용 해야하는지 이해합시다.
mysql에는 매직 따옴표라는 스위치가 있으며, php 설정에서 phpstudy는 magic_quotes_gpc라고합니다. (addlash ()와 동일한 기능을 가지고 있으며, 이는 addlash ()도 와이드 바이트를 사용하여 주입을 우회 할 수 있음을 의미합니다) :
여기에 사진 설명 삽입
매직 따옴표는 이스케이프하려면 허용되는 작은 따옴표, 큰 따옴표, 백 슬래시 및 NULL 앞에 백 슬래시를 추가하십시오.
(이 기사를 참조 할 수 있습니다 : https://www.cnblogs.com/huyihao/p/6217801.html)
주사에 어떤 영향을 미칩니 까? 예 (아래 그림 참조) :
여기에 사진 설명 삽입
따라서 이것은 주사에 큰 영향을 미칩니다.
영향이 얼마나 큰지 확인하기 위해 두 가지 작은 실험을 해봅시다. 첫 번째 실험은 다음 문장입니다.

http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' and 1=1--+

개봉 전후의 차이점을 살펴 보겠습니다.
개봉 전 : 개봉 후
여기에 사진 설명 삽입
: 여기에 사진 설명 삽입
브라우저에서 반환 된 결과가 두 번 동일하다는 것을 발견했습니다. 상황은 어떻습니까? 이전에 말한 내용이 잘못되었을 수 있습니까? 실제로는 아닙니다. 다시 분석해 보겠습니다 (그림 참조). 여기에 사진 설명 삽입
이 문제가 약간 익숙하다고 생각 하십니까 ? "Network Security Rookie Learning Vulnerabilities-SQL (1)"에서이 문제에 대해 설명했습니다. (그림에서 볼 수 있듯이, 영향이 없다면 뒤로 돌아가서 뒤집고 링크를 열어 학습하고 배울 수 있습니다.) 여기서 여기에 사진 설명 삽입
동일한 원칙은 $ sql = "SELECT * FROM users WHERE id = '2'LIMIT 0,1"을 실행하는 것과 같습니다.
가능합니다. 어떤 학생들은 약간 어지러워서 이전 학생들처럼 이해할 수 있습니다. 수박으로 써도 :

`$sql=SELECT * FROM users WHERE id=2西瓜’ LIMIT 0,1;`

문자열 인 한 여전히 동일합니다 $sql=“SELECT * FROM users WHERE id=‘2’ LIMIT 0,1”
(또 다른 요점, 이것은 주입 지점인지 확인하는 방법이기도합니다. 쓸모없는 문자를 추가하면 웹 페이지가 정상적으로 에코되어 주입 지점이 아님을 증명합니다.)
사실, 우리는 이전에 말한대로하고 싶습니다. echo 함수는 검증을 위해 사용할 수 있습니다. 구체적인 단계는 다음과 같습니다. (echo 함수는 echo에 사용되며 C 언어로는 printf, python으로 인쇄 등으로 간단히 이해할 수 있습니다.)
1. 웹 사이트 루트 디렉토리를 엽니 다.
여기에 사진 설명 삽입
2. sqli-labs-master를 입력합니다. 덜 한 폴더 여기에 사진 설명 삽입
3. 열려있는 index.php를, 다음 그림과 에코 $ SQL 장소를 추가 (I 오픈 에디트 플러스는 메모장을 열 수 사용)
여기에 사진 설명 삽입
물론, 우리가 방문을 다시이 시간을 http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' and 1=1--+볼 수있다 그래서 우리는 어떤 진술을 실행 했습니까? 자, 한번 보시죠.
개봉 전 : 개봉 후 여기에 사진 설명 삽입
: 참고로 여기에 사진 설명 삽입
수박 살펴보기 : 첫
여기에 사진 설명 삽입
번째 실험이 완료되고 두 번째 실험을 수행해 보겠습니다.이 실험의 목적은 그 영향을 확인하는 것입니다. (결국 우리가 방문한 주소는 : 개봉 http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=-2' union select 1,database(),3--+
여기에 사진 설명 삽입
: 개봉 후 : 여기에 사진 설명 삽입
이제 우리는 그 영향을 명확하게 볼 수 있습니다.
자, 매직 따옴표의 원리에 대해 이야기를 끝냈고 이제 와이드 바이트 바이 패스 주입의 원리와 사용에 대해 이야기하겠습니다.
사실 마법 인용 부호에 대해 이야기했는데 누구나이 원리를 짐작할 수 있습니다. 간단히 말해서 마술 따옴표는 \를 추가하므로 쓸모 없게 만드는 방법을 찾을 수 있습니다. Wide byte bypass injection은 뒷면을 덮기 위해 2 바이트를 사용하는 것으로, 아래 그림을 보면 쉽게 이해할 수 있습니다. (이는 이해하기 쉽지만 좀 더 정확하게 말하면 MySQL이 GBK 인코딩을 사용할 때 두 문자를 한자로 간주합니다. 물론 이전 ASCII 코드가 한자 범위에 도달하려면 128보다 커야한다는 전제 조건이 있습니다.) 여기에 사진 설명 삽입
일반적으로 와이드 바이트 노트에는 % df를 사용하십시오. 예 :
http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=-2%df%27%20union%20select%201,database(),3--+여기에 사진 설명 삽입

참고 : 와이드 바이트에 대해 첫 번째 수준을 사용하는 경우 mysql_query ( "SET NAMES gbk") 문장을 추가해야합니다. 추가하지 않으면 phpstudy 포트 일반 설정을 GBK 인코딩으로 변경하는 것을 두려워하더라도 기본적으로 utf8이됩니다. (인터넷에서 많은 기사를 찾았지만 이에 대해 언급하지 않았으며 다른 사람들에게도 알 렸습니다. )
구체적인 수정 단계는 다음과 같습니다.
1. 웹 사이트 루트 디렉토리를 엽니 다.
여기에 사진 설명 삽입
2. sqli-labs-master에 Less-1 파일을 입력합니다. 폴더
여기에 사진 설명 삽입
3. index.php를 열고 mysql_query ( "SET NAMES gbk"); 문장을 추가합니다.
여기에 사진 설명 삽입

PHP가 4 이상일 때 magic_quotes_gpc가 더 이상 사용되지 않지만, 여전히 addlash ()가 있다는 점에 주목할 가치가 있습니다.
(Ps : 모두에게 댓글을 달고주의를 기울이기를 간청합니다)

추천

출처blog.csdn.net/gqzszzy/article/details/108208663