2012-03-28 3 views
3

"insert"문 (또는 데이터베이스를 변경하는 다른 문)을 MySQL "select"문으로 몰래 숨길 수 있습니까?"select"문에 "insert"를 몰래 넣을 수 있습니까?

나는 주사 취약점을 발견했기 때문에 물어 본다. 그러나 질문이 얼마나 많은 문장 이건 관계없이 한 번에 하나의 문장 만 실행할 수 있다는 덕분에 명백한 신체 상해로부터 보호받을 수있다 ('; drop database; --). 포함하기 위해 부패했다. 그러나 백엔드가 select bar from foo where param = '$improperly_escaped_input'과 같은 것을 실행하고 있다면 데이터베이스에 손상을 입힐 수있는 무언가가 있습니까?

취약점은 관계없이 수정해야합니다. 그러나 데이터를 활용하는 방법에 대한 예를 보여줄 수 있다면 우선 순위 큐에서이를 수정하십시오.

+1

한 번에 둘 이상의 명령문을 실행하지 않으려면 어떻게해야합니까? –

+1

데이터를 수정할 수 있는지 여부에 관계없이 취약점 일 수 있습니다. 사용자가 자신의 데이터가 아닌 다른 데이터에 액세스하도록 쿼리를 변경하거나 권한 쿼리를 수정하여 항상 true를 반환 할 수 있다면 여전히 문제가 될 수 있습니다. –

답변

5

데이터 수정은 Sql Injection 취약점 중 하나 일뿐입니다. 읽기 권한 만있는 경우에도 공격자는 권한을 높이거나 Blind Sql Injection 공격을 사용하여 데이터베이스의 모든 마지막 비트 데이터를 긁어 낼 수 있습니다.

내 머리 꼭대기에서 데이터가 select 문 안에서 수정된다는 생각을 할 수는 없지만 ... are you sure that you're only able to run a single command at a time?

다른 공격 경로는 문제의 우선 순위를 높이기에 충분할 정도로 위협적이어야합니다.

EDIT : Data modification is allowed in MySql sub-queries :

MySQL은 이러한 테이블에 행을 삽입 등 데이터 수정 부작용 저장 기능을 참조하는 서브 쿼리를 허용한다. f는() 행을 삽입하는 경우 예를 들어, 다음 쿼리는 데이터를 수정할 수 있습니다

SELECT ... WHERE x IN (SELECT f() ...);

이 문제가 비표준입니다 (SQL 표준에 의해 허용되지 않습니다). MySQL에서 f()는 옵티마이 저가이를 처리하기 위해 선택한 방법에 따라 주어진 쿼리의 다른 실행에 대해 다른 숫자 번 실행될 수 있기 때문에 불확도 결과를 생성 할 수 있습니다.

+1

PHP의 mysql_query에 대한 문서에서는 하나의 쿼리 (http://php.net/manual/en/function.mysql-query.php)만을 허용하고 있으며, 제 자신의 실험에서 세미콜론을 사용하여 두 번째 명령문을 작성하면 ' 일하지 마라. 하지만 당신 말이 맞습니다. 데이터 스크래핑의 잠재력은 나보다 나중에 이것을 더 빨리 다루는 것에 대해 논쟁하기에 충분합니다. – BlairHippo

+0

좋은, 상세한 대답. –

+0

@BlairHippo Hmmm ... MySql 문서에 대한 내 대답의 링크가 PHP 문서와 충돌하며 여러 개의 명령문을 실행하는 데 사용되는 mysql_query의 예제를 제공하지만 한 가지 방법이나 다른 증거가 없습니다. .. –

관련 문제