gpt4 book ai didi

php - 绕过 php is_numeric() 函数可能吗?

转载 作者:行者123 更新时间:2023-12-02 05:20:47 27 4
gpt4 key购买 nike

我目前正在寻找一个pass(不是盲目的)高级别的类sql注入(inject)应用程序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 角色意味着我们绕过它……再次是的,也许是我在路上看到的所有东西,但我还没有实际测试过。为什么?

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

if(is_numeric($id))...

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

最佳答案

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

其次,如果你想摆脱任何 sql 注入(inject)的危险,使用准备好的语句会很多更容易,所以像下面这样的东西就是全部是需要的。

$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 非常相似。

关于php - 绕过 php is_numeric() 函数可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17381302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com