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地址.

  • Format String
    printf(s)的时候, 假如s是用户可控的话, 就有办法利用格式化字符串输出任意地址的数据. 一个简单的例子就是:
    %p.%p.%p.%p.%p.%s
    

    可能就会在输出了一堆地址之后输出一个字符串, 然后这个字符串刚好就是我要知道的东西.

Heap

(学长说读源码 是一种学习方法. 虽然现在还没有这个能力. )

主要的问题是我现在也不是很熟… (没有遇到过) 所以这个就先留空… (尴尬)

Crypto

学长是以RSA算法为例子为我们讲解的.

(虽然我对密码学不是很理解, 但是感觉能够接受一些. )

Tools

推荐的工具是MathematicaSageMath, 用来计算(解决数学问题), 这两个都得要好好学一遍…

(之前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的密码标志, 但是实际上没有被加密, 需要尽可能的去试探. 类似于利用一个已知解缩小求解的范围.

后记

看不下去了, 这里写的这些实在是太水了. 希望以后可以逐渐变强一些.