[web安全-文件上传漏洞解析,及常见绕过方式]简单易懂超友好

    

目录

        一、了解文件上传漏洞是什么

        二、漏洞利用方法

        三、了解并接触常见的webshell管理工具,以及下载

        四、一句话木马

        五、文件上传的风险存在地方

        六、文件上传绕过

        七、靶场练习,巩固知识

纸上得来终觉浅,绝知此事要躬行

-----陆游


一、了解文件上传漏洞是什么

由于程序员在对用户文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。

二、利用方法

如果程序里面存在这种漏洞,那么恶意攻击者可以直接向你的服务器上传一个 webshell( 又称 ASP 木马、PHP 木马、JAVA木马等即利用服务器端的文件操作语句写成的动态网页,可以用来编辑你服务器上的文件 ),从而控制你的网站。

流程:判断存在漏洞,再判断网站的开发语言,尝试上传文件绕过waf,进行尝试链接,利用前端或者抓包方式查看返回的路径(如果绝对路径直接访问,相对路径按经验进行URl地址拼接)。

WebShell , 简称网页后门。简单来说它是运行在Web应用之上的远程控制程序

三、了解并接触常见的webshell管理工具

当上传木马文件后,可用使用webshell管理工具进行连接,执行想要的操作命令。

我自己使用的是中国蚁剑,可能用的比较舒服,下载的话,在csdn上面搜下载流程就可以啦。

中国蚁剑    中国菜刀    冰蝎

四、一句话木马

木马就是我们需要想办法上传到对方服务器并运行的恶意代码,不理解可以继续往下看   

php的一句话木马:

<?php @eval($_POST['pass']);?>

asp的一句话是:  

 <%eval request ("pass")%>

aspx的一句话是:

<%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>

还有好多木马,可以自己查找收集哦

上面的标红的pass是你链接你这个木马的密码,也可以设置成自己想要的密码。

一句话木马+webshell工具通常是一起使用的,先上传让服务器解析你的恶意代码,然后用webshell连接即可。

五、文件上传的风险存在地方

  1. 上传图片的地方,比如说头像,博客
  2. 评价订单的时候
  3. 能够上传文件的地方

要有时常判断的眼光进行判断

六、文件上传绕过

文件上传通常会被审查判断是否为恶意文件,我们可以利用各种绕过方式来进行,绕过审查,进行上传我们的文件木马。

常见的绕过方式

  1. 前端js检测

可以通过,burp进行截取中间段数据改数据包后缀,然后进行绕过。

  1. 后端mime校验

也可以通过前端js检测的方法进行绕过

3.命名规则绕过

对于php文件尾过滤,可以采用phtml,php3,php5,phps等等,也可以采用大小写绕过,对于文件尾过滤过于严谨的可以尝试上传.htaccess文件

4末尾空格绕过

对于windows来讲会自动去除文件尾后边的空格,但是对于服务器来讲如果没有trim($file_ext); 首尾去空的函数,则可以在文件尾后面添加一个空格,比如对’.php’过滤,则不会匹配’.php '结尾的文件,服务器仍然会正常解析

末尾.绕过

对于windows来讲会自动去除文件末尾后面的.,但是对于服务器来讲如果没有deldot($file_name);删除文件名末尾的点函数,则可以在文件名后面添加一个.,对于’.php’过滤,则不会过滤掉’.php.'文件

末尾大小写绕过

如果在检测中没有 strtolower()函数,说明不存在大小写过滤,因此可以考虑大小写绕过

文件末尾添加::$DATA绕过

在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名

例如:"phpinfo.php::$DATA"Windows会自动去掉末尾的::$DATA变成"phpinfo.php"

双写绕过

有些正则表达式会过滤一些字符,但是只会过滤一次,所以我们写两次,等他过滤完,即可剩下一个后缀名,来成功绕过。

或者某些函数去除.和空格只去除一次,可以进行多写几个空格和点.绕过

如.pphphp,从左往右匹配到第一个php时去掉变为.php,达到了绕过的目的

.htaccess绕过

htaccess是apache的特有文件,负责相关目录下的网页配置。可以改变文件解析规则,比如将图片文件解析成php文件 而上传一张携带webshell的图片文件,就可以成功链接。

但需要先上传.htaccess文件,然后再上传webshell文件。

apache解析漏洞

六、文件上传绕过阿帕奇一般都是从右向左,先解析最后的后缀,然后再往前面进行识别。

上传图片马:1.jpg

