-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdial.py
More file actions
executable file
·118 lines (82 loc) · 2.76 KB
/
Copy pathdial.py
File metadata and controls
executable file
·118 lines (82 loc) · 2.76 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/usr/bin/python
import cgi
import cgitb; cgitb.enable()
import os, sys
from re import sub
import time
import pprint
try: # Windows needs stdio set for binary mode.
import msvcrt
msvcrt.setmode (0, os.O_BINARY) # stdin = 0
msvcrt.setmode (1, os.O_BINARY) # stdout = 1
except ImportError:
pass
print "content-type: text/html\n\n"
vars={
"username":"",
"password":"",
"tainted_username":"",
"tainted_password":"",
"address":"",
"agent":"",
"timestr":"",
"referer":"",
"status":"okay",
"message":"",
}
def do_input(vars):
form = cgi.FieldStorage()
vars["tainted_username"] = form.getfirst("username", "")
vars["tainted_password"] = form.getfirst("password", "")
vars["agent"]=os.environ.get("HTTP_USER_AGENT")
vars["address"]=os.environ.get("REMOTE_ADDR")
vars["referer"]=os.environ.get("HTTP_REFERER")
if vars["referer"] == None: vars["referer"]=""
if vars["agent"] == None: vars["agent"]=""
if vars["address"] == None: vars["address"]=""
def do_sanitize(vars):
vars["username"] = sub(r'[^a-zA-Z0-9_]','',vars["tainted_username"])
vars["password"] = sub(r'[^a-zA-Z0-9_]','',vars["tainted_password"])
if vars["tainted_username"]!=vars["username"] or vars["tainted_password"]!=vars["password"]:
vars["message"] = "The username and password can only contain the characters: [a-zA-Z0-9_]"
vars["status"]="fail"
return -1
for s in [vars["username"],vars["password"]]:
if len(s) < 4 or len(s) > 20:
vars["message"] = "The username and password must be between 4 and 20 characters"
vars["status"]="fail"
return -1
return 0
def do_logit(vars):
logfile= "/usr/lib/cgi-bin/dial/logs/logs.txt"
r=[]
r.append(time.strftime("%F %H:%m:%S"))
r.append(vars["status"])
r.append(vars["address"])
r.append(vars["username"])
r.append(vars["password"])
foo=open(logfile,"a")
foo.write("\t".join(r))
foo.write("\n")
foo.close()
def do_output(vars):
print "<html><body><pre>"
if vars["status"] == "fail" :
print "Hmm...it seems something went wrong...<br/>%s" % vars["message"]
print "please go back and try again: ",
print "<a href=\"http://www.sente.cc/dial.html\">http://www.sente.cc/dial.html<a/>"
else:
print "cgi success!"
print "now to plug the data into di-controller..."
print "<br/><br/><br/>"
print "<br/><br/><br/>"
print "username: " + vars["username"]
print "password: " + vars["password"]
print "address:" + vars["address"]
print "referer:" + vars["referer"]
print "agent:" + vars["agent"]
print "</pre></body></html>"
do_input(vars)
flag=do_sanitize(vars)
do_logit(vars)
do_output(vars)