python 到 poc

0x01 特殊函数

0x02 模块

0x03 小工具开发记录

特殊函数

# -*- coding:utf-8 -*-
#内容见POC.demo; POC.demo2 ;def add(x,y):a=x+yprint(a)add(3,5)
print('------------引入lambad版本:')
add = lambda x,y : x+y
print(add(3,5))
#lambda函数,在lambda函数后面直接加变量,变量后直接冒号,冒号后面是表达式,完美解决
#lambda表达式:lambda arg1,arg2,....,argn : expression using argumentsnumber = range(-2,11)
print("map(函数)"),map(lambda  x : x*2,number)
print("map(函数)"),map(lambda  x : x**2,number)
'''**为次方'''

#map()函数 help(map) 查看功能: map(函数,序列对象)
#返回将函数应用于以下项的结果列表:参数序列。如果给出了多个序列,
#则函数调用时使用由相应每个序列的项,如果不是全部,则用“无”替换缺失的值序列具有相同的长度。
#如果函数为None,则返回序列的项(如果有多个序列,则为元组列表)。

numbers = range(-2,11)
print(number)
print("filter()函数:"),filter(lambda  x:x>5,number)
#filter()函数help(zip)

‘’‘zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。利用*号操作符,可以将list unzip(解压)。’’’

a=[1,2,3]
b=[3,2,1]
print(zip(a,b))
c='hello'
d='123'
print(zip(c,d))
'''长度不等时,取长度最小的'''
demo1=['a','b','c']
demo2=['1','2','3']
demo3=zip(demo1,demo2)
demo=dict(demo3)
print(demo)
'''构造字典'''

如何导入模块:


'''
# 【1】导入整个模块
>>> import sys
>>> print sys.argv
['']
#【2】只导入我们要用到的
>>> from sys import argv
>>> print argv
['']
【3】模块名太长,可以起个别名
>>> import sys as s
>>> print s.argv
['']
【4】从模块中导入所有
>>> from sys import *
>>> print path #输出sys模块中的path
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat',
'/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']
最后一种导入方法不建议使用,原因:若自己定义的变量或函数与所导入模块中的变量或函数同名,易产生混淆。
'''
# -*- coding:utf-8 -*-import sys
import test.xiongzhang
import test.yusys.path.append(r"C:\Users\30538\PycharmProjects\secure_POC\POC.demo.py")
import demo
r'''如果不是同目录用这种方法告诉Python解释器,我写的文件在哪里,
("C:\Users\30538\PycharmProjects\secure_POC\POC.demo.py")是我的文件路径然后就可以直接引入了
因为当Python解释器都去了.py的文件,先将它变成由字节码组成的pyc文件,然后这个pyc文件把文件给了一个叫Python虚拟机的东西运行继续深入'''
print(demo.lang)
print(dir(demo))
"""查看模块属性"""
print(__name__)
'''当作main程序执行'''
print(demo.__name__)
'''当作模块,即为模块的名称'''
# coding = utf-8lang='hello world'
#模块'''那么如何引用包中的库呢'''
#举个栗子建立一个目录为ichunqiu,里面放两个py文件
''''BaZong.py源码如下:'''
# #coding = utf-8
#
# def BaZong():
#         print 'HELL0 MOMO!!!'
'''MoMo.py源码如下:'''
# coding = utf-8
# def MoMo():
#     print
#     'HELL0 BaZong!!!'

‘’‘然后,咱们在与ichunqiu同级的目录中,创建一个demo.py调用这个ichunqiu的包’’’

# # coding = utf-8
#
# import ichunqiu.BaZong
# import ichunqiu.MoMo
#
# ichunqiu.BaZong.BaZong()
# ichunqiu.MoMo.MoMo()

模块

sys库

-*- coding: utf-8 -*import sysprint ("THE FILE NAME:"),sys.argv[0]
'''sys.argv是变量,专门向Python解释器传递参数,他的功能是获取程序外部向程序传递的参数'''
# coding = utf-8import sysdef demo():
if len(sys.argv) < 2:
print 'no action'
sys.exit() # 退出当前程序
for i in range(len(sys.argv)):
print 'arg[' + str(i) + ']', sys.argvif __name__ == '__main__':
demo()
'''sys.stdin, sys.stdout,sys.stderr
处理标准输入,标准输出, 标准错误'''
'''sys.stdout,标准输出,print的本质就是sys.stdout.write'''
import sysfor i in range(6):
print ('helloworld')
for i in range(6):
sys.stdout.write('worldhello\n')