抓包工具修改马名称为:1.php.1616asda

先看1616asda,绕过,然后才会解析到php

%00截断

%00绕过主要是针对于白名绕过

原理:白名单过滤肯定是从后往前读取后缀,所以读取到.jpg在白名单里就放通了。

但是在调用文件的时候读取文件名是从前往后读,所以看到.php后面的终止符的时候就停止读取了,最终读取的文件名的后缀就是.php

%00是URl编码,只针对get传参,所以不适用与post传输文件地址

图片内容属性检测绕过

对于一些查看文件属性的机制,我们可以制作图片马进行绕过

图片马本质是在正常图片后缀加上敏感木马,进行执行。

copy 1.png/b+2.php 3.png   (windos可以利用这个命令制作图片马,正常图片+一句话木马)

ps:图片马一般不会自动执行,需要配合文件包含漏洞进行利用

文件包含漏洞我后面会进行更新,感兴趣可以去我主页了解哦

图片二次渲染绕过

有时候服务器会对上传上去的图片进行二次渲染,生成一张新的图片,从而过滤掉webshell脚本,这时只需要将渲染后的图片与渲染前的图片进行对比,查看二者相同的地方,也就是渲染未改动的地方,在此处插入webshell脚本即可,网上推荐用gif图片

条件竞争

条件竞争实际上就是服务器会校验你上传的文件是否合法,不合法将其进行删除,但是服务器对文件处理速度有限,只要上传速度大于他删除速度,那我们就可以读取到我们的木马文件并且执行。

我们需要一边用python进行请求读取你的恶意文件(需要判断你文件生成的地址)

一遍需要用burp来进行不断的上传文件,直到python读取到了恶意文件存在服务器上,即可利用webshell进行链接。

ps:上传的文件不能直接是木马,是一个能生成木马的文件

之前写的竞争文件的python脚本可以参考

import requests
def main():
    i=0
    while 1:
        try:
            print(i,end='\r')
            a=requests.get("http://172.20.10.3:88/upload/jinzhen.php")

            if "c4ca4238a0b923820dcc509a6f75849b" in a.text:
                print("OK")
                break
        except Exception as e:
            pass
        i+=1

if __name__=='__main__':
    main()            

当时用的恶意文件也可以参考

七、靶场练习,巩固知识

纸上得来终觉浅,绝知此事要躬行

-----陆游

我们到现在以及有了文件上传漏洞的基本的概念以及绕过方式的了解,但这个时候一定要多多练习巩固知识,我们可以利用靶场来进行练习积累经验

小吴这里推荐文件上传靶场:upload-labs(下面附带靶场下载链接,可以搜索别的博主下载教程哦)

靶场下载地址:GitHub - c0ny1/upload-labs: 一个想帮你总结所有类型的上传漏洞的靶场

有不懂的知识可以评论私信交流

感谢您看到这里,希望这篇文章对您在网络安全这条道路上有所帮助,再次感谢。

                                                         小吴

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以回答你的问题。首先是树莓派python编程读取电压,可以使用树莓派的GPIO口来读取电压值。具体实现代码如下: ```python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(14, GPIO.IN) while True: if GPIO.input(14): print("High") else: print("Low") time.sleep(1) ``` 以上代码中,我们通过GPIO.setup()函数将14号引脚设置为输入模式,然后在一个循环中不断读取该引脚的电平值,如果为高电平则输出“High”,否则输出“Low”。 接下来是在树莓派上读取土壤湿度感器读数,一般来说土壤湿度感器的输出电压值与土壤湿度成正比。我们可以通过模拟读取模拟输入信号的方式来读取感器的输出值。具体实现代码如下: ```python import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setup(17, GPIO.IN) while True: value = GPIO.input(17) print(value) time.sleep(1) ``` 以上代码中,我们通过GPIO.setup()函数将17号引脚设置为输入模式,然后在一个循环中不断读取该引脚的电平值。由于我们使用的是模拟输入信号的方式,因此输出值将会是一个0~1之间的小数,表示感器输出的电压值与树莓派的输入电压值之比。 最后是常见问题,树莓派GPIO口的输入电压范围为0~3.3V,如果感器的输出电压出这个范围,需要使用电阻分压或者信号放大器等电路进行处理。同时也需要注意GPIO口的输入电流限制,一般为16mA左右,如果过这个限制可能会损坏GPIO口。另外,在读取模拟输入信号时需要使用合适的模拟输入电路,并且需要根据具体感器的输出特性进行校准。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值