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

更新中:

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

python 到 poc相关推荐

  1. Python之POC编写

    POC简介: PoC(Proof of Concept),即概念验证.通常是企业进行产品选型时或开展外部实施项目前,进行的一种产品或供应商能力验证工作.POC是用来证明漏洞存在的,EXP是用来利用漏洞 ...

  2. python编写poc_分享使用python编写poc,exp的实例教程

    在很久很久以,我有一个梦想 但是,后来我发现我的梦想渐渐没有了 于是,昨天我思考了一晚上 觉得我应该有个梦想的! 好了,回到正题.正所谓明人不装暗逼,今天我家开通了公网ip我开森啊,很开森的那种! 额 ...

  3. discuz7.2漏洞复现--python编写poc

    环境搭建 准备一台win7装上的phpstudy 将discuz7.2源码放进去 安装discuz之前,需要先安装center 文件夹搭建存放的位置是: 解压完成之后更改名称 再然后需要把ucente ...

  4. python指数运算函数_分享Python中用于计算指数的exp()方法实例教程

    exp()方法返回指数x: ex. 语法 以下是exp()方法的语法:import math math.exp( x ) 注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math ...

  5. S2-052的POC测试

    今天朋友圈全被S2-052刷屏了.看了好些大牛分析,虽然原理不是特别明白.但是想尝试去复现一把. 一.环境搭建: 需要TOMCAT / JDK /struts-2.5.12安装包 / burpsuit ...

  6. 【关注观星公众号】渗透系列之POC编写之刷分大法

    一.前言:POC&EXP 什么是POC:即Proof of Concept,是业界流行的针对客户具体应用的验证性测试,根据用户对采用系统提出的性能要求和扩展需求的指标,在选用服务器上进行真实数 ...

  7. POC编写基础————1、基础知识

    前言 本系列内容主要讲解POC的编写,而笔者也是一个小小白,刚刚学习POC的编写不久,打算记录一些心得,有兴趣的可以一起讨论,一起交流,同时可以一起分享各自收藏或者编写的POC进行学习! 什么是POC ...

  8. 开发文档怎么编写_PoC 编写指南

    什么是 PoC PoC(全称: Proof of Concept), 中文译作概念验证.在安全界,你可以理解成为漏洞验证程序.和一些应用程序相比,PoC 是一段不完整的程序,仅仅是为了证明提出者的观点 ...

  9. XSS注入进阶练习篇(三) XSS原型链污染

    XSS原型链污染 1.原型链的概念 1.1 构造函数的缺点 1.2 prototype 属性的作用 1.3 原型链 1.4 `constructor`属性 1.5 `prototype`和`__pro ...

最新文章

  1. 贺州学院计算机协会,2019年广西高等教育学会数学教学专业委员会年会暨学术交流会在贺州学院召开...
  2. font-family字体总结
  3. 【转自聊聊架构公众号】 Redis大key图形化统计及展示
  4. linux mysql互为主从_mysql互为主从配置(双主模型)
  5. 在现代引擎游戏中使用正确的渲染打光流程
  6. 【Linux】一步一步学Linux——pkill命令(126)
  7. 同步规则和happen-before规则
  8. datetime报错 sql脚本_《SQL必知必会》附录A样例表的获取和导入
  9. 什么是补码-网上找到的,非原创
  10. 程序员又迎一利器,联想 LeapIOT 工业互联网平台大曝光
  11. 前端见微知著AngularJS备忘篇:温故而知新,可以为师矣
  12. USB转串口线突然不好用了
  13. 【微信小程序怎么开店铺】微信小程序店铺怎么制作?
  14. SQL 注入速查表大全
  15. 【性能测试之问题分析】遇到内存告警百分之80以上的排查逻辑及实例分析(关键字:JVM、JAVA)
  16. 从零开始写高性能的人脸识别服务器(三)
  17. GOM 登录器源码及编译教程
  18. CC2530F256RHAR -RF收发器封装:QFN40
  19. JS 实现抛物线运动
  20. Android八门神器(一):OkHttp框架源码解析 1

热门文章

  1. (Docker实战) 第4篇:Centos7 拉取和部署Redis
  2. Centos7 使用Docker 安装Oracle 截图+关键步骤说明
  3. (vue基础试炼_03)使用vue.js实现TodoList
  4. idea配置的导入导出
  5. iscroll的使用
  6. 天气模式_北方降雪骤减!南方开启湿冷模式多阴雨!|天气展望
  7. 什么是python之禅_【Python面试】你了解什么是 Python 之禅么?
  8. .net redis定时_一场由fork引发的超时,让我们重新探讨Redis的抖动问题
  9. QtCreate编译器在调试程序时,右侧的变量表达式值视图被不小心关闭了
  10. python整数转字节数组_【转】Python内置函数(7)——bytearray