Tại daynhauhoc.com, mình thấy có rất nhiều bạn muốn trở thành hắc-cờ nên mình muốn chia sẻ link tài liệu CEH version 9 tiếng Việt . Nhưng các bạn đừng lo lắng, đống tài liệu này chỉ giúp các bạn trở thành 1 script kiddie (hoặc nhỉnh hơn nếu các bạn chịu khó tìm hiểu và tư duy blablabla thêm). Mục đích là biết cách tấn công để bảo vệ bản thân.
Đường link sẽ dẫn bạn tới 1 trang chỉ mục và bạn phải ngồi duyệt từng link, copy link và tải. Nên sẵn tiện, mình làm 1 cái script (kpfetchlinks.py) dùng để get links, còn phần tải là thuộc về bạn ahihi (dùng urllib tải lâu chết luôn) . (Xin cảm ơn stackoverflow đã giúp mình phần regular expression). 1 điều nữa là bạn có muốn bắt bẻ tiếng anh của mình thì xin nhẹ tay (mình gà và khoái xài tiếng anh).
- kpfetchlinks.py (main)
#!/usr/bin/python
from __future__ import print_function, absolute_import
import os, sys
import urllib2, re
import kpstd
target_root = "http://data.ceh.vn/CEHv9-TV" # Change if nessessary
target_ext = ['pdf', 'mp4', 'avi']
target_output = 'ceh_links.txt'
fout = open(target_output, "w")
links = []
rule_a = re.compile("""<a\s+(?:[^>]*?\s+)?href="([^"]*)["]""")
#rule_pdf = re.compile("""<a\s+(?:[^>]*?\s+)?href="([^"]+.pdf)["]""")
#rule_mp4 = re.compile("""<a\s+(?:[^>]*?\s+)?href="([^"]+.mp4)["]""")
def fetch_alink(strings):
if strings == None:
return []
l = []
for t in rule_a.findall(strings):
if type(t) == tuple:
l.append(t[0])
elif type(t) == str:
l.append(t)
return l
#
def get_data(url, verbose=True):
try:
src = urllib2.urlopen(url).read()
except Exception as e:
if verbose:
print("Failed")
kpstd.error("Exception: %s\n" %str(e))
return None
else:
return src
#
def loop_getlinks(url):
global links, scanned
for item in fetch_alink(get_data(url, verbose=False)):
item = item.strip('/').strip('/').strip('/')
if item.endswith(".pdf") or item.endswith(".mp4") or item.endswith(".avi"):
if item not in links:
links.append(''.join([url, '/', item]))
kpstd.info('Found: %3d\r' %len(links))
else:
if ''.join([url, '/', item]) not in scanned:
scanned.append(''.join([url, '/', item]))
if not item.startswith('?'):
loop_getlinks(''.join([url, '/', item]))
#
scanned = []
def main():
global links, scanned
kpstd.norm('Get source from root target: ')
src = get_data(target_root); print("OK")
scanned.append(target_root)
scanned.append("http://data.ceh.vn/CEHv9-TV/")
for item in fetch_alink(src):
item = item.strip('/').strip('/').strip('/')
if item.endswith(".pdf") or item.endswith(".mp4") or item.endswith(".avi"):
links.append(''.join([target_root, '/', item]))
kpstd.info('Found: %3d links\r' %len(links))
else:
if ''.join([target_root, '/', item]) not in scanned:
if not item.startswith('?'):
loop_getlinks(''.join([target_root, '/', item]))
scanned.append(''.join([target_root, '/', item]))
kpstd.norm('Scan done. Analyzing results.\n')
pdf_links = []
mp4_links = []
avi_links = []
for item in links:
if item.endswith('.pdf'):
pdf_links.append(item)
elif item.endswith('.mp4'):
mp4_links.append(item)
else:
avi_links.append(item)
kpstd.norm('Analyzed results.\n')
kpstd.info('Scanned: %3d links\n' %len(scanned))
kpstd.info('Found: %3d pdf | %3d mp4 | %3d avi\n' %(len(pdf_links), len(mp4_links), len(avi_links)))
kpstd.info('Writing data to file: ')
for i in pdf_links:
fout.write('%s\n' %i)
fout.flush()
fout.write('\n')
for i in mp4_links:
fout.write('%s\n' %i)
fout.flush()
fout.write('\n')
for i in avi_links:
fout.write('%s\n' %i)
fout.flush()
print(" OK")
#
try:
main()
except KeyboardInterrupt:
print
kpstd.error('User quit\n')
- kpstd.py (phần phụ, làm màu mè cho đẹp, đặt file này cùng chỗ với file ở trên)
#!/usr/bin/python2
import os, sys
if os.name == 'posix':
try:
import colorama
except ImportError as e:
print('[-] kpstd: can not import colorama library.')
print('[-] Exception info: ' + str(e))
import_failed = True
class colorama:
class Style:
BRIGHT = RESET_ALL = ''
class Fore:
BLUE = GREEN = YELLOW = RED = ''
else:
colorama.init()
import_failed = False
progname = os.path.split(sys.argv[0])[1]
def kpout(msg, str_col):
if not import_failed:
sys.stdout.write(''.join([str_col, colorama.Style.RESET_ALL, msg]))
sys.stdout.flush()
else:
sys.stdout.write(''.join([str_col, msg]))
sys.stdout.flush()
def norm(msg):
kpout(msg, ''.join([colorama.Style.BRIGHT, colorama.Fore.BLUE, '[*] ']))
def info(msg):
kpout(msg, ''.join([colorama.Style.BRIGHT, colorama.Fore.GREEN, '[*] ']))
def warn(msg):
kpout(msg, ''.join([colorama.Style.BRIGHT, colorama.Fore.YELLOW, '[-] ']))
def error(msg):
kpout(msg, ''.join([colorama.Style.BRIGHT, colorama.Fore.RED, '[-] ']))
################################################################################
elif os.name == 'nt':
from ctypes import windll
class color:
black = 0
blue = 1
green = 2
cyan = 3
red = 4
pink = 5
yellow = 6
white = 7
gray = 8
class light: # ~ bright :))
blue = 9
green = 0xA
cyan = 0xB
red = 0xC
pink = 0xD
yellow = 0xE
white = 0xF
def set_color(color):
if type(color) != int:
return False;
STD_OUTPUT_HANDLE = -11;
stdout_handle = windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE);
windll.kernel32.SetConsoleTextAttribute(stdout_handle, color);
return True;
default_color = color.white;
def reset_color():
return set_color(default_color);
out = lambda msg: sys.stdout.write(msg);
mod_name = "";
mod_name_color = color.light.cyan;
def norm(msg):
set_color(color.light.cyan);
out('[*]');
reset_color();
if mod_name:
set_color(mod_name_color);
out(mod_name); reset_color();
out(msg);
return "";
def info(msg):
set_color(color.light.green);
out('[*]');
reset_color();
if mod_name:
set_color(mod_name_color);
out(mod_name); reset_color();
out(msg);
return "";
def warn(msg):
set_color(color.light.yellow);
out('[!]');
reset_color();
if mod_name:
set_color(mod_name_color);
out(mod_name); reset_color();
out(msg);
return "";
def error(msg):
set_color(color.light.red);
out('[-]');
reset_color();
if mod_name:
set_color(mod_name_color);
out(mod_name); reset_color();
out(msg);
return "";
def exception(msg):
if True:
raise Exception(msg);
def red(msg):
set_color(color.light.red);
out(msg);
reset_color();
return "";
def cyan(msg):
set_color(color.light.cyan);
out(msg);
reset_color();
return " ";
def yellow(msg):
set_color(color.light.yellow);
out(msg);
reset_color();
return " ";
def green(msg):
set_color(color.light.green);
out(msg);
reset_color();
return " ";
def white(msg):
set_color(color.light.white);
out(msg);
reset_color();
return " ";
Sau khi chạy thành công, nó sẽ tạo 1 file tên là “ceh_links.txt”. Mình đã test trên Kali linux và thành công. Nếu bạn thấy code dư thừa / code lỗi hay bạn có ý kiến tối ưu hơn thì post lên, tụi mình thảo lựn :)) mình rất mù mờ phần regular expression.
Chào thân ái, quyết thắng.