ret2syscall-执行系统调用 checksec一下:32位程序,没有canary、PIE,开了NX,放入IDA看一下:有gets,可以溢出,不过没有system函数,也不能执行shellcode,查看字符发现有/bin/sh,那就是新学的系统调用。 假设程序中存在下面的代码: 但是程序中并没有这串代码,所以需要使用ROP(返回导向编程)构造,构造方式如下图:简单来说就是需要找到一些零零散散的gadget,然后组装成payload,不过前提是先溢出劫持控制器,这里IDA里给出v4的大小的'0x64',要溢出的话需要'0x68'也就是
[第五空间2019 决赛]PWN5-BUUCTF-格式化字符串 第一眼就看到了'system',看一下条件,这里的atoi函数指的是把字符串转换成整数,而'nptr'就是输入的'passwd',再看看另外一个'dword_804C044'表示这个'0x804C044'地址,那意思就是如果输入的'passwd'的值与'dword_804C044'相等就行了,那就改写一下'0x804C044'的值。'指向的内存位置中。这个表示从上面的文件中读取4个字节的字符,并将读取的数据存储到。有canary,栈溢出无望。数了一下,偏移量为10。
攻防世界-CGfsb 看看附件,先在本地环境打一下,先放入kali查看一下版本: 再查看一下保护机制:可以看出该程序是32位的,保护机制的解释如下:【1】RELRO:RELRO会有Partial RELRO和FULL RELRO,如果开启FULL RELRO,意味着我们无法修改got表。【2】Stack:如果栈中开启Canary found,那么就不能用直接用溢出的方法覆盖栈中返回地址,而且要通过改写指针与局部变量、leak canary、overwrite canary的方法来绕过。【3】NX:NX enabled
备份是个好习惯-BugKu 拿到题目后先访问站点看看情况: 发现得到了类似md5的字符串,但是md5一般是16位或者32位,但这个是64位,试着分开看看: 其实是两段一样的md5值,碰碰运气,看看能不能解,结果试了几个网站都没解出来,唯一解出来的还是个空密码: 那只能换个思路了,根据题目提示,应该存在备份文件,先扫个目录:果然扫出来一个index.php.bak文件,访问下载来看看,初学php审计的我,只能借鉴一下大佬的解释,沾个大佬的wp。 说的很详细,我一小白都看懂了!!!后面一看,要先找到两个key,使得key1和k
unusualrsa4-ctf.show(费马小定理扩展) 当r=2,3,4,5,......时,可得到多个k*p,然后对其取gcd即可求出p,然后在模p的条件下求x的逆元即可得到q,那么n就知道了,m即可解出来。给出了invert(q,p),d,c,只需求出n即可解,求n只能根据invert(q,p)以及d,先求出p或q即可。对于任意的r,k1,k2,如果k2是k1的因子时,即k2整除k1,有。这里p是y的因子,也是上面为何要构造(x*phi)mod p的原因。那就说明y是p的倍数,即被p整除,那p就是y其中一个因子。这里的k与上面爆破的k毫无关系。
funnyrsa1-ctf.show(e与phi不互素) 这里解出来的也是m^14,与上面不同的是,这里就一个,当然,这里依旧不能直接开方求,原因和上面一样,这里把14分成2*7,将m^2看成整体m,所以这里的e就成了7,求7在(q1-1)*(q2-1)下的逆元,也就是d,常规rsa即可解出flag。这里我一开始是直接将结果m1,m2开14次方,然后输出flag,但发现行不通,我个人认为应该是开方不完全的原因,换句话说,就是m1,m2开14次方不是整数,python里对其取了整数部分,但转字符会出问题。这里可以利用中国剩余定理,结合c1,c2求出特解c。
内部赛 签到-ctf.show 这结果可是跑了好几个网站才出来,观察一下上面的图案,是十二星座,网上科普一下。的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。天秤座 ♎ U+264E(9月23日 - 10月23日)金牛座 ♉ U+2649(4月21日 - 5月21日)双子座 ♊ U+264A(5月22日 - 6月21日)巨蟹座 ♋ U+264B(6月22日 - 7月22日)狮子座 ♌ U+264C(7月23日 - 8月22日)处女座 ♍ U+264D(8月23日 - 9月22日)
CTFHub-技能树-web-RCE RCE(Remote Code/Command Execute)为远程代码/命令执行的漏洞。攻击者可以直接在web页面向后台服务器远程注入操作系统命令或者代码,从而控制后台系统,这就是RCE漏洞。
[ACTF新生赛2020]crypto-aes-BUUCTF 根据源码:可知key是256bits,iv是128bits。输出的结果是key与iv的异或,所以key的高128位保持不变,又因为key的生成每16位相同,所以可以得到key的值。再用key的后128位(前128也一样)与输出的out后128位进行异或就可以恢复iv的值。key与iv的值都知道了,调用aes库解一下密文即可。完整EXP:结果:但有一点比较迷,就是拿到的flag一直提交失败,不过不重要。
rip-BUUCTF(栈溢出) 使用ida反汇编程序,发现是一个栈溢出类型,从函数中可以看出给了一个s数组,但没有对输入的长度作限制,因为是一个典型的栈溢出漏洞。然后从main函数之下的fun函数里可以看见一个后门。顺便记录一下后门地址为0x0000000000401186.先使用命令checksec 查看程序保护情况。发现并没有canary保护。使用gdb结合pwndbg调试进程,计算我们覆盖到返回地址所需字节。使用快捷命令b在main函数处下断点,并使用r(run)运行。使用命令 n 按行运行,找到输入点,并随便输入几个字
[GUET-CTF2019]Uncle Sam(Schmidt-Samoa密码系统-不一样的rsa) Schmidt-Samoa密码系统,像rabin加密一样,其安全性基于整数因式分解的难度。但 Rabin 解密时会得到四个解,而 Schmidt-Samor 得到的是唯一解。注:此次所提n与之前不同,但phi不变。1.选取两个大素数p,q,计算n。2.计算私钥dphi=(p-1)*(q-1)根据密钥生成的公式,结合欧拉定理可知:本站所提phi均为(p-1)*(q-1)所以:接着:又因为:所以就有:因为a的取值可以是 a = 2,3,4,5…,这里方便计算我们取 2对于此题,不必麻烦去求p*q,因为给的n可以
青少年ctf-random(梅森算法-MT19973) 这道题的漏洞在于这个函数:MT19973算法能生成1-623个32位随机数,而我们有 (32/32+64/32+96/32)*104=624个已知随机数,那么我们就完全可以求出下一个随机数。这里生成的一组数据里分别是32位、64位、96位,这里我们只需要32位,所以需要把64位和96位的数分成两个或者三个32位数,可以用它们与32位全为1的二进制数来分离。这里可以直接引用RandCrack库,将已经生成的624个数按顺序传入RandCrack函数里,利用predict_getrandbits来计算出下
crypto2-2022年“网信柏鹭杯”全国大学生网络空间安全精英赛(p,q生成不当) 所以 p^((1<<1024)-1) ,即((1<<1024)-1)^p=(1<<1024-1)-p。题目给出了n,e,c,试着用RsaCtfTool去跑,但是没跑出来了,发现是p,q生成方式不是常规。设 p^((1<<1024)-1)的下一个素数与 p^((1<<1024)-1)相差 x。p+q 近似等于 1<<1024(这里的 x 和 1 太小,可忽略不计)则 q=(1<<1024-1)-p+x。得到 p+q=1<<1024-1+x。然后爆破可取得 n%p==0。
CTFHub-SQL注入 当传入的ID参数为and 1=2时,由于1=2不成立,所以返回假,页面就会返回与id=1不同的结果。需要注意的是,当level默认为1的时候,默认不扫cookie的内容,必须是level大于等于2才能扫cookie里的内容,所以这里选用level 2.很明显,直接使用rand函数每次产生的数值不一样,但当我们提供了一个固定的随机数的种子0之后,每次产生的值都是相同的,这也可以称之为伪随机。配合上floor函数就可以产生确定的两个数,即0和1并且结合固定的随机种子0,它每次产生的随机数列都是相同的值。
crypto12-ctf.show 这个形式,以我现在的能力来说,能想到的有凯撒、维吉尼亚、变异凯撒、或者无规则爆破,但都无济于事,很显然,涉及到知识盲区了,看了一下网上的wp,发现这是Atbash cipher(埃特巴什码)加密。这里的u-f、o-l、z-a、t-g正好满足,所以这是埃特巴什码加密。在字母表中最后一个字母代表第一个字母,倒数第二个字母代表第二个字母。