目录

CTF文件上传 upload-labs pass11-20

# uploadlabs11-20

pass11-pass12补充:

  • GET路径会自动解析
  • POST路径不会自动解析

# pass-11 白名单绕过

查看源码,保存路径是由GET[save_path]定义,可控

1-0

上传白名单png/gif/jpg类型文件,打开bp抓包,修改get的保存路径,使用 %00 截断,在路径中,出现%00会舍弃后面内容,例如在此题上传文件时,最终保存结果应该为/upload/1.png,但是通过修改路径,使他保存在/upload/1.php/路径下,后面没有内容,文件名最终变成1.php,作为php文件解析

1-1

访问upload/1.php,解析成功

1-3

# pass-12

查看源码,使用post定义保存路径,可控

2-1

上传白名单文件,bp抓包,修改post路径,同样使用 %00 截断路径名称,但是此时是post传参,%00不会自动解析,选中%00右键url解析

2-2

2-3

发包,访问'图片'地址,成功解析

pass13-pass16补充

服务器设置白名单,只允许图片类型文件上传时,如果有include包含漏洞,可以将图片马/其他文件类型作为php文件解析

# pass-13

提示包含漏洞,访问include.php能否访问

3-1

看到include.php可以通过get传参利用

查看源码,会读取上传文件前两个字节内容,是否属于白名单里的文件类型,上传图片马,通过http://localhost/include.php?file=你的图片马文件名访问,成功解析

# pass-14

查看源码,**getimagesize($filename)**中getimagesize()函数会读取上传文件的头文件是否是图片类型,仍然使用图片马和include包含漏洞上传文件

# pass-15

查看源码,**exif_imagetype($filename)**中exif_imagetype()函数也是检查上传文件是否符合要求,做法同上

# pass-16

# pass-17

学到了两个方法

法1:(不太正经)

查看源码,使用了move_uploaded_file()函数,这个函数遇到文件名为 /. 时,会舍弃**/.及后面内容**

上传php文件,bp抓包修改文件名例如1.php/.png,随后上传成功,复制图片路径,使用文件包含访问

法2:

题目先接收文件,再做检查,再服务器检查之前如果能访问(打开)到这个文件,服务器就删不掉了,从而获取权限

解法,使用bp不断发包,但是我的bp出了问题,只发一次...借鉴大佬python脚本跑,脚本实现发包并访问,

7-1

代码如下

# coding:utf-8
import requests
from concurrent.futures import ThreadPoolExecutor
 
def td(list):
    url = 'http://localhost/Pass-17/index.php?action=show_code'
    files = {'upload_file': ('szm.png', "<?php fputs(fopen('shell.php','w'),'<?php phpinfo();  ?>' ); ?>")}
       
    data = {'submit': '上传'}
    r = requests.post(url=url, data=data, files=files)
    re = requests.get('http://localhost/include.php?file=upload/szm.png')
    if re.status_code == 200:
        print('上传成功')
 
if __name__ == '__main__':
    with ThreadPoolExecutor(20) as p:
        p.map(td, range(200))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

上传php文件,访问这个php文件,访问成功即可连接

上传图片马,配合include.php时,注意上传路径

# pass-18

使用pass-18图片马解法

# pass-19

两种解法

法1:

查看源码,黑名单验证,先检查扩展名,使用png绕过,使用post接收上传地址,地址可控

9-1

bp抓包,修改上传地址

9-2

注意post传参的地址不会url编码,%00右键编码,上传,复制图片地址即可访问

9-3

# pass-20

查看源码

  • 检查文件MIME内容是否属于图片类型
  • 检查文件名是否为空
  • 文件名是否属于数组

10-1

先接着获取最后面的扩展名,此时需要传入两个save_name[0],save_name[2],0存放2.php/.利用move_uploaded_file特性舍弃后面,2存放png

再看源码,取数组名(数组第一个)作为文件名,会将文件名数组最后一个作为扩展名,

10-3

bp抓包,将文件MIME改为图片类型,save_name[]改为数组

10-1

上传访问

最后一次更新于: 2024/10/27, 12:02:20