programing

누군가가 내 데이터베이스를 해킹했어요 - 어떻게요?

cafebook 2023. 9. 15. 21:20
반응형

누군가가 내 데이터베이스를 해킹했어요 - 어떻게요?

누군가가 제 데이터베이스를 해킹해서 테이블을 떨어뜨렸습니다.

내 PHP 페이지에는 mysql_real_escape_string을 사용하는 하나의 쿼리가 있습니다.

$db_host="sql2.netsons.com";
$db_name="xxx";
$username="xxx";
$password="xxx";    

$db_con=mysql_connect($db_host,$username,$password);    

$connection_string=mysql_select_db($db_name);
mysql_connect($db_host,$username,$password);    
mysql_set_charset('utf8',$db_con); 

$email= mysql_real_escape_string($_POST['email']);
$name= mysql_real_escape_string($_POST['name']);
$sex= mysql_real_escape_string($_POST['sex']);    

if($_POST['M']!=""){  $sim = 1;  }else {  $sim = 0;   }

$query = "INSERT INTO `users` (`email`, `name`, `sex`, `M`) VALUES
( '".$email."', '".ucwords(strtolower($name))."', '".$sex."','".$sim."')";    

$res = mysql_query($query) or die("Query fail: " . mysql_error() );

mysql_close($db_con);

그리고.register_globals사용할 수 없습니다.

그럼 내 데이터베이스는 어떻게 해킹 당했을까요?

mysql_real_graphics_string

MySQL 연결.링크 식별자를 지정하지 않으면 mysql_connect()에서 마지막으로 연 링크를 가정합니다.이러한 링크를 찾을 수 없으면 인수 없이 mysql_connect()가 호출된 것처럼 링크를 만듭니다.연결이 없거나 설정되지 않으면 E_WARNING 레벨 오류가 발생합니다.

여기서 설명하는 처럼 : mysql_real_escape_string()이 SQL 주입으로부터 완전히 보호됩니까?

코드 조각을 기준으로 데이터베이스를 두 번 연결했습니다.

$db_con=mysql_connect($db_host,$username,$password);    

$connection_string=mysql_select_db($db_name);
mysql_connect($db_host,$username,$password);    
mysql_set_charset('utf8',$db_con); 

그리고 다음에 대한 데이터베이스 링크 식별자를 제공하지 않았습니다.

$email= mysql_real_escape_string($_POST['email']);
$name= mysql_real_escape_string($_POST['name']);
$sex= mysql_real_escape_string($_POST['sex']); 

따라서,을 미치지 . mql_set_charset 된 을 에 을.$_POST여러 캐릭터에 적합합니다.

제안.

  • 번째 을 합니다 합니다 을 를 합니다.mysql_connect($db_host,$username,$password);
  • 으로 을 더하다$db_con을 할 때mysql_real_escape_string

당신이 붙여놓은 코드가 적절한 공격을 제공하지 않는 것 같습니다.이를 조사하는 방법은 MySQL 바이너리 로그에서 관련 DROP TABLE 문을 스캔하여 타임스탬프를 제공하는 것입니다.그런 다음 해당 타임스탬프를 사용하여 연관시킬 수 있는 Apache 요청을 찾을 수 있습니다.

그럼 후보자 요청 때마다 코드를 꼼꼼히 체크해서 못을 박을 때까지 하는 경우일 뿐입니다 :(

암호가 약한 MySQL 사용자가 있을 수도 있습니다.모든 비밀번호를 변경하고 MySQL 데이터베이스에 연결할 권한이 있는 사용자를 확인합니다.필요한 포트만 열도록 방화벽을 잠급니다(80,443?).

다음은 당신의 php 코드를 잠그는 것에 대한 기사들입니다. http://www.addedbytes.com/writing-secure-php/ .

안부 전합니다.아스비욘 모렐

데이터베이스가 손상되었다고 해서 sql 주입이 있었던 것은 아닙니다.원하는 경우 접근 로그를 공유할 수 있습니다. 이 로그는 공격자가 어디에 들어갔는지에 대한 충분한 단서를 제공해야 합니다.아마도 로컬 파일 포함일 것이고, 거기에 구성 파일이 포함되어 있거나, 코드 실행 취약성이 있을 것입니다.더 이상의 정보가 없다면, 좋은 사회공학적 직업이거나 피싱 공격이었을지도 모릅니다.

겉으로 보기엔 sql 주입 공격을 위한 구멍을 남기지 않았군요이 암호문 발췌문이 확실히 침입이 일어나고 있는 것입니까?

제가 볼 수 있는 유일한 것은 ucwords에 대한 호스팅 프로바이더의 모호한 발표입니다. http://2by2host.com/articles/php-errors-faq/disabled_ucwords/

G

이것은 php shell(백도어)을 통해 이루어진다고 생각합니다.공유 호스트인가요? 만약 그렇다면, 같은 서버의 다른 웹사이트들도 공격을 받았는지 아닌지 확인해보세요. 이렇게 하면 공격자가 주변에서 당신의 사이트로 들어가는지 확인하는 데 도움이 될 것입니다.서버에서 웹 사이트를 보려면 역 IP 스캔이 필요합니다.

언급URL : https://stackoverflow.com/questions/4243657/someone-has-hacked-my-database-how

반응형