‘’‘stdout是一个类文件对象,调用了他的write函数就可以打印任何的字符串了,他们不会自己为你添加回车,要自己添加\n但是只有write的办法,木有read的方法
还是由于是类文件对象,因此你可以讲任何类文件赋值,然后重定向输出
那可能会问,啥时重定向输出,简而言之,就是将输出内容从"控制台"转到"文件"’’’

import sys
print 'hello' #标准输出
demo = sys.stdout #重定向之前保存demo
demo2=open('test.txt','w')
sys.stdout = demo2
print 'world'
demo2.close()
sys.stdout = demo
demo3 = open('test.txt','r')
demo3.read()

‘’‘os模块’’’

import os
print dir(os)
print os.name #判断正在使用的平台,windows为’nt‘,linux为’posix‘
print os.getcwd() #获取当前目录
print os.listdir(r"C:\Users\30538\PycharmProjects\secure_POC\POC") #列出次目录下的文件
# os.mkdir("demo3") #在本目录下建立一个叫demo3的文件夹

#os.rmdir(“demo3”) # 删除demo3
#os.rename(“test.txt”,“test1.txt”) #修改文件名
#os.remove(“test1.txt”) # 删除该文件
‘’‘os库提供了在Python中使用操作系统的命令的方法就是用os.system()
以下是Winods系统’’’
comand = ‘dir’
os.system(comand)

‘’‘time模块’’’

'''time模块很常用的,比如说在延时注入中,就要用到他,他可以精确的知道程序的运行长短,老样子,常用的
'''
import time
print time.time() #获得当前时间的时间戳
print time.clock() # 获取进程时间
print time.localtime() #时间戳转换成当地时间
print time.asctime() #元组表示时间:Wed Sep 15 21:43:14 2021

‘’‘json模块’’’

‘’‘说到传递数据,咱们会想到什么呢?XML和JSON
JSON(JavaScript Object Notation, JS 对象标记)
是一种轻量级的数据交换格式。
它基于 ECMAScript (w3c制定的js规范)的一个子集,
采用完全独立于编程语言的文本格式来存储和表示数据。
简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成,
并有效地提升网络传输效率。’’’

‘’‘Python标准库中有JSON模块,主要是两个功能,序列化(encoding)与反序列化(decoding)
encoding操作 :dumps()’’’

import json
data=[{"username":"admin",'content':('aaa','bbb'),"password":"pwd"}]
print data
data_json=json.dumps(data) # 将data进行格式的编码转换
print data_jsondemo_data=json.loads(data_json)
print demo_data
'''dumps是将dict转化成str格式,loads是将str转化成dict格式。
dump和load也是类似的功能,只是与文件操作结合起来了。'''

‘’‘hashlib模块’’’

'''Python中的hashlib库提供了大量的摘要算法,又叫散列算法'''
import hashlib
md5 = hashlib.md5()
md5.update('admin')print md5.hexdigest()
# update() 方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中。

‘’‘random模块’’’

import random
print ('属性:'),dir(random) #展示属性
print random.random() #生成大于等于0,小于等于1的随机浮点数
print random.uniform(88,99) #88到99的随机浮点数
print random.randint(88,99) #88~99间的整数
print random.choice('xing') #生成xing之中的随机字符
demo=[1,3,4,6]
random.shuffle(demo) #打乱数字
print demo

‘’‘requests模块’’’

import requests
print(dir(requests))
demo = requests.get("http://www.baidu.com") #请求实例
print(demo.cookies) #获取cookie
print(demo.headers) #获取头部信息
print((demo.status_code)) #查看http状态码
print(demo.text)# 查看网页内容
print(demo.content) #以二进制打开服务器返回数据
print("post请求\n")
payload = {'key1':'value1','key2':'value2'}
r = requests.post("http://www.baidu.com",data=payload) #发送post请求
print(r.text)
#data被赋值了之后,结果中才会多了form值,而form值就是post给服务器的内容

‘’‘get请求’’’

