it-swarm-korea.com

SQL 주입을 시연하는 방법은 무엇입니까?

내 PHP/MySQL 코드에 다음과 같은 줄이 있습니다.

...
$sqlquery = "SELECT price FROM products WHERE 1=1 AND id=".$_POST['id'];
...
... query is executed
...
echo $price;

테스트/데모로서 다음과 같은 테이블 사용자가있는 경우 사용자의 비밀번호와 같은 것을 표시하기 위해 이것을 어떻게 전복시킬 수 있습니까?

id | username | password
------------------------
 1 |  abcde   | qwerty

또는 시스템에 표시 할 다른 내용은 무엇입니까?

11
siliconpi

나는 표준 PHP mysql_query 함수를 사용한다고 가정하는데,이 경우 이와 같은 것이 귀하의 예에서 효과적 일 것입니다.

SELECT price FROM products WHERE 1=1 AND id=
999999999999999999999999 
UNION ALL 
(SELECT CONCAT(username, ' ', password) FROM user) limit 0, 1;

설명

  1. 존재하지 않을 제품의 ID를 사용하십시오.
  2. 사용자 테이블과 UNION.
  3. 제품에서 단일 열만 반환하므로 사용자 테이블에서 반환 할 단일 열을 선택합니다. 이 경우 사용자 이름 및 암호 열의 연결된 필드를 반환합니다.
  4. 1로 제한하십시오. 코드는 쿼리에서 단일 결과 만 예상하므로 쿼리를 수행합니다. 또는 WHERE 조건을 사용하여 검색 할 특정 사용자를 지정할 수 있습니다.

또 다른 예는 group_concat를 사용하는 것입니다. 이렇게하면 단일 쿼리에서 사용자 테이블의 모든 항목을 검색 할 수 있습니다. 다른 질문에 대한 답변에서 영감을 얻었습니다 여기 .

SELECT price FROM products WHERE 1=1 AND id=-1 
UNION ALL 
(SELECT CONCAT(GROUP_CONCAT(username), '\n', GROUP_CONCAT(password)) FROM user);

SQL Injection 공격을 다루는 추가 리소스 :

18
Mark Davidson

마지막 질문에 :

또는 시스템에 표시 할 다른 내용은 무엇입니까?

일반적으로 SQL 서버가 구성되는 방식과 일부 완화 조치가 있는지 여부에 따라 다릅니다. 그러나 공격자는 사용자 암호를 보여줄뿐만 아니라 다음을 시도 할 수도 있습니다.

  • 다양한 파일에서 읽고 쓰기;
  • 데이터베이스에 쓰고 읽습니다.
  • doS 및 기타 유해한 조치를 취합니다.

각 작업은 내가 말한 방법, 완화 요소의 존재, 파일 권한, 시스템 구성 등과 같은 여러 요소에 따라 달라집니다.

그런데 공격자에게는 SQL 요청 결과를 보여줄 필요가 없습니다. 공격자가 응답을 볼 수없는 경우 정보 추출 과정을 더 느리고 어렵게 만들지 만 불가능하지는 않습니다.

관심이 있으시면 sqlmap을 만든 Bernardo Damele의 블로그를 읽어 보시기 바랍니다 : http://bernardodamele.blogspot.com/ . 무엇을 할 수 있고 어떻게 할 수 있는지에 대한 흥미로운 프레젠테이션과 독서가 있습니다.

5
anonymous

"Exploits of a Mom"on xkcd 라는 고전적인 예가 있습니다.이 예는 거의 문자 그대로 귀하의 예에서 작동합니다. 아이디어는 다음과 같은 문자열을 id로 게시하여 코드가 $ _POST [ 'id']로 읽도록하는 것입니다.

-1; SELECT * FROM 사용자;

쿼리를 데이터베이스에 전달할 때 세미콜론에서 여러 문으로 분리되어 있다고 가정하면 데이터베이스에 다음과 같은 결과가 표시됩니다.

1 = 1이고 id = -1 인 제품에서 가격을 선택하십시오.

SELECT * FROM 사용자;

공격자는 전체 사용자 데이터베이스를 나열했습니다. 이러한 방식으로 임의의 데이터베이스 명령을 실행할 수 있습니다.

코드가 쿼리 결과를 처리하고 일부 결과를 웹 페이지에 표시하기 때문에 공격자는 데이터를 삭제하거나 데이터를 위조하거나 데이터베이스에서 정보를 감시 할 수 있으며 잠재적으로이를 사용하여 수정할 수도 있습니다. 여기에는 계정 도용 또는 데이터베이스 및 서버 설계가 허용하는 경우 결제를 실행하지 않고 주문하는 것이 포함될 수 있습니다.

0
pyramids