2019第三届强网杯部分WP

栏目: 编程工具 · 发布时间: 5年前

内容简介:访问网站文件

2019第三届强网杯部分WP

强网先锋-上单

访问网站文件 log 文件,发现 ThinkPHP  远程命令执行漏洞

2019第三届强网杯部分WP

2019第三届强网杯部分WP

强网先锋-辅助

废话不多说直接怼脚本

2019第三届强网杯部分WP

2019第三届强网杯部分WP

Crypto-Copperstudy

flag{767bc73bedd446b5891ac3f2a3329bfb3502114647cda27b3dbdf0119c261022}

1Chalenge 1

第一关给出模 N ,加密指数 e 和明文 m ,明文 512 位,但低 72 位被隐藏,因此 Stereotyped messages 攻击,用 sage 求出明文低位。得出明文低 72 位为 1902981400650064329651 。再通过给出  1902981400650064329651 ,得出整个明文。

2019第三届强网杯部分WP

(2) Challenge 2

第二关是知道 p 高位隐藏低 128 位, p 高位攻击, sage 求出最小根即是解。得出 p 的值后 gmpy2.invert 解出私钥 d ,即可解出 c 的明文 m

2019第三届强网杯部分WP

2019第三届强网杯部分WP

(3) Challenge 3

这一关已知私钥 512 位,利用 Partial Key Exposure Attack (部分密钥泄露攻击)可破解得出模因子 p ,再通过 p 求解出 d ,然后是常规解密。

2019第三届强网杯部分WP

2019第三届强网杯部分WP

(4) Challenge 4

加密指数 e=3, 三个模和三个密文 [n1,n2,n3][c1,c2,c3], 明显的广播攻击 (Hastad’s broadcast attack) ,利用中国剩余定理解出 M=m**3 ,再 gmpy2.iroot(M,3) 得出明文。

2019第三届强网杯部分WP

  2019第三届强网杯部分WP

2019第三届强网杯部分WP

(5) Challenge 5

给出两个明文关系 M = km + A ,由此可知是相关明文攻击, Franklin-Reiter attack 可解出明文 m 

2019第三届强网杯部分WP

2019第三届强网杯部分WP

2019第三届强网杯部分WP

得出明文:

2019第三届强网杯部分WP

(6) Challenge 6

从给出的已知条件, d=N**0.27,(d<N**0.292)  满足 boneh_durfee attack 条件,可利用该算法解出私钥 d

2019第三届强网杯部分WP

2019第三届强网杯部分WP

整理后各 challenge 输出的结果。

2019第三届强网杯部分WP

利用脚本提交各关 m 值,到第六关得出 flag

2019第三届强网杯部分WP

2019第三届强网杯部分WP

2019第三届强网杯部分WP  

鲲or鳗orGame

2019第三届强网杯部分WP

2019第三届强网杯部分WP

闯不同的关根据关卡由 0 变为 1 更改金手指变量,经过搜索得到最大关卡为 ff ,所以将有变化的值都改为 ff (还不知道具体是哪个),  

2019第三届强网杯部分WP

2019第三届强网杯部分WP

强网先锋_AD

2019第三届强网杯部分WP

判断简单

输入 44 个字符进行加密

2019第三届强网杯部分WP

判断为 base64 加密

取出对比的字符串进行解密得出 flag

2019第三届强网杯部分WP

强网先锋_打野

2019第三届强网杯部分WP

2019第三届强网杯部分WP

WEB UPLOAD

扫描目录拿到代码进行分析

2019第三届强网杯部分WP

分析代码

注册 test1@qq.com  123123

  2019第三届强网杯部分WP

上传图片木马

2019第三届强网杯部分WP

2019第三届强网杯部分WP

更改 cookie 获得 shell

2019第三届强网杯部分WP

random_study

爆破

2019第三届强网杯部分WP

2019第三届强网杯部分WP

解题