# import requests
#
# url="http://127.0.0.1/brute/brute/brute_get.php" #假设网站有一个登陆界面
# payload = {'usernam':'admin','password':'admin','submit':'登陆'} #url中的参数
# r = requests.get(url,params=payload) #params参数收集传入是不定个数的参数,并将收集的到参数以元组的方式存储在params中,如果没有传入参数params就是个空元组
# result = r.content
# if str(result).find('succ'): #str将二进制数据转化成字符串
# print("admin:admin"+'successful')

‘’‘post请求’’’

import requests
url="http://127.0.0.1/brute/brute/brute_get.php"
data = {'usernam':'admin','password':'admin','submit':'登陆'}
r = requests.post(url,data=data)
print(r.status_code)
if r.test.find('succ'):
print('admin:admin'+'successful')

‘’‘pillow模块’’’
‘’‘免费的图像处理工具包,是python下的图像处理模块,支持多种格式,
并提供强大的图形与图像处理功能。对于简单的图像处理或者大批量的简单图像处理任务,
pPillow是PIL的一个派生分支,但如今已经发展成为比PIL本身更具活力的图像处理库。
pillow可以说已经取代了PIL’’’

import pillow
print(dir(pillow))

小工具记录:

目录扫描:

‘’‘目录扫描’’’

import requests
import sysurl=sys.argv[1]
with open("dir.txt","r")as f:
for line in f.readlines():
line = line.strip()
r = requests.get(url+line)
if strr.status_code == 2*:
print("url:"+r.url+"exist")

使用说明:将字典文件放在同目录下,
Terminal命令:python poc6.py
https://www.baidu.com/
请添加图片描述

计算目标网站的icon hash值用于搜素工具搜索:atp-get install python-dev

pip install mmh3
pip install requests
编写python脚本
vim icon_hash.py

