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 ...
随机推荐
- mysql-存储过程案例-存储过程中创建表和修改表数据
-- 本存储过程有特殊执行循环数量的要求,是对security_market_history表进行修正 -- 判断存储过程是否存在 drop PROCEDURE if exists proc_secu ...
- Spring Security3学习实例
Spring Security是什么? Spring Security,这是一种基于Spring AOP和Servlet过滤器的安全框架.它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理 ...
- 【转】Timer还是Handler
在我们Android开发过程中,经常需要执行一些短周期的定时任务,这时候有两个选择Timer或者Handler.然而个人认为:Handler在多个方面比Timer更为优秀,更推荐使用. 一.易用性 1 ...
- bzoj4409&&bzoj4410&&bzoj4411[Usaco2016 Feb Platinum]题解
辣鸡wyz最近状态奇差,于是想用usaco题找找手感,万万没想到被虐了一脸TAT 先贴代码,有空再填坑 4409[Usaco2016 Feb]Circular barn #include <io ...
- perl 箭头操作符
箭头操作符有两种用法. 第一种用法是访问引用中的数据元素: #!/usr/bin/perl -w use strict; my @a = (5, 6, 7,9); my $aref = \@a; pr ...
- 【BZOJ-2836】魔法树 树链剖分
2836: 魔法树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 323 Solved: 129[Submit][Status][Discuss] ...
- 【BZOJ-2893】征服王 最大费用最大流(带下界最小流)
2893: 征服王 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 156 Solved: 48[Submit][Status][Discuss] D ...
- npm配置文件
npm获取配置的方式,优先级由高到底. 命令行参数. 以设置代理为例:--proxy http://server:port即将proxy的值设为http://server:port. 环境变量. 以n ...
- UDP打洞、P2P组网方式研究
catalogue . NAT概念 . P2P概念 . UDP打洞 . P2P DEMO . ZeroNet P2P 1. NAT概念 在STUN协议中,根据内部终端的地址(LocalIP:Local ...
- 数据结构算法C语言实现(六)---2.4一元多项式的表示及相加
一.简述 利用链表表示稀疏多项式,并基于之前的一些操作(编程实现上还是有所不同的)组合新的操作实现一元多项式的表示及相加. 二.ADT 抽象数据类型一元多项式的定义 ADT Polyomail{ 数据 ...