内容简介:访问网站文件
强网先锋-上单
访问网站文件 log 文件,发现 ThinkPHP 远程命令执行漏洞
强网先锋-辅助
废话不多说直接怼脚本
Crypto-Copperstudy
flag{767bc73bedd446b5891ac3f2a3329bfb3502114647cda27b3dbdf0119c261022}
( 1 ) Chalenge 1
第一关给出模 N ,加密指数 e 和明文 m ,明文 512 位,但低 72 位被隐藏,因此 Stereotyped messages 攻击,用 sage 求出明文低位。得出明文低 72 位为 1902981400650064329651 。再通过给出 m + 1902981400650064329651 ,得出整个明文。
(2) Challenge 2
第二关是知道 p 高位隐藏低 128 位, p 高位攻击, sage 求出最小根即是解。得出 p 的值后 gmpy2.invert 解出私钥 d ,即可解出 c 的明文 m 。
(3) Challenge 3
这一关已知私钥 d 低 512 位,利用 Partial Key Exposure Attack (部分密钥泄露攻击)可破解得出模因子 p ,再通过 p 求解出 d ,然后是常规解密。
(4) Challenge 4
加密指数 e=3, 三个模和三个密文 [n1,n2,n3][c1,c2,c3], 明显的广播攻击 (Hastad’s broadcast attack) ,利用中国剩余定理解出 M=m**3 ,再 gmpy2.iroot(M,3) 得出明文。
(5) Challenge 5
给出两个明文关系 M = km + A ,由此可知是相关明文攻击, Franklin-Reiter attack 可解出明文 m 。
得出明文:
(6) Challenge 6
从给出的已知条件, d=N**0.27,(d<N**0.292) 满足 boneh_durfee attack 条件,可利用该算法解出私钥 d 。
整理后各 challenge 输出的结果。
利用脚本提交各关 m 值,到第六关得出 flag 。
鲲or鳗orGame
闯不同的关根据关卡由 0 变为 1 更改金手指变量,经过搜索得到最大关卡为 ff ,所以将有变化的值都改为 ff (还不知道具体是哪个),
强网先锋_AD
判断简单
输入 44 个字符进行加密
判断为 base64 加密
取出对比的字符串进行解密得出 flag
强网先锋_打野
WEB UPLOAD
扫描目录拿到代码进行分析
分析代码
注册 test1@qq.com 123123
上传图片木马
更改 cookie 获得 shell
random_study
爆破
解题
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_main 的 got 表进行修改,将其末尾三个字节修改为 system 。末尾 12 位属于偏移量,可从 libc 文件中获取,高 8 位为原始地址,没有进行修改。只剩中间 12 位为随机值,需要爆破,命中概率 1/4096 。修改 got 表后,再次调用 __libc_start_main 函数,实现对 system(command) 的调用 , 因为程序未提供输入条件,无法直接 getshell ,只能执行单个命令行。为了成功调用 rop 需要进行栈迁移,这该利用中,将栈迁移至 0x804a040+0x300 的位置。
图 1 、生成 payload 的代码
图 2 、爆破代码
(1) 利用爆破脚本执行 ls -l 的命令,查看服务器当前目录下是否存在 flag 。后发现存在一个名为 _the_flag_dir_name_you_shold_guess 的文件夹。疑似存在 flag 。
(2) 利用爆破脚本执行 ls the_flag_dir_name_you_shold_guess 的命令,查看服务器是否存在 flag ,发现存在 flag.txt
( 3 )利用爆破脚本执行 find ./ -iname flag* | xargs cat 的命令,获取 flag 。
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 表的地址。将 scanf 的 got 地址写入 arrary[1] ,将该数组的位置写入 arrary[0] 。后续步骤原理和 3-5 相同,可通过查看 arrary[0] 的内容将 got 表内数据地址打印出来,由此泄漏出 libc 地址。
(7) 泄漏出 libc 地址后,利用 __environ 变量泄漏出栈地址,原理和 6 相同。
(8) 已知栈地址,利用数据对象的写函数,实现对栈地址的写入,将 main 函数的返回值写入 one_gadget ,并将返回值以下 0xf0 的栈区清空,调用环境满足 one_gadgets 的条件。
(9) 直接选择选项 4 ,退出,获取 shell 。
图 1 、代码图
图二、获取 flag
Babymmic
下载源代码,发两现有是两个功能相同的代码,一个是 32 位版,一个是 64 位版,用 IDA 分别分析,发现两个版本均为静态编译,存在栈溢出, 32 位溢出点为 0x110,64 位为 0x118 ,刚好相差 8 个字节。
使用 ROPgat 针对某一版本作出 payload ,本地调试通过后远程测试,存在 sha256 计算验证,加上验证脚后,发现无法到获取 shell 。分析原因,认为 payload 需同时满足 32 位与 64 位攻击成功的条件才能成功。
如满足上述条件,根据 32 位与 64 位溢出点不同, payload 需构造成
0x110 pad
0x4 32 位 ret n
0x4 32 位 payload 返回地址
0x8 64 位 ret
n byte 64 位 payload
….. 32 位 payload
即可保证同一 payload 在 32 下与 64 位下都可成功。再次 ROPgat 一下获得合适的 n 值 ,
修改 payload 远程测试成功, cat flag 文件,获得加密 flag ,再使用 decode.py 解密得到 flag ,加上 flag{} 提交成功
1. 强网先锋 ap
拿到原代吗,测试用 gdb 运行一下,在 heap chunks ,发现有趣的结果:
使用 ida 分析,发现 change ()函数中可以在堆中溢出。
可以使 change 溢出泄露 libc 地址,再用 change 覆盖堆中的 puts 地址为 system 地址即可拿到 shell 。编写 payload 成功拿到 shell , cat flag 即获得 flag
Justre :
IDA 分析程序,发现程序经过了 2 个函数的判断,返回都为 1 时输出 flag
第一个函数读取输入的前 10 位,前 8 位和后 2 位分别转化成两个数字,并与 405018 地址的内容进行运算,最后判断运算后的值与 404148 地址的内容是否相等,判断 96 个字节。如果相等,则将 405018 开始的 96 个字节写入 4018A0 地址(这是第二个判断函数的首地址),也就是说,必须第一个函数通过以后,才能得到第二个函数正确的内容。
接下来分析运算过程,可以从低字节开始爆破,判断是否符合条件
最后确定前 10 个字符为 1324228811
接下来分析第二个函数,用 peid 分析是一个 des 加密,然后看到密钥为 24 个字符,因此应该是 3des 加密,于是编写脚本进行解密:
把两部分拼起来就是 flag : 13242288110dcc509a6f75849b
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 第三届强网杯部分WriteUp By W&M
- 第三届“达观杯”文本智能算法大赛参赛指南
- 第三届 SSCTF 全国网络安全大赛—线上赛 Writeup
- QCTF 2018 暨第三届 XMan 夏令营选拔赛 WriteUp
- 【IDCC聚焦】第三届“攻城狮”IDC运维知识竞赛,等你来战!...
- 17个云计算开源案例入围第三届中国优秀云计算开源案例评选
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
用户故事与敏捷方法
Mike Cohn / 石永超、张博超 / 清华大学出版社 / 2010-4 / 39.00元
《用户故事与敏捷方法》详细介绍了用户故事与敏捷开发方法的结合,诠释了用户故事的重要价值,用户故事的实践过程,良好用户故事编写准则,如何搜集和整理用户故事,如何排列用户故事的优先级,进而澄清真正适合用户需求的、有价值的功能需求。 《用户故事与敏捷方法》对于软件开发人员、测试人员、需求分析师和管理者,具有实际的指导意义和重要的参考价值。一起来看看 《用户故事与敏捷方法》 这本书的介绍吧!