import mmh3
import requests
response = requests.get(‘https://xxx.xxx.xxx/favicon.ico’)
favicon = response.content.encode(‘base64’)
hash = mmh3.hash(favicon)
print hash

指纹识别:

(指纹自己收集一波,暂时先不放了。。。。。太长了)

    #!/usr/bin/env python3# -*- coding: utf-8 -*-# @Time    : 2019/7/27 10:00 PM# @Author  : w8ay# @File    : fofacms.pyimport jsonimport reimport osdef read_config():config_file = os.path.join("fofacms.json")with open(config_file, 'r') as f:mark_list = json.load(f)return mark_listclass Fofacms:def __init__(self, html, title):self.html = html.lower()self.title = title.lower()def get_result(self, a):builts = ["(body)\s*=\s*\"", "(title)\s*=\s*\""]if a is True:return Trueif a is False:return Falsefor regx in builts:match = re.search(regx, a, re.I | re.S | re.M)if match:name = match.group(1)length = len(match.group(0))content = a[length: -1]if name == "body":if content.lower() in self.html:return Trueelse:return Falseelif name == "title":if content.lower() in self.title:return Trueelse:return Falseraise Exception("不能识别的a:" + str(a))def calc_express(self, expr):#  title="NBX NetSet" || (header="Alternates" && body="NBX")#  1||(2&&3) => 1 2 3 && ||# header="X-Copyright: wspx" || header="X-Powered-By: ANSI C"# header="SS_MID" && header="squarespace.net"expr = self.in2post(expr)# print("后缀表达式", expr)stack = []special_sign = ["||", "&&"]if len(expr) > 1:for exp in expr:if exp not in special_sign:stack.append(exp)else:a = self.get_result(stack.pop())b = self.get_result(stack.pop())c = Noneif exp == "||":c = a or belif exp == "&&":c = a and bstack.append(c)if stack:return stack.pop()else:return self.get_result(expr[0])def in2post(self, expr):""" :param expr: 前缀表达式:return: 后缀表达式Example:1||(2&&3) => 1 2 3 && ||"""stack = []  # 存储栈post = []  # 后缀表达式存储special_sign = ["&&", "||", "(", ")"]builts = ["body\s*=\s*\"", "title\s*=\s*\""]exprs = []tmp = ""in_quote = 0  # 0未发现 1发现 2 待验证状态for z in expr:is_continue = Falsetmp += zif in_quote == 0:for regx in builts:if re.search(regx, tmp, re.I):in_quote = 1is_continue = Truebreakelif in_quote == 1:if z == "\"":in_quote = 2if is_continue:continuefor i in special_sign:if tmp.endswith(i):if i == ")" and in_quote == 2:# 查找是否有左括号zuo = 0you = 0for q in exprs:if q == "(":zuo += 1elif q == ")":you += 1if zuo - you < 1:continue# print(": " + tmp + " " + str(in_quote))length = len(i)_ = tmp[0:-length]if in_quote == 2 or in_quote == 0:if in_quote == 2 and not _.strip().endswith("\""):continueif _.strip() != "":exprs.append(_.strip())exprs.append(i)tmp = ""in_quote = 0breakif tmp != "":exprs.append(tmp)if not exprs:return [expr]# print("分离字符", exprs)for z in exprs:if z not in special_sign:  # 字符直接输出post.append(z)else:if z != ')' and (not stack or z == '(' or stack[-1] == '('):  # stack 不空;栈顶为(;优先级大于stack.append(z)  # 运算符入栈elif z == ')':  # 右括号出栈while True:x = stack.pop()if x != '(':post.append(x)else:breakelse:  # 比较运算符优先级,看是否入栈出栈while True:if stack and stack[-1] != '(':post.append(stack.pop())else:stack.append(z)breakwhile stack:  # 还未出栈的运算符,需要加到表达式末尾post.append(stack.pop())return postdef fingerprint(body):mark_list = read_config()# titlem = re.search('<title>(.*?)<\/title>', resp, re.I | re.M | re.S)title = ""if m:title = m.group(1).strip()fofa = Fofacms(body, title)whatweb = ""for item in mark_list:express = item["rule"]name = item["name"]# print("rule:" + express)try:if fofa.calc_express(express):whatweb = name.lower()breakexcept Exception:print("fofacms error express:{} name:{}".format(express, name))return whatwebimport requestsurl = "https://x.hacking8.com"print("识别:" + url)resp = requests.get(url).textprint(fingerprint(resp))

更新中:

看完点赞关注不迷路!!! 后续继续更新优质安全内容!!!

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

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

相关文章

CVE-2021-41773 CVE-2021-42013 Apache HTTPd最新RCE漏洞复现 目录穿越漏洞

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; CVE-2021-41773漏洞描述&#xff1a; Apache HTTPd是Apache基金会开源的一款流行的HTTP服务器。2021年10月8日Apache HTTPd官方发布安全更新&#xff0c;披…

SSRF,以weblogic为案例

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 复习一下ssrf的原理及危害&#xff0c;并且以weblog的ssrf漏洞为案例 漏洞原理 SSRF(Server-side Request Forge, 服务端请求伪造) 通常用于控制web进而…

C++11 右值引用、移动语义、完美转发、万能引用

C11 右值引用、移动语义、完美转发、引用折叠、万能引用 转自&#xff1a;http://c.biancheng.net/ C中的左值和右值 右值引用可以从字面意思上理解&#xff0c;指的是以引用传递&#xff08;而非值传递&#xff09;的方式使用 C 右值。关于 C 引用&#xff0c;已经在《C引用…

Java安全(一) : java类 | 反射

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.java基础 Java平台共分为三个主要版本Java SE&#xff08;Java Platform, Standard Edition&#xff0c;Java平台标准版&#xff09;、Java EE&#xff0…

对某公司一次弱口令到存储型xss挖掘

转自我的奇安信攻防社区文章:https://forum.butian.net/share/885 免责声明: 渗透过程为授权测试,所有漏洞均以提交相关平台,博客目的只为分享挖掘思路和知识传播** 涉及知识: xss注入及xss注入绕过 挖掘过程: 某次针对某目标信息搜集无意发现某工程公司的项目招标平台 …

C++11新特性选讲 语言部分 侯捷

C11新特性选讲 语言部分 侯捷 本课程分为两个部分&#xff1a;语言的部分和标准库的部分。只谈新特性&#xff0c;并且是选讲。 本文为语言部分笔记。 语言 Variadic Templatesmove semanticsautoRange-based for loopInitializer listLambdas… 标准库 type_traitsunodered…

java安全(二):JDBC|sql注入|预编译

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1 JDBC基础 JDBC(Java Database Connectivity)是Java提供对数据库进行连接、操作的标准API。Java自身并不会去实现对数据库的连接、查询、更新等操作而是通…

java安全(三)RMI

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.RMI 是什么 RMI(Remote Method Invocation)即Java远程方法调用&#xff0c;RMI用于构建分布式应用程序&#xff0c;RMI实现了Java程序之间跨JVM的远程通信…

java安全(四) JNDI

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.JNDI JNDI(Java Naming and Directory Interface)是Java提供的Java 命名和目录接口。通过调用JNDI的API应用程序可以定位资源和其他程序对象。JNDI是Java…

java安全(五)java反序列化

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1. 序列化 在调用RMI时,发现接收发送数据都是反序列化数据. 例如JSON和XML等语言,在网络上传递信息,都会用到一些格式化数据,大多数处理方法中&#xff0c…

git merge和rebase的区别与选择

git merge和rebase的区别与选择 转自&#xff1a;https://github.com/geeeeeeeeek/git-recipes/wiki/5.1-%E4%BB%A3%E7%A0%81%E5%90%88%E5%B9%B6%EF%BC%9AMerge%E3%80%81Rebase-%E7%9A%84%E9%80%89%E6%8B%A9#merge BY 童仲毅&#xff08;geeeeeeeeekgithub&#xff09; 这是一篇…

java安全(六)java反序列化2,ysoserial调试

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; ysoserial 下载地址&#xff1a;https://github.com/angelwhu/ysoserial ysoserial可以让⽤户根据⾃⼰选择的利⽤链&#xff0c;⽣成反序列化利⽤数据&…

java安全(七) 反序列化3 CC利用链 TransformedMap版

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 目录图解代码demo涉及的接口与类&#xff1a;TransformedMapTransformerConstantTransformerInvokerTransformerChainedTransformerdome理解总结&#xff1a…

java安全(八)TransformedMap构造POC

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 上一篇构造了一个了commons-collections的demo 【传送门】 package test.org.vulhub.Ser;import org.apache.commons.collections.Transformer; import org…

Pytorch Tutorial 使用torch.autograd进行自动微分

Pytorch Tutorial 使用torch.autograd进行自动微分 本文翻译自 PyTorch 官网教程。 原文&#xff1a;https://pytorch.org/tutorials/beginner/basics/autogradqs_tutorial.html#optional-reading-tensor-gradients-and-jacobian-products 在训练神经网络时&#xff0c;最常使用…

TVM:编译深度学习模型快速上手教程

TVM&#xff1a;编译深度学习模型快速上手教程 本文将展示如何使用 Relay python 前端构建一个神经网络&#xff0c;并使用 TVM 为 Nvidia GPU 生成一个运行时库。 注意我们需要再构建 TVM 时启用了 cuda 和 llvm。 TVM支持的硬件后端总览 在本教程中&#xff0c;我们使用 cu…

TVM:设计与架构

TVM&#xff1a;设计与架构 本文档适用于想要了解 TVM 架构和/或积极开发项目的开发人员。页面组织如下&#xff1a; 示例编译流程概述了 TVM 将模型的高层描述转换为可部署模块所采取的步骤。要开始使用&#xff0c;请先阅读本节。 逻辑架构组件部分描述了逻辑组件。后面的部…

Nvidia CUDA初级教程4 GPU体系架构概述

Nvidia CUDA初级教程4 GPU体系架构概述 视频&#xff1a;https://www.bilibili.com/video/BV1kx411m7Fk?p5 讲师&#xff1a;周斌 本节内容&#xff1a; 为什么需要GPU三种方法提升GPU的处理速度实际GPU的设计举例&#xff1a; NVDIA GTX 480: FermiNVDIA GTX 680: Kepler GP…

Nvidia CUDA初级教程5 CUDA/GPU编程模型

Nvidia CUDA初级教程5 CUDA/GPU编程模型 视频&#xff1a;https://www.bilibili.com/video/BV1kx411m7Fk?p6 讲师&#xff1a;周斌 本节内容&#xff1a; CPU和GPU互动模式GPU线程组织模型&#xff08;需要不停强化&#xff09;GPU存储模型基本的编程问题 CPU与GPU交互 各自…

Nvidia CUDA初级教程6 CUDA编程一

Nvidia CUDA初级教程6 CUDA编程一 视频&#xff1a;https://www.bilibili.com/video/BV1kx411m7Fk?p7 讲师&#xff1a;周斌 GPU架构概览 GPU特别使用于&#xff1a; 密集计算&#xff0c;高度可并行计算图形学 晶体管主要被用于&#xff1a; 执行计算而不是 缓存数据控制指令…