“先动手搞起来”
受限于CTF的分支较多,知识点也比较杂,记录一下自己不熟悉的知识点。
robots协议:网络爬虫排除标准,它是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。 当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt。基于人文道德规范建立的标准,不具备强制性(有点类似于readme.md?)
.php 备份文件后缀:通常备份文件的后缀名为.bak 所以 index. php 的备份文件名为 index.php.bak。
cookie:是web服务器为了识别用户身份而设置的一小段文本文件(一小段数据) 可通过Burpsuite爬取网页中的数据包。深入理解Cookie - 简书 (jianshu.com)
Burp爆破模块使用界面:
base64编码:特征是尾部可能会有等于号。
gif隐写:可以使用101editor打开gif图片 若gif图片无法在图片管理器中打开考虑图片是否文档开头中缺少GIF8 [GIF文件头:47 49 46 38 39 61]
HTTP请求方法:
php://filter理解:其是php协议中的一个独有的协议,可以作为一个中间流去处理其他流,从而实现任意文件的读取。大部分情况下使用resourse以筛选过滤指定的数据流。
例如:某个网站的规则被制定为:如果直接用get方法请求flag http://IP:PORT/?p=
会直接被拦截,这时候就可以考虑使用 http://IP:PORT/?p=php://filter/convert.base64-encode/resource=flag
这样就会绕过拦截规则,以base64的格式输出flag中的文件。
对称加密:对称加密算法是指在加密和解密时使用的是同一个密钥。 这种方法速度快,但需要双方事先协商好密钥,并保证密钥不被泄露。它的优点是速度快,效率高,适合加密大量数据。它的缺点是密钥的分发和管理比较困难,如果密钥泄露,加密的数据就会被破解(DES、AES)
非对称加密:非对称加密使用一对密钥来加密和解密数据,其中一个密钥是公开的,叫做公钥,另一个密钥是私密的,叫做私钥。如果使用 公钥 对数据 进行加密 ,只有用对应的 私钥 才能 进行解密 。它的优点是密钥的分发和管理比较容易,只需要公开公钥,私钥不需要共享。它的缺点是速度慢,效率低,适合加密少量数据(RSA、DSA)
简单来说就是,对称加密是同钥加密,同钥解密。非对称加密是公钥加密,私钥解密。
对称加密与非对称加密的代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
import os import base64 from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives.asymmetric import rsa, padding from cryptography.hazmat.primitives import hashes, serialization from cryptography.hazmat.backends import default_backend
symmetric_key = os.urandom(32)
aes_cipher = Cipher(algorithms.AES(symmetric_key), modes.CBC(os.urandom(16)), backend=default_backend())
def symmetric_encrypt(data): data = data.encode() encryptor = aes_cipher.encryptor() padding_length = 16 - len(data) % 16 data = bytes([padding_length]) * padding_length + data return base64.b64encode(encryptor.update(data) + encryptor.finalize())
def symmetric_decrypt(data): data = base64.b64decode(data) decryptor = aes_cipher.decryptor() data = decryptor.update(data) + decryptor.finalize() padding_length = data[-1] return data[:-padding_length].decode()
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048, backend=default_backend()) public_key = private_key.public_key()
def asymmetric_encrypt(data): data = data.encode() return base64.b64encode(public_key.encrypt(data, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)))
def asymmetric_decrypt(data): data = base64.b64decode(data) return public_key.decrypt(data, padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)).decode()
data = "Hello, world!" print("原始数据:", data) symmetric_data = symmetric_encrypt(data) print("对称加密后的数据:", symmetric_data) asymmetric_data = asymmetric_encrypt(data) print("非对称加密后的数据:", asymmetric_data) print("对称解密后的数据:", symmetric_decrypt(symmetric_data)) print("非对称解密后的数据:", asymmetric_decrypt(asymmetric_data))
|
哈希算法:哈希算法是一种单向算法,可以对任意长度的数据生成固定长度的唯一值,称为哈希值或摘要。 哈希算法不能逆向还原原始数据,只能用于验证数据的完整性和一致性。常见的哈希算法有 MD5、SHA-1、SHA-256 等。代码实现较为简单,导入hashlib,再创建一个hash对象即可。