我不想说
Please enter the password to read the blog. Decrypt U2FsdGVkX1+lSnE4LAJYCqhfmvo1kfGwyKfxbsnpw1IR/lL7DJaUi4zrecwC/jZ7xB0tbyyKiQzV2ZgGLJ0isDBrN+SmPqABodZL0Xh2AvRTx+hYM6J2AbAEx2U07D8eAz5O2feA2hdlhqVf41XnAmsjXTXzCwnAQFKR6b5l1+ff2DWStQ+zH4Boi8KhddPpXLCpC/KwQ4Z9Q9HitK0skAyxr9covKCa1Wji2n1zq0E9xMHj0I93sQSb4OlIr8kbmhog1K2+EOjLaADPDc6FqCOPcri08O47WJ+8lBMHbTWs9cXK2yEUHWi6cKr7P+rtFdax0S8pPNO4OGQO8t5AYhmP+i2QuEWj9DJpLM4Rc3Vvo7t2Ux4nj9w3dYxr3J0PrW0B1lUQHaN3okpITGXY/jyJPknw480WRHTUKkJoib8F9tHiOql ...
Writeup for Crypto challenges of GACTF 2020
前言
GACTF算是新的XCTF分站赛,受北极星师傅邀请抽空打了这场比赛。最后团队总排名19名。很可惜这次比赛队友因故都没怎么认真做,不然是很有可能打进前十名的。星盟团队确实没有顶尖的密码手,因此这次比赛的crypto题目是相对简单的,这次本菜鸡也算是K了。
Writeup
da Vinci after rsa
题目首先给了一个貌似RSA算法的公钥和密文。N在factordb.com上可以完全分解。当我们兴冲冲地去求解d时,发现求不出e的逆元。那么这样也就是老的开根+CRT套路了,比较好的算法是A-M-M算法。但是在开源数学软件Sagemath中,已经实现了模域的开根算法,所以我们直接调用Sage中的roots()方法就行。解出以后,解一个简单的移位密码达芬奇密码就获得了flag,达芬奇密码简单地说就是将斐波那契序列作移位而形成。
Exp:
p = 9749q = 11237753507624591r = 9127680453986244150392840833873266696712898279308227257525736684312919750469261n = 99999 ...
Ciscn Build 踩坑笔记
前言
Ciscn真是个坑爹比赛。各种无聊要求最多,承办方通过Build环节收题,还一大堆无理要求(比如在提供docker镜像的情况下要求压缩包小于150M),但是没办法人家是国字头,惹不起嘛。(x
笔记
1.相关docker命令笔记
从指定的Dockerfile构建docker image:
docker build -f Dockerfile .
查看当前的docker image列表:
docker image ls
查看当前的docker container列表:
docker container ls
查看当前的docker 运行情况:
docker ps
删除一个docker镜像:
docker rmi -f <docker image id>
注意如果该镜像已经被某些container使用,则需要加入-f指令强制全部删除。
从某一个docker镜像启动docker服务:
docker run -it -d -p 50002:22 -p 8888:8888 <docker image id>
注意这里的-p指令是将dock ...
开发笔记
前言
记录一下最近的开发过程中遇到的一些问题和解决办法。
Python 静态方法问题
Python的类方法中,一旦某个方法被声明为静态方法,即加入了修饰符@staticmethod,该方法只能直接访问自己声明的一些变量,不能通过self指针访问类中的实例属性。
我使用了一个watchdog的轮子实现文件监控,按照文档样例覆写了父类中的on_any_event()方法,且需要使该方法成为静态方法。框架如下:
class Handler(FileSystemEventHandler): controller = None @staticmethod def on_any_event(event): if event.is_directory: ... elif event.event_type == 'created': ... else: ...
其中,有一行语句需要访问调用该类的控制器controller,但是不能通过self.c ...
stack overflow review
前言
由于某些众所周知的原因,最近得要把早已丢弃的pwn捡起来了,某些坑爹比赛密码手没人权(滑稽)。这次,先分析一个简单的栈指针劫持的栈溢出题。
题目分析
32位程序,首先checksec检查下保护,发现pie和canary都没有开启。
打开题目,发现漏洞函数vul_function()
漏洞点也很明显,最后buf多读了一些,导致在栈上多溢出了0x20-0x18=8位,仅仅刚能够覆盖ebp指针和返回地址,因此不能直接在这里构造ROP链。但是,ELF在bss段初始化生成了一个全局的s,读s的时候可以读入较长的数据。因此利用方法就呼之欲出了,就是在s中先写入构造好的ROP链,然后劫持栈指针指向s的地址执行这些gadgets。
那么怎么劫持栈指针呢?在intel汇编中有一条指令:leave。这条语句约等价于mov esp ebp; pop ebp;。所以我们覆盖的ebp就选择bss段的某个地址,然后找到leave ret的gadget,返回地址覆盖为leave_ret,这样esp就被劫持到bss段了。注意leave指令最后会pop,使栈顶指针增加,因此覆盖的ebp应当是s的实际地址-4 ...
年中随笔
到2020年8月5日为止,入CTF坑也接近一年半了。我看着身边的师傅们逐渐都搭建起了自己的博客,而我却一直迟迟未建,也许是因为懒,也许是畏惧搭建博客过于困难。我知道,我一直习惯于偷懒和拖延,但近期发生了这许多事,已经不容许我继续这样浑水摸鱼下去了。
学习CTF竞赛的过程中,我绝对谈不上废寝忘食,充其量也只能称为“还算认真”。三年失败的高中生活以来,也确实很少有我愿意去认真做的事情,我也一直很清楚,这是我的致命弱点,这也导致我跟不上许多大师傅的脚步。最近WMCTF大获全胜的一战,容易让人飘然忘本,应当在狂欢后正视自身的问题,革命尚未成功,同志仍需努力。
话已讲完,那么,就以这篇随笔为里程碑,开始一段新的旅程吧。
PS:最后献上对这些大师傅们的感谢,他们都给了我很大的帮助:Van1sh, Soreat_u, 0xdktb, coinc1dens, shal10w, badmonkey, and all 0x401 team-mates.
Hello World
Welcome to vagrant’s blog. This is a new start.