这里先简单占个坑,等过段时间仔细学完C沙箱的一些知识后再补
沙箱
seccomp(secure computing mode)是Linux内核中的一种安全机制
主要用的是prctl函数
有白名单和黑名单两种模式两种
白名单允许可调用的系统调用
黑名单上是不允许的系统调用
有过滤器机制
可以看看
http://cn-sec.com/archives/400295.html
http://blog.sina.com.cn/s/blog_53fdf1590102xtg3.html
这里先简单占个坑,等过段时间仔细学完C沙箱的一些知识后再补
沙箱
seccomp(secure computing mode)是Linux内核中的一种安全机制
主要用的是prctl函数
有白名单和黑名单两种模式两种
白名单允许可调用的系统调用
黑名单上是不允许的系统调用
有过滤器机制
可以看看
http://cn-sec.com/archives/400295.html
http://blog.sina.com.cn/s/blog_53fdf1590102xtg3.html
https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/off-by-one/
http://blog.eonew.cn/archives/1233
这两篇组合起来看,应该就差不多了。至少先看了这两篇,我讲的只是我觉得一些重要的点
这应该是off_by_null的最后一篇了
之前说过了,off_by_null一种是修改类似bss段上堆信息;另一种是通过覆盖堆head上pre_inuse,然后配合unlink实现堆重叠的
但是当libc-2.29以后增加了一个保护机制,在free的时候会检查该堆的size和下一堆的pre_size是否相等,这样我们就不能像之前一样直接伪造一个堆块,因为我们很难区控制一个堆块的size段,同时满足unlink的条件。(即使我们可以伪造一个对的结构,可是我们该如何填充相关信息呢)
wiki上off_by_null的第三题plainnote就引出了新的绕过方法。
原理:我们知道当chunk被free之后会在其中遗留有链表信息(fd,bk),其中large bin还要特别一些,他会遗留fd,bk,fd_nextsize,bk_nextsize,而且一般情况,只有一个large bin的时候,他的fd_nextsize和bk_nextsize会指向自己,
这个绕过方法就是,也是伪造chunk,占用large bin的fd,bk位作为pre_size,还有size。把fd_nextsize,bk_nextsize稍加改动作为被伪造chunk的fd和bk.
在这个题里,我们在调试的时候有意的把large bin起始位置的前16位调为0,为了方便,因为后面会需要爆破,概率是1/16
正常的large bin长得像这样
1 | 爆破的位置 |
我们知道,如果要unlink有个难点就是要绕过一个检测
p->fd->bk ==p
p->bk->fd ==p
这里,我们就通过手动覆盖和fastbin的机制,把相应的地址写在各自位置上。
我才用wiki的exp讲吧,我改了一点,
1 | #!/usr/bin/env python |
这里说一下,还有个srop做法的,等下次再说吧,怕了怕了。
之前其实也做过srop的题,但一是因为之前太菜,其实并没有真正的理解;二是之前没做笔记。所以其实学了又感觉没有学。
原理部分:
wiki
大专栏
他们讲得已经很好了,至少对于给出smallest这道题而言。
简要说明:
当进程从用户态切换到内核态的时候,进程的一些信息(各寄存器状态)会以结构体Signal Frame的形式写在栈里。当需要切换回去的时候,只需要触发sigreturn就行(系统调用好为15)
所以,当存在溢出时,我们可以伪造一个我们需要的Signal Frame,然后触发sigreturn就行。
这题插一句,rax寄存器通常会被用于存储函数的返回值;同时,当我们需要调用某一个系统调用,相应的系统调用号也是储存在rax里的.
这里就有了很多的操作空间—-可以将上一个函数的返回值用作下一个syscall的系统调用号。
所以这个题里面,我们就是利用read函数读取的字数(返回值),控制rax中值,然后调用syscall;ret。
例题是wiki上的smallest
这里有两个exp
wiki版
继续更off_by_null,其实也就是把自己的一些总结写下来,将来方便自己回顾。
之前的一篇简单说过了off_by_null,不过在那一篇里,off_by_null的利用方式是通过边界溢出修改类似在bss段上的内容。以此来间接达到我们想要的结果。
今天这个,中心思想是通过一字节溢出,修改下一个堆块上size段上的pre_inuse位,以此欺骗分配器–“本堆块已被释放(实际并没有)”。在pre_inuse位归0后,pre_size会同时被启用,我们伪造pre_size就可以实现堆重叠。
通常目的是为了,让堆块被释放后被合并,辅助实现unlink,构成堆重叠。
大概就这个原理吧,因为我是随着wiki上的题做的。这次这例题是wiki上的,但是我个人觉得并不合适(可能是因为版本原因吧,我也不知道,后面会讲为什么)
题目链接:https://github.com/ctfs/write-ups-2015/tree/master/plaidctf-2015/pwnable/plaiddb
这个题就是,逆向有点恶心,题大体上不难,原理就是我上面说的那个,具体wiki上说得很详细了我不重复了,可以先看看Wiki,这里我就说点我的一些想法。环境是ubuntu16.04的
1 |
|
原因:
我们在做栈题的时候总是会需要查找libc
常用的有好几个方法:
一个是在线查找:https://libc.nullbyte.cat/
还有一个就是使用工具LibcSearcher,学pwn的应该都不陌生
======
今天这里就讲LibcSearcher。
在LibcSearcher使用了一段时间以后,大多数同学都大概会遇到一个问题:找不到要的libc
网上的很多博主提供的方法都是直接抄的,很不负责,简直误人子弟,关键浪费时间。(当然,也有可能是时效性的原因)
反正不行
比如这个方法:
https://www.codetd.com/article/12472207
后来找到了原因,还有切实可用的方法
https://python.iitter.com/other/259587.html
老的LibcSearcher不支持py3,新的版本可以支持在线查询,不在需要下载本地库。
方法:
1 | pip3 install LibcSearcher |
然后用py3来执行EXP就行,实现在线查询。
感谢:以上提供参考方法的两位博主
原因:
之前的关于格式化字符串的漏洞的笔记都在简书上
这次记录的这道格式化字符串的题其实也并没有什么特别的地方,不过这其中遇到的一些问题还是挺有意思的,可记录一下
题目名字是:SWPUCTF_2019_login
在buu里也有
这题在开始的时候,解题什么都还顺利。本地也顺利打通,但是后面在打远程的时候老是不行,先以为是libc的问题,后面又以为是远程环境的问题,最后发现还是自己太菜了。
1 | # thers are something wrong,it only works at the local environment |
打本地是没有问题的
1 | b'/bin/sh\n' |
但是,打远程就不行
1 | [DEBUG] Sent 0x8 bytes: |
先老是不知道原因,就想着是不是libc的问题,一阵折腾反而把一直以来libcsercher的问题绝了
后来,我仔细找了很久,找了一些其他大佬的博客,看他们的wp
找到一个
前言:
一直写博客都是在win下用typora,搞笑的是,图片上传一直都是手动上传到smms(不然图就只有本地有没错菜鸡就是我)。导致我写博客一直不愿意用图片,写的时候爽,但是后面就麻烦了。之前倒是知道picgo,但是一直没用,主要一直想自己搭图床的。现在觉得—嗯,现成的真香。。
正文:
typora图片上传
找到最新的,这里是2.3.0
我是win上的typora。选.exe
下载可以先搭梯子,不然可能有点慢
是setup,直接next点到最后就行
打开插件区,安装这个插件
这几天总还是有些,浮躁。想生活,想学业,想一些有的没的奇奇怪怪的东西。
我突然感到,我所生活的这个世界是多么的撕裂。还是说,我始终是格格不入!?
年轻的人,青年的人。你该何去何从?
我想写一本书,写关于我们这一代人的书,记录的是我们的生活,我们这一代人的生活。
也许是现在写故事的人都不能好好再生存下去了吧!
或者说,想要写我们这一代人的故事的人,还不能好好的生活。
还不曾有人,为我们发声,写出关于我们的故事。
如果可以,如果,再过几年,我还能是我自己。
我想成为其中一个人,写我们的故事。
主题,暂时就称是《千禧》吧
这个,暂时算作是一个flag吧
毕竟,现在的我勉强还带有一些理想主义色彩。
引入概念:
设m是大于1的整数,a是与m互素的整数,则使得$$a^e \equiv 1 \pmod{m}$$
成立的最小正整数e交a模m的阶(order),记作$ord_m(a)$
我们由欧拉定理知道,$ord_m(a) \le \varphi(m) $
eg:
设整数$m=7$,计算$a=1,2,3,4,5,6$的阶
解:
$$1^1 \equiv 1 \pmod{7},2^3 \equiv 1 \pmod{7},3^6 \equiv 1 \pmod{7}$$
重点:平方剩余的判定,legendre符号及计算方法。
这一章的重点就是求解rabin公钥系统
引入:
rabin公钥系统密钥的生成:
随机生成两个大素数$p,q$,$N=p \times q$
公钥为$N$,私钥为$(p,q)$
加密:
$c \equiv m_2 \pmod{N}$
其中,B是明文,C是密文。
解密;
即求解二次同余式 $x_2 \equiv c \pmod{N}$
所以第四章的核心就是如何求解二次同余式。
首先,生么是二次同余式?
前面,我们已经遇到了,形如$x_2 \equiv a \pmod{m}$的就是二次同余式,如果$(a,m)=1$则同余式有解。