annyoung

Microsoft-IIS/6.0 webdav remote authentication bypass scanner v0.1 본문

프로그래밍

Microsoft-IIS/6.0 webdav remote authentication bypass scanner v0.1

nopsled 2014. 3. 28. 21:27

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import httplib, datetime, sys
 
def checkVuln(target, port):
    try:
        conn = httplib.HTTPConnection(target, port)
        
        # Checking Microsfot IIS/6.0 Dav vulnerability
        conn.request('OPTIONS''/')
        response = conn.getresponse()
 
        data = response.getheaders()
        dicData = {}
        for a in range(0, len(data)):
            dicData[data[a][0]] = data[a][1]
        try:
            if dicData['server'] == 'Microsoft-IIS/6.0':
                #print '[+] Target is vulnerable.\r\nTarget : ' + str(dicData['server'])
                try:
                    allow = dicData['allow'].replace(' ','').split(',')
                    for b in range(0, len(allow)):
                        if allow[b] == 'PUT':
                            time = datetime.datetime.now().strftime('%H:%M:%S')
                            print '[' + str(time) + '] [INFO]' + str(target) + ':' + str(port) + '  server is vulnerable!'
                    time = datetime.datetime.now().strftime('%H:%M:%S')
                    print '[' + str(time) + '] [CRITICAL] ' + str(target) + ':' + str(port) + ' is not vulnerable!'
                    return 'false'
                except:
                    time = datetime.datetime.now().strftime('%H:%M:%S')
                    print '[' + str(time) + '] [CRITICAL] ' + str(target) + ':' + str(port) + ' allow key error'
                    return 'false'
            else:
                time = datetime.datetime.now().strftime('%H:%M:%S')
                print '[' + str(time) + '] [CRITICAL] ' + str(target) + ':' + str(port) + ' is ' + str(dicData['server']) + '.'
                return 'false'
        except:
            time = datetime.datetime.now().strftime('%H:%M:%S')
            print '[' + str(time) + '] [CRITICAL] ' + str(target) + ':' + str(port) + ' Server not found.'
            return 'false'
    except:
        time = datetime.datetime.now().strftime('%H:%M:%S')
        print '[' + str(time) + '] [CRITICAL] ' + str(target) + ':' + str(port) + ' connection failed.'
        return 'false'
 
def injectFile(target, port, fname):
    print target, port, fname
 
# Check sys argv.
if len(sys.argv) is 1 or len(sys.argv) is not 4:
    name = sys.argv[0].split('\\')
    time = datetime.datetime.now().strftime('%H:%M:%S')
    print '[' +str(time)+ ']' + ' [INFO] Invaild Parameter. (' + str(name[len(name)-1]) + ' IP PORT Shell.asp|status)'
else:
    # Set host.
    url = sys.argv[1].split('.')
    print '\r\n\t\tMicrosoft-IIS/6.0 webdav vulnerable scanner. v0.1\r\n\t\thttp://nopsled.tistory.com\r\n'
    time = datetime.datetime.now().strftime('%H:%M:%S')
    print '[*] starting at ' + str(time) + '\r\n'
    if url[len(url)-1] == '*':
        for i in range(2, 255):
            target = str(url[0]) + '.' + str(url[1]) + '.' + str(url[2]) + '.' + str(i)
            result = checkVuln(target, sys.argv[2])
            if result == 'true':
                injectFile(sys.argv[1], sys.argv[2], sys.argv[3])
    else:
        result = checkVuln(sys.argv[1], sys.argv[2])
        if result == 'true':
            injectFile(sys.argv[1], sys.argv[2], sys.argv[3])
 
time = datetime.datetime.now().strftime('%H:%M:%S')
print '\r\n[*] shutting down at ' + str(time) + '\r\n'
 




현재는 스캐닝만 구현되었습니다.


Exploit까지 시도하는 스크립트를 짜고 싶으시면 injectFile 함수에 추가하시면 됩니다.


아마 쉘업로드까지 완성할 것 같습니다.


스크립트는 공부용도 입니다. 실제서버에 사용하지 마세요.



'프로그래밍' 카테고리의 다른 글

AutoHotKey 파일 구하기  (0) 2014.04.01
php MD5  (0) 2014.03.30
[AutoHotKey Header] EUC-KR Encode, Decode.ahk  (15) 2014.03.14
[AutoHotKey Header] UTF8Encode, UTF8Decode.ahk  (1) 2014.03.14
[AutoHotKey Header] MD5.ahk  (0) 2014.03.14
Comments