html-form元素

发布时间 2023-10-25 01:59:44作者: 挖洞404

1、text/plain形式

2、application/x-www-form-urlencoded

3、不同的input类型

4、multipart/form-data

(1)文件上传

  • method必须是post
  • enctype必须是multipart/form-data
  • input的type为file,点击后选择文件

(2)请求报文格式

POST /dvwa/vulnerabilities/upload/ HTTP/1.1
Host: 192.168.0.18
Cookie: PHPSESSID=dg5uk8opkv5ve1a74vv86spqh6; security=low
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: https://192.168.0.18/dvwa/vulnerabilities/upload/
Content-Type: multipart/form-data; boundary=---------------------------4384282613834
Content-Length: 422
Upgrade-Insecure-Requests: 1
Connection: close

-----------------------------4384282613834
Content-Disposition: form-data; name="MAX_FILE_SIZE"

100000
-----------------------------4384282613834
Content-Disposition: form-data; name="uploaded"; filename="新建文本文档.txt"
Content-Type: text/plain

abc时间
-----------------------------4384282613834
Content-Disposition: form-data; name="Upload"

Upload
-----------------------------4384282613834--
  •  文件上传时,请求中content-type字段会追加boundary属性,以27个-作为前缀,然后是一个13个数字组成的随机字符串。
  • boundary属性在请求体部中,作为分隔符使用。n组参数,对应n+1组boundary属性值。末尾额外追加--字符串
  • 相邻boundary之间作为一个参数单元
    • 第一行是基本信息,以Content-Disposition: form-data;作为前缀,然后是name属性,以及可能的filename属性
    • 第二行是空行
    • 第三行开始是value属性,或者文件上传所对应的文件内容,简单理解为二进制数据。如果是文本文件,那么直接就是文本字符串;如果是图片等二进制文件,burp中显示时会乱码
  • boundary属性中的随机字符是相对随机生成的,相邻上传同一文件也会使用不同的随机字符串值。当然,也可以前后使用相同的字符串值,或者自定义长度的字符串值。需要注意的是,boundary属性是作为分隔符使用,所以定义时不能与参数单元的值发生冲突