文件上传绕过的一次思路总结(两个上传点组合Getshell)

2022-06-22 01:54:33 31 17792 1


本文章仅用于渗透交流学习,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任    注:本次测试为授权测试

这是朋友的一个渗透测试的项目,有个上传的黑名单,跟我说可以试了一下,本文章是一边测试一边记录的,对于一些知识点总结的不全,只是提供了一个渗透中碰到上传的思路,文章无排版,是笔记的形式做记录,正好保一下限号


一丶测试上传正常文件
这里可以判定文件名虽然是重命名,但是可控的,因为我们上传的文件名被带进去了(*****_1.txt)这里利用的思路主要:

1.目录没有执行权限(通过控制文件名进行../../跳目录,跳到可以执行脚本语言的目录)

2.上传文件找不到路径(通过控制文件名进行../../跳目录,层级跳到根目录进行访问)

3.上传白名单截断 (有些文件上传处是白名单,后缀名不可以绕,可以利用控制文件名截断的方式去绕过白名单,例如1.jsp%00.jpg)

4.截断文件前置名(这里后面会详细讲)



二丶上传非正常文件
这里主要观察是不是黑名单,或者说是没有限制名单,下图可以看到,上传tx格式是可以正常上传的,但是上传jsp文件就上传不成功。
1.如果上传tx可以上传,但是jsp不可以,可以判断为上传黑名单,这里可以尝试绕黑名单的一下后缀格式,常见的绕黑名单的后缀格式有:
aspx&asp:ashx、asa、asmx、cer
php: php3、phtml
jsp:jspx、jspf
这里简单列举几个,具体详细的我之前发的文章有,这里补充一个小知识点,假如站点为php的站点,但是只限制了php的后缀格式,我们这里可以利用别的脚本语言都测试一下,因为可能这个服务器可以运行多种语言,虽然概率比较低,但是没有好的绕过办法的时候可以试一下,万一成功了呢,我在项目中就碰到过这种情况
上传tx后缀:

上传jsp后缀:

三、绕过测试
这里主要讲一下常见的一下绕上传的方法,这个是朋友给的站,我也不知道能不能绕过去,我也是一边绕一边记录着,是我绕上传的一个基本的思路,给大家学习一下
上面测试了,上传黑名单,我们就先测试一下绕上传后缀
1.jspx绕过,失败,测试了别的php什么的都不可以,限制的比较全,html都不可以。

2.截断绕过
这里可以尝试  :,;、%00、’、^  等都可以,这几种方法在windows服务器上成功率是比较高的,因为windows在创建文件的时候这些特殊字符是不允许出现的



最后测试“:”截断成功了,但是很遗憾,虽然传上去了,也可以访问到,但是内容没有写进去,这就是利用:截断的一个弊端,只有文件,没有内容

3.利用跳目录
因为文件名可以控制,我们就可以利用../跳目录的方式去截断代码本身给添加的前置名,就此系统为例,我们上传1.txt,代码会自动给我们添加2022_06_20_1.txt,这里的利用思路就是上传配合解析的配置文件,例如上传.htaccess配合解析,当然这里实战应用的场景还有很多,只是提供一个思路


我们这里也是成功截断前置名,并且跳到上层目录了,但是在此服务器这种方法并不是很好用,因为是java的站,这里只是提供一下思路,最终这个上传点还是没有绕过去

四丶寻找其他上传点
绕了半天始终是绕不过去,也不想饶了,但是文章都写到这里了,不能白白写啊,又问朋友要了个账号,测试一下后台有没有别的上传
功夫不负有心人,文章得以继续了
确实发现了另一个上传点,这个上传点比较有意思,后缀可以用大小写直接绕过


这不直接get了吗?
然而并不是,访问文件目录404?

通过查看附件的功能发现,查看附件处是用base64加密的一个绝对物理路径,文件并没有上传到网站目录底下

这里就直接运用我们之前的跳目录,通过报错找到网站的真实路径(也有其他方法查找真实路径,我这里是用的报错),直接上传

