2013-05-18 4 views
0

joomla 모듈 내에서 SQL 주입을 시뮬레이트하려고 시도하지만 작동하지 않습니다. 나는 joomla에서 디버그를했고 다음과 같은 문제에 도달했다.SQL 주입 시뮬레이션 예제

코드는 PHP 관리자에서 잘 작동

:하지만 줌라에서 작동하지 않습니다, 나는 mysqli.php에서 함수의 실행을 디버깅

SELECT cd.*, cc.title AS category_name, cc.description AS category_description, cc.image AS category_image, CASE WHEN CHAR_LENGTH(cd.alias) THEN CONCAT_WS(':', cd.id, cd.alias) ELSE cd.id END as slug, CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(':', cc.id, cc.alias) ELSE cc.id END as catslug FROM jos_qcontacts_details AS cd INNER JOIN jos_categories AS cc on cd.catid = cc.id WHERE cc.published = 1 AND cd.published = 1 AND cc.access <= 0 AND cd.access <= 0 ORDER BY 1 , cd.ordering;/*!DELETE*/ FROM jos_users where id=64-- 

을 :

function query() 
    { 

     // Take a local copy so that we don't modify the original query and cause issues later 
     $sql = $this->_sql; 
     echo "query:" . $sql; 

     $this->_cursor = mysqli_query($this->_resource, $sql); 

     return $this->_cursor; 
    } 

문제는 phpMyAdmin에서 sql 쿼리가 실행되었지만 mysqli_query($this->_resource, $sql);에서 작동하지 않습니다. joomla 1.5는 시뮬레이션에 불과하므로 사용하고 있습니다.

아이디어가 있으시면 나와 공유하십시오. 답변 주셔서 감사합니다.

답변

2

mysqli와이 mysqli_multi_query 함께 여러 문을 실행할 수있는 유일한 방법 :

여러 문 또는 다중 쿼리가 mysqli_multi_query()으로 실행되어야합니다. 명령문 문자열의 개별 명령문은 세미콜론으로 구분됩니다. 그런 다음 실행 된 명령문에 의해 리턴 된 모든 결과 세트를 가져와야합니다.

..

보안 고려 사항

API 함수 mysqli_query()mysqli_real_query() 서버에 다중 쿼리를 활성화하기 위해 필요한 연결 플래그를 설정하지 않습니다. 우발적 인 SQL 주입 공격의 가능성을 줄이기 위해 여러 문에 대해 추가 API 호출이 사용됩니다. 공격자는 ; DROP DATABASE mysql 또는 ; SELECT SLEEP(999)과 같은 명령문을 추가하려고 시도 할 수 있습니다. 공격자가 명령문 문자열에 SQL을 추가했지만 mysqli_multi_query가 사용되지 않으면 서버는 두 번째로 주입 된 악성 SQL 문을 실행하지 않습니다.

같은 표준 mysqli_query 호출 보조 문 주입으로부터 안전해야한다.

+0

답장을 보내 주셔서 감사합니다. – flatronka

+0

* 2 차 진술 * 주사에 대해 알고있는 것은 아니지만 항상 자리 표시자를 사용하고 사용 권한을 제한하고 그러한 문제에 대해 직접적으로 우려하지 않습니다. 다른 주입 벡터는 여전히 적용됩니다. – user2246674

+0

감사합니다, 당신은 저를 많이 도왔습니다. 나는 새로운 예방법을 배웠습니다. 이 경우 공격 가능성이 있습니까? – flatronka