【问题标题】:Bypass php is_numeric() function is possible?可以绕过 php is_numeric() 函数吗?
【发布时间】:2013-06-27 04:57:28
【问题描述】:

我目前正在寻找一个通(不盲)高级别的类sql注入应用dvwa。

即使有一些让生活更轻松的想法和工具,也找不到解决方案。

源码格式如下:


if (isset($_GET['Submit'])) {
    // Retrieve data

    $id = $_GET['id'];     
    $id = stripslashes($id);      
    $id = mysql_real_escape_string($id);   

    if (is_numeric($id)){

        $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
        $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );

        $num = mysql_numrows($result);

        $i=0;

        while ($i < $num) {

            $first = mysql_result($result,$i,"first_name");
            $last = mysql_result($result,$i,"last_name");

            echo '<pre>';
            echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
            echo '</pre>';

            $i++;
        }
    }
}

任务并检索用户表 dvwa db 中具有此结构的值:

+------------+-------------+------+-----+---------+
| Field      | Type        | Null | Key | Default |
+------------+-------------+------+-----+---------+
| user_id    | int(6)      | NO   | PRI | 0       |
| first_name | varchar(15) | YES  |     | NULL    |
| last_name  | varchar(15) | YES  |     | NULL    |
| user       | varchar(15) | YES  |     | NULL    |
| password   | varchar(32) | YES  |     | NULL    |
| avatar     | varchar(70) | YES  |     | NULL    |
+------------+-------------+------+-----+---------+
6 rows in set (0.00 sec)

那么你当然会说(正如我在网上到处看到的那样)是编码字符。我理解,是的,我们有更多的字符集,可以以不同的方式编写电子邮件(例如多字节)。 但我就是连你都找不到。我理解上面的php表单代码是这样的:

已经首先必须绕过 mysql_real_escape_string() 所以我的研究第一次集中到那里。 使用游戏中的 big5 角色,例如意味着我们绕过它……再次,是的,也许我在路上看到了 Tenai 的一切,但我还没有实际测试过。为什么?

假设我绕过了mysql_real_escape_string(),如果我们继续阅读php代码执行的下一步,就可以阅读函数了:

if(is_numeric($id))...

检查变量的类型。 (此外,我不知道我是否使用确切的术语但很好)。这意味着如果我想在这里插入一个引号,它必须在 forcemment numérique.Donc size 我靠着著名的 php 函数,我意识到我们可以输入相同的二进制或十六进制值(但在所有情况下它都会在我之后转换输出的功能,现在我真的不知道....)。所以我在 第一个想法是让 0x27 插入一个引号,但当然这个值被解释为整数而不是字符串类型的输出,所以如何解释我的引号......我认为问题出在这一边,但我不想思考。 .. 如果你只有一首曲目(除了告诉我去谷歌看看,我已经做了四天了 ^ ^),我很感兴趣。所以伙计们(或女孩们),威尔被昵称为 Sqli 大师? 谢谢你的时间......(抱歉谷歌翻译)

【问题讨论】:

    标签: php sql code-injection numeric


    【解决方案1】:

    mysql 库已被弃用时,您为什么还要使用它?请改用mysqli

    其次,如果你想摆脱任何 sql 注入的危险,使用准备好的语句会更容易,所以如下所示需要。

    $stmt = $mysqli->prepare("SELECT first_name, last_name FROM users WHERE user_id = ?")
    $stmt->bind_param("i", $id);
    $stmt->execute();
    $stmt->bind_result($res);
    $stmt->fetch();
    if($res)
        ...
    

    顺便说一句,mysqli 可以用于功能(非 oop)风格,与 mysql 非常相似。

    【讨论】:

    • 试着回答他原来的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多