PWN & Crypto & Misc
PWN & Crypto & Misc
乱花渐欲迷人眼, 浅草才能没马蹄.
感觉学起来有点点吃力, 但是我可以努力试试. 因为这几天学的东西太多了, 但是掌握的情况又不是很好, 只能够写下一些大概的点. 以后就看这些点来进行一个复(预)习.
PWN
学长介绍原理的时候主要介绍的网站是 ctf-wiki
这里就记录一下简单的原理和攻击.
Stack
虽然之前也写过一个超级烂的东西
但是当时应该是没有很明白, 导致现在学的时候就更不明白了. QAQ.
现在是简单地把栈想成一个书架, 书架是从最上面开始向下面放书的, (数据从高地址向低地址增长).
- Stack Overflow
有一些函数比如gets
就会无限制地读取输入并写入栈中, 于是就会导致栈溢出.- ROP
利用栈溢出的方法, 可以把栈的返回地址覆盖掉, 让函数执行完毕以后(eip
)跳转到指定的位置去执行特定的代码. (据说可以利用类似的方法达到)def form_playload(length) temp = 'A' * length res = '' time.times do res += temp temp.succ! end res end
可以这样构造一个函数用来输出一堆无用的填充, 然后在调试器里面看最后返回的地址, 然后计算出是第几个要被替换成要用的地址. 要利用的地址比如说是某个函数, 或者是
shellcode
之类的东西, 还有就是libc
地址.
- ROP
- Format String
在printf(s)
的时候, 假如s
是用户可控的话, 就有办法利用格式化字符串输出任意地址的数据. 一个简单的例子就是:%p.%p.%p.%p.%p.%s
可能就会在输出了一堆地址之后输出一个字符串, 然后这个字符串刚好就是我要知道的东西.
Heap
(学长说读源码 是一种学习方法. 虽然现在还没有这个能力. )
主要的问题是我现在也不是很熟… (没有遇到过) 所以这个就先留空… (尴尬)
Crypto
学长是以RSA算法为例子为我们讲解的.
(虽然我对密码学不是很理解, 但是感觉能够接受一些. )
Tools
推荐的工具是Mathematica
和SageMath
, 用来计算(解决数学问题),
这两个都得要好好学一遍…
(之前mma
接触的时候只是了解了如何解方程, 还有简单的画图之类的,
对数论部分不太清楚. 而sage
又因为是python的, 所以有点不想用,
于是就没学… 亏啊. )
RSA算法介绍
简单的python代码:
# RSA 加密方法
# 密文是 ct = pt ** e mod N
# 明文是 pt = ct ** d mod N
# 公匙为 e, N
# 私匙为 d, N
from Crypto.Util.number import *
pt_txt = "balabala"
pt = byte_to_long(pt_txt.encode())
# RSA难以破解的关键之一就在于大数难以分解质因数
BITS = 1024
p = getPrime(BITS)
q = getPrime(BITS)
N = p * q
# 一般e是一个大数
e = 6337
ct = pow(pt, e, N)
一个例子
假如e
很小的话, 比如3
, 就可以尝试暴力枚举k
,
看是否满足gmpy2.iroot(ct + k * N, e)
的输出是一个整数.
密码学的类似方法
总之, 在密码学里面的问题往往是针对一个数学问题的解决, 有时候就是某个人的论文的结果, 所以往往是利用数学做题. 并且网络上的工具都是完善的. 直接用就好了.
(又: 不要怕暴力枚举, 2 ** 22
都是可以接受的数量级. )
Misc
Misc里面, 凡是看到一点点的奇怪的东西, 不管怎么奇怪, 都有隐藏信息的可能性. 并且在Misc里面对于编码的了解也是很重要的.
实际上Misc里面的题目往往是一个对工具的利用的题目, 常常需要学会对工具的使用. 并且还要见多识广.
隐写
图片
- 追加式文件隐写
strings
命令binwalk
可以分析文件的区块010editor
等
- 文件结构隐写
利用的是 - LSB隐写
原理就是利用人眼对颜色的分辨能力没有那么强, 于是修改
音频隐写
- 追加隐写
和追加式隐写差不多, 一般都是在靠头部和尾部的一段奇怪的编码. - 频谱隐写
特点就是声音听起来很刺耳, 转到频谱视角一般可以出结果.
流量包
一般会跟踪HTTP流而不是TCP流. 用到的是一个叫做wireshark
的工具.
- 看HTTP
- 看DNS的隐写
- 关于SQL注入 一般是想要知道最后一次的得到的解
- USB
从source(比如说是3.2)到host(也就是电脑)的信息发送,
压缩包
- 爆破密码
- CRC32校验
可以利用文件的校验码来爆破, 前提是这个的样本要足够小, - 明文攻击
利用没有加密的文件来计算加密的文件, 对比的方法就是CRC校验, - 伪加密
特点是有一个01
的密码标志, 但是实际上没有被加密, 需要尽可能的去试探. 类似于利用一个已知解缩小求解的范围.
后记
看不下去了, 这里写的这些实在是太水了. 希望以后可以逐渐变强一些.