random.seed(int(time.time()))

   

    while 1:

        number = random.randint(0,2**64)

        print io.recvuntil("[-]")

        io.sendline(str(number))

        res = io.recvuntil("[+]")

        print res,

        if 'completed' in res:

            break

 

    while 1:

        print io.recvuntil('[-]'),

        num1 = io.recvuntil("n", drop = True)

        print num1

        print io.recvuntil('[-]'),

        num2 = io.recvuntil("n", drop = True)

        print num2

        try:

            o = subprocess.check_output(["java", "ReplicatedRandomTest", num1, num2])

            #print o.split("n")

            num3 = o.strip()

            print num3

        except:

            num3 = '1'

       

        print io.recv()

        io.sendline(num3)

        res = io.recv()

        print res

        if 'completed' in res:

           break

 

    while 1:

        target=random.getrandbits(32)

        print io.recv()

        io.sendline(str(target))

        res = io.recv()

        print res

        if 'completed' in res:

           break

 

 

io.interactive()

warmup

main 函数参数输入处存在溢出点,可进行溢出利用,构造 rop 攻击,但 got 表中无其他函数,只有 __libc_start_main 函数,无法有效泄漏出 libc 地址。可以通过里面已有的函数和一些 gadgets ,实现对 __libc_start_maingot 表进行修改,将其末尾三个字节修改为 system 。末尾 12 位属于偏移量,可从 libc 文件中获取,高 8 位为原始地址,没有进行修改。只剩中间 12 位为随机值,需要爆破,命中概率 1/4096 。修改 got 表后,再次调用 __libc_start_main 函数,实现对 system(command) 的调用 , 因为程序未提供输入条件,无法直接 getshell ,只能执行单个命令行。为了成功调用 rop 需要进行栈迁移,这该利用中,将栈迁移至 0x804a040+0x300 的位置。

1 、生成 payload 的代码

2019第三届强网杯部分WP

2 、爆破代码

2019第三届强网杯部分WP

(1)        利用爆破脚本执行 ls -l  的命令,查看服务器当前目录下是否存在 flag 。后发现存在一个名为 _the_flag_dir_name_you_shold_guess 的文件夹。疑似存在 flag

(2)        利用爆破脚本执行 ls the_flag_dir_name_you_shold_guess  的命令,查看服务器是否存在 flag ,发现存在 flag.txt

2019第三届强网杯部分WP

3 )利用爆破脚本执行 find ./ -iname flag* | xargs cat  的命令,获取 flag

2019第三届强网杯部分WP

Babacpp

该程序在函数 update_hash 处,存在漏洞点。 abs(offset) % 15  语句是为了获取用户输入的偏移量,又防止用户输入超长度偏移量进行溢出攻击。但 offset 如果设置 0x80000000 时,这条语句执行的结果就变为 0xfffffff8 ,突破了原有的限制,可以进行向上溢出,溢出对象的虚表位置。通过这个漏洞可以对对象的虚表地址进行修改。

(1)        申请一个类型的 str 的对象 obj1 ,并申请相应的 str 数组。

(2)        利用 update_hash  漏洞,将其虚表改为 int 对象的虚表。

(3)        调用 obj1 的查看函数,则该对象直接调用 int 对象的查看函数,将步骤 1 中写入数组地址打印出来,泄漏堆地址。

(4)        调用 obj1 的写入函数,在对象中写入该对象自己的地址。

(5)       obj1 的类型改为 str 型,查看第一个数组的内容,用次方法可以泄漏出程序段地址。

(6)        已知程序段地址和 got 表的偏移量,计算出 got 表的地址。将 scanfgot 地址写入 arrary[1] ,将该数组的位置写入 arrary[0] 。后续步骤原理和 3-5 相同,可通过查看 arrary[0] 的内容将 got 表内数据地址打印出来,由此泄漏出 libc 地址。

(7)        泄漏出 libc 地址后,利用 __environ 变量泄漏出栈地址,原理和 相同。

