0x00 개요
최근 sqlmap을 인젝션 테스트에 사용할 때 이상한 현상이 발생했습니다. sqlmap의 상위 버전에서는 인젝션을 감지할 수 없는데, 하위 버전에서는 인젝션을 감지할 수 있고, 데이터가 실행될 수 있습니다. 비교 테스트 후 sqlmap 소스 코드를 살펴보니 두 개의 작은 구멍이 발견되었습니다.
0x01 시나리오 재현
삽입 지점 형식: json
..."whereparams":[{"name":"keyWord","value":"test"}]}
삽입 가능한 매개 변수: value
sqlmap 명령 :
python sqlmap.py -r sqlpk.txt –flush-session -vv
sqlmap v1.2.11을 주입할 수 없습니다
sqlmap v1.2가 성공적으로 주입되었습니다
v1.2.1과 동일 0 주입할 수 없음, v1.1.12 주입 가능
분석 결과 두 가지 함정은 다음과 같습니다.
(1) v1.2.11의 경계선.xml(/v1.2.10/v1.2.9/master)에는 퍼지 테스트가 없습니다. 쿼리(%) 및 v1.2(/v1.1.12/1.1.4/1.2.2)에 있습니다.
(2) v1.2.11(/v1.2.10/1.2.9/master)은 이 매개변수를 주입하려면(내부에 y-inject가 선택된 경우에도) json의 특정 매개변수를 *로 수동으로 설정해야 합니다. 그렇지 않으면 페이로드가 직접 따라가면 json을 주입할 수 없지만 v1.2(/v1.1.12)는 기본적으로 Enter(y)를 눌러 json의 특정 매개변수를 주입할 수 있습니다.
0x02 상세 테스트
함정(1):
먼저 sqlmap의 페이로드 구성을 이해하세요:
//사진 출처 https://www.freebuf.com/colum...
Take a v1.2의 테스트 페이로드:
사용된 페이로드: %' 및 5731=5731 및 '%'='
이것은 매우 일반적인 검색 상자 삽입입니다
V1.2의 경계.xml을 살펴보세요.
v1.2.11의 경계.xml에는 퍼지 쿼리에 대한 주입 테스트가 없습니다!
https://github.com/sqlmapproj...
그래서 v1.2.11 파일에 퍼지 쿼리의 인젝션 테스트를 추가하고 인젝션 매개변수(값 등)에 수동으로 *를 추가해서 인젝션을 하게 되었습니다. 성공적인!
추가된 버전은 첨부했습니다:
https://github.com/theLSA/sql...
pr 오탐지가 너무 많아서 해당 페이로드가 삭제되었다는 답변을 받았으나 삭제될 예정입니다. 제한적입니다.
https://github.com/sqlmapproj...
피트 포인트(2):
v1.2와 v1.2.11의 페이로드 비교:
v1.2.11이 직접적으로 나타나는 것을 볼 수 있습니다 json 끝에 페이로드를 연결합니다.
주입된 매개변수 값에 *를 수동으로 추가하세요
%22whereparams%22%3A%5B%7B%22name%22%3A%22keyWord%22%2C%22value%22%3A%22*%22%7D%5D%7D
즉, 성공적으로 주입할 수 있습니다!
0x03 결론
개인적으로 퍼지 쿼리 테스트 페이로드를 추가하는 것이 좋습니다. 거짓 긍정은 거짓 부정보다 낫고 매우 일반적인 퍼지 쿼리 삽입입니다.
json 매개변수가 나타나면 수동으로 추가해 보세요*(일부 sqlmap 버전의 경우).
sqlmap으로 테스트할 때는 -vv를 추가하는 것이 좋습니다.
도구에 너무 의존하지 마세요. 더 안전하려면 도구 + 수동 테스트를 사용해 보세요.
위 내용은 sqlmap에 대한 문제를 분석하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!