内容简介:访问网站文件
强网先锋-上单
访问网站文件 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个云计算开源案例入围第三届中国优秀云计算开源案例评选
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Introduction to Linear Optimization
Dimitris Bertsimas、John N. Tsitsiklis / Athena Scientific / 1997-02-01 / USD 89.00
"The true merit of this book, however, lies in its pedagogical qualities which are so impressive..." "Throughout the book, the authors make serious efforts to give geometric and intuitive explanations......一起来看看 《Introduction to Linear Optimization》 这本书的介绍吧!