mirror of
https://github.com/ditatompel/insights.git
synced 2025-01-08 03:12:06 +07:00
Adding old content "malcode-finder.py, Searches for Files Contains Dangerous Command"
This commit is contained in:
parent
9d6734a7e7
commit
c7e2f96dec
6 changed files with 222 additions and 0 deletions
Binary file not shown.
After Width: | Height: | Size: 290 KiB |
|
@ -0,0 +1,222 @@
|
|||
---
|
||||
title: "Malcode Finder, Searches for Files Contains Dangerous Command"
|
||||
description: Fungsinya untuk mencari command berbahaya yang mungkin bisa dimanfaatkan oleh attacker untuk mendapatkan akses lebih dalam sebuah sistem.
|
||||
date: 2011-10-16T23:21:18+07:00
|
||||
lastmod:
|
||||
draft: false
|
||||
noindex: false
|
||||
featured: false
|
||||
pinned: false
|
||||
# comments: false
|
||||
series:
|
||||
# -
|
||||
categories:
|
||||
- Programming
|
||||
- Security
|
||||
tags:
|
||||
- Python
|
||||
images:
|
||||
# -
|
||||
# menu:
|
||||
# main:
|
||||
# weight: 100
|
||||
# params:
|
||||
# icon:
|
||||
# vendor: bs
|
||||
# name: book
|
||||
# color: '#e24d0e'
|
||||
authors:
|
||||
- ditatompel
|
||||
---
|
||||
|
||||
Berikut ini adalah **tool pertama saya yang ditulis menggunakan bahasa Python**. Fungsinya untuk mencari "command2" berbahaya yang mungkin bisa dimanfaatkan oleh attacker untuk mendapatkan "akses lebih" dalam sebuah sistem. Inspirasi dan beberapa line dari tools buatan **d3hydr8 darkc0de**.
|
||||
|
||||
<!--more-->
|
||||
|
||||
Sekalian kado ultah buat [Ketek](https://github.com/b374k/b374k) tanda terima kasih saya secara pribadi atas dedikasinya buat Indonesia.
|
||||
|
||||
Nah langsung aja nih codenya :
|
||||
|
||||
```python
|
||||
#!/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
|
||||
```
|
||||
|
||||
[https://github.com/ditatompel/Malcode-Finder](https://github.com/ditatompel/Malcode-Finder)
|
||||
|
||||
Cara penggunaannya:
|
||||
```bash
|
||||
python sf-1.1.py /path/to/dir
|
||||
```
|
||||
|
||||
Lalu nanti ada interaktif tanya jawab:
|
||||
|
||||
* **Recursive**: untuk *scan* semua *sub-directory* dari direktori yang sudah ditentukan sebelumnya.
|
||||
* **Full scan Mode**: untuk *scan* semua *command* yang dianggap bahaya. Klo dijawab "`Y`", *command2* diambil dari *actions array*. Klo *full scan modenya* dijawab "`n`", nanti om bakalan ditanya buat tentuin *"command"* apa yang mau di *scan*.
|
||||
* **Specific File extension to scan**: tipe file yang ingin di *scan*. Misal `php` / `pl`, dll. Kalau kosong brati semua file ikut di *scan*, termasuk `jpg`, `gif`, dll.
|
||||
* **logfile**: tempat nyimpen hasil *scan*. Klo kosong nama filenya jadi `sf.log`.
|
Binary file not shown.
After Width: | Height: | Size: 140 KiB |
Binary file not shown.
After Width: | Height: | Size: 316 KiB |
Binary file not shown.
After Width: | Height: | Size: 77 KiB |
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
Loading…
Reference in a new issue