SQL 주입의 본질이 문자열을 이어붙이는 것이라면 주입할 수 있는 모든 것의 본질은 문자열을 이어붙이는 것입니다. 주입의 일종으로 LDAP 주입도 예외는 아닙니다. 괄호를 이어붙이는 것입니다(SQL 주입). 또한 괄호를 연결하지만 문자열을 연결한다고 말하는 것이 더 일반적입니다.
환경 구성 장에서는 bee-box의 LDAP 환경 구성에 대해 자세히 논의했습니다. 사격장 실습 장에서는 PHP와 LDAP 간의 연결 프로세스에 대해 자세히 설명하고, Bee-Box에서 사용되는 특수 기능을 소개했습니다. 중간 및 괄호 연결을 위한 몇 가지 기술.
먼저 bwapp의 ldap 사격장의 로그인 프로세스에 대해 이야기해 보겠습니다.
우선, 이것은 LDAP 로그인 인터페이스입니다. URL은 http://192.168.3.184/bWAPP/ldap_connect.php입니다. . 이 php를 직접 살펴보세요. 파일에 무엇이 쓰여져 있나요?
ldap_connect.php 파일의 코드 133부터 시작하여 5개의 변수는 $message, $login, $password, $server, $dn입니다.
5개 변수 중 첫 번째 변수의 용도는 무엇인가요? 두 번째는 LDAP 서버에 로그인하기 위한 사용자 이름, 세 번째는 비밀번호, 네 번째는 서버 주소, 다섯 번째는 고유 이름입니다(설명: 전체 LDAP 경로) ).
첫 번째 if 문은 로그인 LDAP 양식을 지우는 것이고, 두 번째 if 문은 5개의 변수가 null인지 확인하는 것입니다. 이것들은 모두 else에 있습니다. if 및 else 문을 하나씩 실행해 보겠습니다.
먼저 첫 번째 if 앞에 있는 ldap_connect, ldap_set_option, ldap_bind 세 가지 함수를 살펴보고, 이 세 가지 함수의 기능을 차례로 설명해보세요.
ldap_connect: ldap 데이터베이스에 연결하는 데 사용되며 형식은 다음과 같습니다.
$server = “localhost”
$LDAPCONN=LDAP_Connect($server)
$LDAPCONN의 반환 값이 숫자 유형인 경우 반환 결과가 0이면 연결이 실패하고, 다른 값으로 연결이 성공합니다.
ldap_set_option($link_identifier,$option, &$retval): 세 개의 매개변수를 받습니다
$link_identifier
ldap_connect() 함수는 LDAP 연결 식별자를 반환합니다(LDAP 연결이 성공적인지 확인하기 위해)
$option은 value 다음과 같습니다.
LDAP_OPT_DEREF(int): 검색 시 별칭 처리 방법 값 범위는 다음과 같습니다. LDAP_DEREF_NEVER(0, 기본값), LDAP_DEREF_SEARCHING(1), LDAP_DEREF_FINDING(2), LDAP_DEREF_ALWAYS(3)
LDAP_OPT_NETWORK_TIMEOUT (int): 네트워크 시간 초과 초, LDAP_NO_LIMIT(0, 기본값)는 시간 초과가 발생하지 않음을 의미합니다.
LDAP_OPT_PROTOCOL_VERSION(int): 사용된 LDAP 프로토콜 버전을 지정합니다. 값 범위는 LDAP_VERSION2(2, 기본값), LDAP_VERSION3(3)입니다.
LDAP_OPT_REFERRALS(bool): LDAP 라이브러리가 LDAP 서버에서 반환된 참조를 자동으로 따르는지 여부입니다. 값 범위는 TRUE(1, 기본값), FALSE(0)입니다.
&$retval은 옵션 값을 허용하는 변수입니다
예를 들어 bwapp의 코드는
ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION, 3);
이 코드의 의미는 LDAP 연결이 성공하면 그런 다음 LDAP를 지정하십시오. 사용되는 프로토콜은 버전 3입니다. (여기서 자세히 설명할 필요는 없습니다. 모두 적용 가능한 형식입니다.)
ldap_bind($link_identifier,$bind_rdn,$bind_password)
$link_identifier: ldap_connect() 함수에 의해 반환된 LDAP 연결 식별자(LDAP가 연결 성공)
$bind_rdn : 지정된 rdn, 즉 로그인 경로를 사용합니다. 예: cn=admin,dc=bwapp,dc=local
$bind_password: 로그인 비밀번호를 지정합니다.
ldap_search($link_identifier, $dn,$filter): LDAP 디렉터리 검색 함수는 일반적으로 다른 함수에서 $result_identifier로 참조하는 결과 집합의 리소스 설명자를 성공적으로 반환하고 실패 시 FALSE를 반환합니다.
$link_identifier: ldap_connect() 함수에서 반환된 LDAP 연결 식별자(연결 성공 여부 확인)
$dn: 검색할 디렉터리의 DN
$filter: 검색 필터. 예를 들어 "(objectClass=*)"는 모든 항목을 검색한다는 의미입니다(읽기 기능의 경우 모든 속성을 의미함).
bwapp의 소스 코드: ldap_search($ds, $dn,$filter), 여기서 $ds=ldap_connect(),
$dn=”DC=bwapp,DC=local”,$filter=(cn=*) (즉, 모든 범위의 cn), 이 세 매개변수는 ldap_search 함수가 현재 서버의 모든 디렉터리가 (bwapp에 상대적으로) 쿼리된다는 것을 나타냅니다.
ldap_count_entries($link_identifier,$search): 쿼리 결과 수를 반환합니다.
$link_identifier: dap_connect() 함수에서 반환된 LDAP 연결 식별자(연결 성공 여부 확인)
$search: = ldap_search( $link_identifier, $ dn, $filter)는 쿼리 결과 집합을 반환합니다.
이제 기능이 거의 분석되었습니다. 이 연결 파일의 일반적인 아이디어를 설명하겠습니다.
라인 149부터 라인 163까지, 코드는 얻은 다양한 값이 비어 있는지 여부를 확인합니다. 비어 있으면 프롬프트 메시지가 표시됩니다.
165~198행은 로그인 성공 여부를 확인하는 데 사용됩니다. 165~184행은 LDAP 서비스가 존재하는지 확인하는 데 사용됩니다. 데이터베이스 이름).
200번째 줄부터 236번째 줄까지 해당 dn이 존재하는지, 즉 해당 LDAP 경로가 존재하는지 여부를 확인하는 것입니다. 존재하지 않으면 해당 프롬프트 메시지가 표시됩니다. .php, 즉 LDAP 쿼리입니다. ldapi에서 쿼리 결과를 가져온 후 결과가 테이블로 출력됩니다.
테이블이 출력되는 곳은 ldapi.php 파일입니다. 다음으로 ldapi.php의 코드를 살펴보세요.
231번째 줄부터 바로 시작하세요. 위에서 언급한 것처럼 231번째 줄부터 240번째 줄까지 LDAP 디렉토리를 바인딩해 주세요. 코드가 이해가 안 되시면 위에서 LDAP 바인딩 부분을 읽어보시면 됩니다.
LDAP 디렉터리가 성공적으로 바인딩되면 쿼리 코드는 242행부터 시작됩니다.
POST 매개변수 사용자의 값을 수신하여 별칭($search_field_1, $search_field_2, $search_field_3) 설정까지, 규정 필터 ($filter) (필터는 SQL 문과 유사한 쿼리 문입니다.) 구문 규칙은 다음과 같습니다.
Any | * | 은 NULL을 제외한 모든 값과 동일할 수 있는 필드를 나타냅니다.괄호 |
---|---|---|
필터를 | & | |
또는 | | 필터를 결합합니다. 해당 시리즈의 조건 중 하나 이상이 true여야 합니다. | |
Non | ! | 필터 기준과 일치하는 모든 항목을 제외하세요. |
위 내용은 Bee-Box LDAP 인젝션을 이용한 사격장 연습 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!