Code:
#!/usr/bin/python
""" ScriptFinder 1.1 < ditatompel [at] gmail [dot] com >
Searches for file contains dangerous command
Inspired from tools created by d3hydr8[at]gmail[dot]com
greetz to d3hydr8, 5ynL0rd all members of devilzc0de.org,
ex darkc0de.com, all Indonesian c0ders, and all GNU Generation ;-)
PS : Happy Birthday ketek, Revres Tanur or whatever nickname gonna be :p
PF : ?? Oct ???? - ?? Oct 2011 """
import sys, re
def halo():
print "\n" + "-+-"*30 + "\n\tScriptFinder 1.1 < ditatompel [at] gmail [dot] com >"
print "\tSearches for file contains dangerous command"
print "\tGreetz to all members of devilzc0de.org, ex darkc0de.com, all Indonesian c0ders,"
print "\tand all GNU Generation ;-)\n" + "-+-"*30+"\n"
def usage():
print "\tUsage: python " + sys.argv[0] + " <dir>"
print "\tExample: python " + sys.argv[0] + " /home/ditatompel/public_html\n"
sys.exit(1)
#Original from d3hydr8[at]gmail[dot]com
def Walk( root, recurse=0, pattern='*', return_folders=0 ):
import fnmatch, os, string
result = []
try:
names = os.listdir(root)
except os.error:
return result
pattern = pattern or '*'
pat_list = string.splitfields( pattern , ';' )
for name in names:
fullname = os.path.normpath(os.path.join(root, name))
for pat in pat_list:
if fnmatch.fnmatch(name, pat):
if os.path.isfile(fullname) or (return_folders and os.path.isdir(fullname)):
result.append(fullname)
continue
if recurse:
if os.path.isdir(fullname) and not os.path.islink(fullname):
result = result + Walk( fullname, recurse, pattern, return_folders )
return result
def search(files, auto=0):
if auto:
searchstring = danger
else:
searchstring = specificstring
print "\n[+] Searching:", len(files), "files"
print "\n" + "-+-"*20 + "\n[+] files containing '" + searchstring + "' under " + sys.argv[1] + "\n"+"-+-"*20+"\n"
love.write("\n"+"-+-"*20)
love.write("\n[+] files containing '%s' under '%s' \n" % (searchstring, sys.argv[1]) )
love.write("-+-"*20+"\n")
for file in files:
num = 0
try:
text = open(file, "r").readlines()
for line in text:
num +=1
if re.search(searchstring.lower(), line.lower()):
print "[!] File:",file,"on Line:",num,"\n[!] Code:",line
love.write("""[!] File: %s on Line %s \n[!] Code: %s \n""" % (file, num, line.replace("\t","")) )
except(IOError):
pass
print "[+] Done\n"
halo()
actions = [
"base64_decode", # many php shell use this but may generate false positive result, remove this if necessary. Especially when using recursive scan.
"exec",
"eval", # may generate false positive result, remove this if necessary. Especially when using recursive scan.
"escapeshellarg",
"escapeshellcmd",
"fpaththru",
"getmy", # getmypid, getmygid, getmyuid, etc
"gzinflate",
"gzuncompress",
"ini_alter",
"leak",
"mDbl8VndvJj2", # encoded devshell.asp
"php_uname",
"posix_", # any posix_* function
"proc_", # any proc_* function
"popen",
"passthru",
"pcntl_exec",
"socket_accept",
"socket_bind",
"socket_clear_error",
"socket_close",
"socket_connect",
"set_time_limit",
"shell_exec",
"system", # may generate false positive result, remove this if necessary. Especially when using recursive scan.
"show_source",
"xrunexploit" # source function on devshell.*
]
minus_r = 1
if len(sys.argv) < 2:
usage()
recdir = raw_input("Recursive ? ( Y/n ): ")
mode = raw_input("Full scan Mode (Y/n): ")
if mode.lower() != "y":
specificstring = raw_input("String to search: ")
ext = raw_input("Specific File extension to scan ( <return> to scan all extension ) : ")
filelog = raw_input("logfile ( default sf.log ): ")
if filelog == "":
filelog = "sf.log"
if recdir.lower() != "y":
minus_r = 0
love = open(filelog, "w")
love.write("-+-"*30 + "\n\tScriptFinder 1.1 < ditatompel [at] gmail [dot] com >\n")
love.write("\tGreetz for all members of devilzc0de.org, ex darkc0de.com, all Indonesian c0ders,\n\tand all GNU Generation ;-)\n"+"-+-"*30+"\n")
if mode.lower() == "y":
print "\n[+] FULL SCAN MODE ENABLED...\n[+]", len(actions),"dangerous commands loaded\n[+] Target Dir:",sys.argv[1]
print "[+] Logfile will be saved to: " + filelog
love.write("""
[+] FULL SCAN MODE ENABLED...
[+] %s danger commands loaded
[+] Target Dir: %s\n""" % (len(actions), sys.argv[1]) )
for danger in actions :
if ext == "":
files = Walk(sys.argv[1], minus_r, '*', 1)
else:
files = Walk(sys.argv[1], minus_r, '*.'+ext+';')
search(files, 1)
print "[+] Logfile saved to " + filelog
else:
print "\n[+] Target Dir: " + sys.argv[1] + "\n[+] String to search: " + specificstring
print "[+] Logfile will be saved to: " + filelog
love.write("""
[+] Target Dir: %s
[+] String to search %s\n""" % (sys.argv[1], specificstring ) )
if ext == "":
files = Walk(sys.argv[1], minus_r, '*', 1)
else:
files = Walk(sys.argv[1], minus_r, '*.'+ext+';')
search(files)
print "[+] Logfile saved to " + filelog
Jadi fungsinya mencari barisan perintah2 jahat di komputer kita...
Quote:./sf.py path/dir/
Sekian...
Tidak ada komentar:
Posting Komentar