./ircbots/cgibot.py

0.
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.
#!/usr/bin/env python
#CGI Scans a site and posts OK Responses to the channel...
#Args: !cgibot <site>
 
#d3hydr8[at]gmail[dot]com
#www.darkc0de.com
 
import sys, socket, string, httplib, time
 
OK_RESP = [200, 202]
 
if len(sys.argv) != 6:
	print "Usage: ./cgibot.py <host> <port> <nick> <channel> <path_list>"
	sys.exit(1)
 
HOST = sys.argv[1]
PORT = int(sys.argv[2])
NICK = sys.argv[3]
CHAN = sys.argv[4]
readbuffer = ""
 
try:
	paths = open(sys.argv[5], "r").readlines()
except(IOError): 
 	print "\n[-] Error: Check your path_list location.\n" 
	print "[-] (http://www.darkc0de.com/scanners/bins.txt)\n"
	sys.exit(1)
 
s=socket.socket( )
s.connect((HOST, PORT))
s.send("NICK %s\r\n" % NICK)
s.send("USER %s %s bla :%s\r\n" % (NICK, NICK, NICK))
s.send("JOIN :%s\r\n" % CHAN)
 
print "[+] CGI-Bot Loaded"
s.send("PRIVMSG %s :%s\r\n" % (CHAN, "[+] CGI-Bot Loaded"))	
print "[+] Loaded:", len(paths), "paths"
s.send("PRIVMSG %s :%s%s%s\r\n" % (CHAN, "[+] Loaded: ", len(paths), " paths"))
print "[+] Loaded:", len(OK_RESP), "responses"
s.send("PRIVMSG %s :%s%s%s\r\n" % (CHAN, "[+] Loaded: ", len(OK_RESP), " responses"))
 
def servgrab(host, path):
	print "Trying:", path
	h = httplib.HTTP(host)
	h.putrequest("HEAD", path)
	h.putheader("Host", host)
	h.endheaders()
	status, reason, headers = h.getreply()
	return status, reason, headers.get("Server")
 
while 1:
	readbuffer=readbuffer+s.recv(1024)
    	temp=string.split(readbuffer, "\n")
    	readbuffer=temp.pop( )
 
    	for line in temp:
        	line=string.rstrip(line)
        	line=string.split(line)
		socket.setdefaulttimeout(5)
		#print line
		try:
			if line[3] == ":!"+NICK:
				host = line[4].replace("http://","").rsplit("/",1)[0]
				s.send("PRIVMSG %s :%s%s\r\n" % (CHAN, "[+] Scanning: ", host))
				for path in paths:
					path = path.replace("\n","")
					if path[0] != "/":
						path = path+"/"
					try:
						resp, reason, headers = servgrab(host, path)
						if resp in OK_RESP:
							output = "[+] Found: "+str(resp)+" "+reason+" "+host+path
							s.send("PRIVMSG %s :%s\r\n" % (CHAN, output))	
					except(socket.gaierror, socket.timeout, socket.error), msg:
						s.send("PRIVMSG %s :%s%s\r\n" % (CHAN, "[-] Error: ",msg))			
		except(IndexError):
			pass
        	if(line[0]=="PING"):
          		s.send("PONG %s\r\n" % line[1])
 

Back