正当我准备访问webshell的时候,让我意想不到的事情发生了,下载下来了..........,好痛苦!

但是思考了一会,既然大写的jsp不可以解析,而之前第一个上传点可以上传空的jsp文件,利用windows的特性能不能get一手呢,
这里就体现出我们之前跳目录加截断文件前置名的作用了
之前我们第一个上传点 ,可以利用:截断,上传jsp,但是文件内容传不上去,然后利用第二个上传点再上传一次同样文件名的文件 (1.jsp|1.jsP)
因为windows不区分大小写,所以就导致我们后面上传的1.jsP直接就把内容覆盖到1.jsp上面去了

实践验证真理,最终通过两个都不能获得权限的上传点,组合获得大马一枚!

五、总结一下
两个上传点,第一个上传点可以利用冒号截断,但是上传的jsp文件因为截断原因,内容为空,第二个上传点可以利用大小写绕过,但是访问会直接下载,利用第二个上传点去覆盖第一个上传点的内容,最终获得了服务器权限,中间涉及一些小知识点,其实对于黑名单的绕过方式很多,之前发过一个上传绕过的文章,在我csdn上,这里我就不放链接了,但是现在在实战环境中,上传点的限制已经不只是代码层了,流量层的waf也是很恶心人,之前也写过文章文章,但是都写得很简单,后面有时间的话我会把关于bypass 上传&waf的小知识点总结一下!

最后留一句:大佬勿喷!
TCV:0.5

关于作者

Azjj9811篇文章169篇回复

Az 弟弟

评论31次

