一个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

添加新评论 »

分类
最新文章
最近回复
  • 轨迹: niubility!
  • 没穿底裤: 好办法..
  • emma: 任务计划那有点小问题,调用后Activation.exe不是当前活动窗口,造成回车下一步下一步...
  • 没穿底裤: hook execve函数
  • tuhao lam: 大佬,还有持续跟进Linux命令执行记录这块吗?通过内核拦截exec系统调用的方式,目前有没有...