2014-12-05 4 views
0

웹 사이트 용으로 작성된 일부 오래된 (2009) 코드가 특정 상황에서 검색 쿼리에 의해 $ _GET 변수로 SQL을 저장한다는 것을 발견했습니다!

검색을 수행하면 세부 정보가 POSTED 된 다음 위생 처리되고 결과가 MySQL의 LIMIT 절로 페이지가 매겨집니다. 하나 이상의 페이지 (예 : +30 결과)가있는 경우 페이지는 SQL 문을 포함하는 GET var로 HTML의 앵커 링크입니다.

저는 알고 있습니다.이 방법은 절대적으로 아닙니다. 우연히 본 코드예요. 이 문제를 해결해야합니다.

그래서 나는 그것을 고정을 소독하고 SQL을 다시로드하기 위해 다른 방법을 사용하되했습니다

내 질문은 따라서이다 :

페이지가 썸네일 이미지, 모든 데이터에 관한 데이터를 출력 명명 된 배열 var (원래 절은 SELECT * 절)로 출력되므로 다른 사람이 GET 변수를 남용하면 페이지 자체는

이라는 열만 출력합니다. DB를 사용하여 DB에서 행을 삭제할 수있었습니다. 학대를 가져 오려면, 결과가 어떤 retu를 포함하지 않으면 남용이 효과적이라고 생각하고 싶습니다. rned output (DELETE와 같은)하지만 나는 모른다. 그래서 사용자가 GET 절에 아무 것도 입력 할 수 있지만 코드화 된 내용 (즉, 30 행 배열의 명명 된 열) 만 표시되는 출력을 얻는다면 -이 구멍이 생길 수있는 다른 남용은 무엇입니까?

더 자세한 사항 : 코드는 MySQLi

+3

그들이 원했던 거의 모든 것을 데이터베이스에서 수행 할 수있었습니다. – Jordy

+0

페이지에서의 출력이 정의 된 열 등일 뿐이라는 것을 고려하여 할 수있는 것과 같이 이것을 확장 할 수 있습니까? – Martin

+0

매우 위험합니다. http://stackoverflow.com/questions/60174/how-can -i-prevent-sql-injection-in-php, http://stackoverflow.com/questions/332365/how-does-the-sql-injection-from-the-bobby-tables-xkcd-comic-work –

답변

2

SQLMAP 같은 도구는 아마 전체 서버를 정복하고 사용자가 원하는 무엇이든 함께 할 수있다.

데이터베이스가 초기화되지 않아도 더 이상 해킹하지 않으면 컴퓨터에서 스크립트를 실행할 때까지 기다리고 기본적으로 그 시점부터 스크립트를 소유하고 있습니다.

+0

이것은 내가 좋아하는 답변이 아니지만 감사합니다. SQLMap을 살펴 보겠습니다. – Martin

+0

무엇에 대해 좋지 않습니까? 나는 그것을 확장 할 수 있지만 "절대적으로 모든 것"이 아마도 해답 일 것이다. SQLMAP은 아마 exploit의 조합을 통해 서버에 root-priviliges를 자동으로 가져올 수 있습니다.데모 비디오를 확인해보십시오. 사용 가능한 서버와 같은 익스플로잇이있는 서버에서이 데모 비디오를 사용하는 것으로 나타납니다. 그러면 해당 시스템의 시스템 관리자가됩니다. – Erik

+0

글쎄, 나는 답을 매우 좋아하지만 SQLMAP의 범위는 내가 처음 예상했던 것보다 훨씬 더 많지만이 상황에서 가능한 최악의 상황을 보여 준다. SQLMAP (그리고이 상황에서의 능력)에 대해 미리 알지 못했기 때문에 당신의 답을 고맙게 생각합니다. – Martin

1

공격자가 수행 할 수있는 작업은 데이터베이스 구성 및 데이터베이스 사용자 액세스에 따라 다릅니다. 지정된 하나의 테이블 만 선택하고 해당 특정 스크립트에 대해 해당 사용자를 사용할 수있는 권한이있는 새 사용자를 만들면 해당 테이블에서 데이터를 읽는 것이 위험 할 수 있습니다.

그래도 이것은 나쁜 습관입니다. 절대 사용하지 마십시오.

+0

데이터베이스 사용자에게 보편적 인 권한이 없지만이 권한이 가지고있는 권리를 찾고 있습니다. 답변에 대한 환호 – Martin