一个MYSQL的单引号特性

发布时间:July 22, 2015 // 分类:工作日志,PHP,代码学习,生活琐事,代码审计 // No Comments

下午在学习审计的时候。想写一个sql注射的来练练手

<?php
$id=@$_REQUEST['id'];
if(!$conn = @mysql_connect("localhost","root","root"))
    die;
    //$getid = "SELECT first_name, last_name FROM dvwa.users WHERE user_id = '$id'";
    $getid = "SELECT first_name, last_name FROM dvwa.users WHERE user_id = ".$id;
    //echo $getid;
    $result = mysql_query($getid,$conn); // Removed 'or die' to suppres mysql errors
    //var_dump($result);
    $num = @mysql_numrows($result); // The '@' character suppresses errors making the injection 'blind'
    //利用@屏蔽了输出的错误信息。所以只能是盲注了
    $i = 0;

    while ($i < $num) {

        $first = mysql_result($result,$i,"first_name");
        $last = mysql_result($result,$i,"last_name");
        
        $html .= '<pre>';
        $html .= 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
        $html .= '</pre>';
        echo $html;
        $i++;
    }
?>

然后用MYSQL监控的发现两个语句得到的结果是不一样的

然后各自丢到mysql里面去执行发现结果还真的不一样

后来darksn0w大大告诉我

MYSQL里面的引号里面,是常量。后面的非法字符会被舍弃。

赶脚和php的机制一样,又字符串朝整型转换的时候,会从前到后转换直到遇到第一个非法字符,保留前面的部分。

SELECT first_name, last_name FROM dvwa.users WHERE user_id = '1 and updatexml(1,concat(0x7e,(version())),0)'

实际就是:
 

SELECT first_name, last_name FROM dvwa.users WHERE user_id = '1'

神奇的单引号。是不是可以考虑用于过滤sql注入呢?

标签:none

添加新评论 »

分类
最新文章
最近回复
  • 没穿底裤: 直接在hosts里面.激活的时候访问不到正确的地址
  • Sfish: 屏蔽更新是在控制台设置一下就可以了,还是说要在其他层面做一下限制,比如配置一下hosts让他升...
  • 没穿底裤: 激活,或者屏蔽地址禁止升级
  • 没穿底裤: 呃..这个思路不错啊..
  • Sfish: 博主好,想问一下,wvs11的破解版,是不是每隔一段时间就要重新激活一次才可以?有没有什么解决...