(8)        已知栈地址,利用数据对象的写函数,实现对栈地址的写入,将 main 函数的返回值写入 one_gadget ,并将返回值以下 0xf0 的栈区清空,调用环境满足 one_gadgets 的条件。

(9)        直接选择选项 4 ,退出,获取 shell

1 、代码图

2019第三届强网杯部分WP

2019第三届强网杯部分WP

图二、获取 flag

2019第三届强网杯部分WP

Babymmic

下载源代码,发两现有是两个功能相同的代码,一个是 32 位版,一个是 64 位版,用 IDA 分别分析,发现两个版本均为静态编译,存在栈溢出, 32 位溢出点为 0x110,64 位为 0x118 ,刚好相差 8 个字节。

2019第三届强网杯部分WP

使用 ROPgat 针对某一版本作出 payload ,本地调试通过后远程测试,存在 sha256 计算验证,加上验证脚后,发现无法到获取 shell 。分析原因,认为 payload 需同时满足 32 位与 64 位攻击成功的条件才能成功。

如满足上述条件,根据 32 位与 64 位溢出点不同, payload 需构造成

0x110 pad

0x4  32ret n

0x4   32payload  返回地址

0x8  64 ret

n byte  64 payload

…..   32 payload

即可保证同一 payload32 下与 64 位下都可成功。再次 ROPgat 一下获得合适的 n,   2019第三届强网杯部分WP

修改 payload 远程测试成功, cat flag 文件,获得加密 flag ,再使用 decode.py 解密得到 flag ,加上 flag{} 提交成功  

2019第三届强网杯部分WP

2019第三届强网杯部分WP

1.     强网先锋 ap

拿到原代吗,测试用 gdb 运行一下,在 heap chunks ,发现有趣的结果:

2019第三届强网杯部分WP

2019第三届强网杯部分WP

2019第三届强网杯部分WP

使用 ida 分析,发现 change ()函数中可以在堆中溢出。

可以使 change 溢出泄露 libc 地址,再用 change 覆盖堆中的 puts 地址为 system 地址即可拿到 shell 。编写 payload 成功拿到 shellcat flag 即获得 flag

Justre

IDA 分析程序,发现程序经过了 2 个函数的判断,返回都为 1 时输出 flag

2019第三届强网杯部分WP

第一个函数读取输入的前 10 位,前 8 位和后 2 位分别转化成两个数字,并与 405018 地址的内容进行运算,最后判断运算后的值与 404148 地址的内容是否相等,判断 96 个字节。如果相等,则将 405018 开始的 96 个字节写入 4018A0 地址(这是第二个判断函数的首地址),也就是说,必须第一个函数通过以后,才能得到第二个函数正确的内容。

2019第三届强网杯部分WP

接下来分析运算过程,可以从低字节开始爆破,判断是否符合条件

2019第三届强网杯部分WP

最后确定前 10 个字符为 1324228811

2019第三届强网杯部分WP

接下来分析第二个函数,用 peid 分析是一个 des 加密,然后看到密钥为 24 个字符,因此应该是 3des 加密,于是编写脚本进行解密:

2019第三届强网杯部分WP

把两部分拼起来就是 flag13242288110dcc509a6f75849b

2019第三届强网杯部分WP


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

用户故事与敏捷方法

用户故事与敏捷方法

Mike Cohn / 石永超、张博超 / 清华大学出版社 / 2010-4 / 39.00元

《用户故事与敏捷方法》详细介绍了用户故事与敏捷开发方法的结合,诠释了用户故事的重要价值,用户故事的实践过程,良好用户故事编写准则,如何搜集和整理用户故事,如何排列用户故事的优先级,进而澄清真正适合用户需求的、有价值的功能需求。 《用户故事与敏捷方法》对于软件开发人员、测试人员、需求分析师和管理者,具有实际的指导意义和重要的参考价值。一起来看看 《用户故事与敏捷方法》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具