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.pswp.cn/news/532560.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532560.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532560.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

protobuf版本常見問題

protobuf版本常見問題 許多軟件都依賴 google 的 protobuf&#xff0c;我們很有可能在安裝多個軟件時重復安裝了多個版本的 protobuf&#xff0c;它們之間很可能出現沖突并導致在后續的工作中出現版本不匹配之類的錯誤。本文將討論筆者在使用 protobuf 中遇到的一些問題&#…

CMake常用命令整理

CMake常用命令整理 轉自&#xff1a;https://zhuanlan.zhihu.com/p/315768216 CMake 是什么我就不用再多說什么了&#xff0c;相信大家都有接觸才會看一篇文章。對于不太熟悉的開發人員可以把這篇文章當個查找手冊。 1.CMake語法 1.1 指定cmake的最小版本 cmake_minimum_r…

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引用…

C++11 std::function, std::bind, std::ref, std::cref

C11 std::function, std::bind, std::ref, std::cref 轉自&#xff1a;http://www.jellythink.com/ std::function 看看這段代碼 先來看看下面這兩行代碼&#xff1a; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::function<void(Ev…

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

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 1.java基礎 Java平臺共分為三個主要版本Java SE&#xff08;Java Platform, Standard Edition&#xff0c;Java平臺標準版&#xff09;、Java EE&#xff0…

LeetCode-287 尋找重復數 二分法

LeetCode-287 尋找重復數 二分法 287. 尋找重復數 給定一個包含 n 1 個整數的數組 nums &#xff0c;其數字都在 1 到 n 之間&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一個重復的整數。 假設 nums 只有 一個重復的整數 &#xff0c;找出 這個重復的數 。…

對某公司一次弱口令到存儲型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的遠程通信…

LeetCode-726 原子的數量 遞歸

LeetCode-726 原子的數量 遞歸 題目鏈接&#xff1a;LeetCode-726 原子的數量 給你一個字符串化學式 formula &#xff0c;返回 每種原子的數量 。 原子總是以一個大寫字母開始&#xff0c;接著跟隨 0 個或任意個小寫字母&#xff0c;表示原子的名字。 如果數量大于 1&#xf…

java安全(四) JNDI

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 1.JNDI JNDI(Java Naming and Directory Interface)是Java提供的Java 命名和目錄接口。通過調用JNDI的API應用程序可以定位資源和其他程序對象。JNDI是Java…

二叉樹的層序遍歷和前中后序遍歷代碼 迭代/遞歸

前中后序遍歷&#xff08;DFS&#xff09; 首先我們要明確前中后序遍歷的順序&#xff1a; 前序&#xff1a;中左右中序&#xff1a;左中右后序&#xff1a;左右中 前中后序遍歷的遞歸代碼和迭代代碼分別有各自的框架&#xff0c;然后根據遍歷順序調整記錄元素的位置即可。 …

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;?成反序列化利?數據&…

C++面試常見問題一

C面試常見問題一 轉自&#xff1a;https://oldpan.me/archives/c-interview-answer-1 原作者&#xff1a;[oldpan][https://oldpan.me/] 前言 這里收集市面上所有的關于算法和開發崗最容易遇到的關于C方面的問題&#xff0c;問題信息來自互聯網以及牛客網的C面試題目匯總。答題…

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

給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 給個關注&#xff1f;寶兒&#xff01; 目錄圖解代碼demo涉及的接口與類&#xff1a;TransformedMapTransformerConstantTransformerInvokerTransformerChainedTransformerdome理解總結&#xff1a…