要评论?请先  登录  或  注册
  • TOP1
    2022-6-22 07:23

    赞。这个跨目录第一个字符写 / 好赞,原本会重命名文件的,加个 / 再 ../ 跳出。同时有两个疑问- 疑问1:第二个上传点不能直接上传另一个 jsp 文件到 tomcat/webapps/ 下吗?为啥要用覆盖的思想。- 疑问2:第一个上传点如果直接 ../ 跨目录传到 tomcat/webapps/ 下面呢?另外这个上传点我也想到两个思路:- 第一个原背景实际上是 springboot xi统上传 jsp 无法解析,同时又支持 ../ 跨目录,可以考虑写计划任务的方式利用(当这里是 windows,是不是可以考虑 redis windows 环境下写文件的一些思路呢)- 第二个是 su18 师傅之前分享的 tricks,你这个xi统是黑名单过滤,也可以试试。原理见 tomcat 8.5.73 https://github.com/apache/tomcat/blob/8.5.73/java/org/apache/tomcat/util/http/parser/HttpParser.java#L219-L247

    filename=""1\.\j\s\p\A"

  • TOP2
    2022-6-22 23:51

    1.第二个上传点是可以直接上传jsp文件,但是是用大小写绕过的,服务器不解析大写的jsp文件,所以用覆盖2.第一个上传点可以传jsp,但是用:截断后,内容传不上去3.你那个我测试了 ,上传后缀变成了filePath":"upload/202206/22/235027_A",

  • 31楼
    2022-8-5 14:27
    ptgeft

    赞。这个跨目录第一个字符写 / 好赞,原本会重命名文件的,加个 / 再 ../ 跳出。同时有两个疑问- 疑问1:第二个上传点不能直接上传另一个 jsp 文件到 tomcat/webapps/ 下吗?为啥要用覆盖的思想。- 疑问2:第一个上传点如果直接 ../ 跨目录传到 tomcat/webapps/ 下面呢?另外这个上传点我也想到两个思路:- 第一个原背景实际上是 springboot xi统上传 jsp 无法解析,同时又支持 ../ 跨目录,可以考虑写计划任务的方式利用(当这里是 windows,是不是可以考虑 redis windows 环境下写文件的一些思路呢)- 第二个是 su18 师傅之前分享的 tricks,你这个xi统是黑名单过滤,也可以试试。原理见 tomcat 8.5.73 https://github.com/apache/tomcat/blob/8.5.73/java/org/apache/tomcat/util/http/parser/HttpParser.java#L219-L247filename=""1\.\j\s\p\A"

    1

    大佬,这个好像不是很适用

  • 30楼
    2022-7-11 03:19
    lalabear

    想请教跳目录的地方,为什么要用///开始呢?直接../../的话会失败吗?

    1

    可能会转码,导致写入失败

  • 29楼
    2022-7-1 20:41

    覆盖思路可以,第二个上传点其实也可以不通过大小写绕黑名单,用其他方式也可直接shell

  • 28楼
    2022-7-1 11:34

    su18原文在博客上

  • 27楼
    2022-7-1 11:20
    ptgeft

    赞。这个跨目录第一个字符写 / 好赞,原本会重命名文件的,加个 / 再 ../ 跳出。同时有两个疑问- 疑问1:第二个上传点不能直接上传另一个 jsp 文件到 tomcat/webapps/ 下吗?为啥要用覆盖的思想。- 疑问2:第一个上传点如果直接 ../ 跨目录传到 tomcat/webapps/ 下面呢?另外这个上传点我也想到两个思路:- 第一个原背景实际上是 springboot xi统上传 jsp 无法解析,同时又支持 ../ 跨目录,可以考虑写计划任务的方式利用(当这里是 windows,是不是可以考虑 redis windows 环境下写文件的一些思路呢)- 第二个是 su18 师傅之前分享的 tricks,你这个xi统是黑名单过滤,也可以试试。原理见 tomcat 8.5.73 https://github.com/apache/tomcat/blob/8.5.73/java/org/apache/tomcat/util/http/parser/HttpParser.java#L219-L247filename=""1\.\j\s\p\A"

    1

    师傅能把 su18得原文发一下吗

  • 26楼
    2022-6-30 17:10

    像那种文件名重命名了的没用规律的还有必要测目录穿越一类的么

  • 25楼
    2022-6-30 17:09

    师傅思路太秀了,学xi了一波

  • 24楼
    2022-6-28 13:15

    确实组合上传,覆盖,兄弟你这个思路清奇,果然细节决定成败。

  • 23楼
    2022-6-28 13:07

    覆盖文件操作么,哈哈哈,感谢分享

  • 22楼
    2022-6-27 22:42

    组合型getshell直接起飞,学xi到了!

  • 21楼
    2022-6-27 11:24

    每天学xi一点大佬的技巧

  • 20楼
    2022-6-25 20:57
    lalabear

    想请教跳目录的地方,为什么要用///开始呢?直接../../的话会失败吗?

    1

    直接../会被转移掉

  • 19楼
    2022-6-25 20:32

    问下,windows服务器文件重命名不是都要确认是否覆盖吗?还是说这种上传点会默认覆盖?

  • 18楼
    2022-6-24 14:49

    上传到oss的基本都无解 不解析 关于oss有个getshell的方法 需要读取那个什么来着 一下给忘了 反正上传文件到oss的 我基本放弃

  • 17楼
    2022-6-24 10:13

    如果上传到oss存储桶,还有必要进行测试么,下一步利用呢,除了图片其他都无法解析,没有object遍历

  • 16楼
    2022-6-23 14:47

    借花献佛 请教一下 tp5的一个上传 之前任意文件上传,后来被修复了 搞的现在别说上传了 burp捉包就500 咋闹呀。

  • 15楼
    2022-6-23 13:06

    想请教跳目录的地方,为什么要用///开始呢? 直接../../的话会失败吗?

  • 14楼
    2022-6-23 11:29

    现在更多的是强制修改后缀名吧

  • 13楼
    2022-6-23 11:24

    很有营养的文章了,基本都是碰到上传没权限

  • 12楼
    2022-6-23 09:36

    现在基本上都是白名单过滤了,很少见到很名单。不过楼主的思路是真的秀啊,学到了