Web
bestphp's revenge
T4lk 1s ch34p,sh0w m3 the sh31l
解题思路
初步分析:
进⼊http://212.64.7.171/LCTF.php
代码神似hitcon2017的Baby^H-master-php,区别点如下:
a.去年的有Admin类考了随机数,⽽本题没有,于是难度没那么⾼。
b.去年的upload没有过滤。
c.本题多了check()和move(),解题的关键点所在。
d.move()可以进⾏复制,源地址被过滤太多,⽽⽬的地址存在⽬录穿越漏洞,但很可惜 前⾯被拼接了字符串,以⾄于不能使⽤phar://
e.check()也是过滤很多,⽽且使⽤了getmagezie()函数,其实⽆所谓什么函数,能使⽤ phar协议来进⾏反序列化即可。
题⽬提示:The only way you can get the flag is to use grep to check all the folders in the /
突破⼝:
check()函数过滤没其他的严格
这⾥⾯是使⽤了^字符,⽽本题其他函数的正则匹配皆没有这个,于是这可能是个突破 ⼝。 可使⽤compress.zlib://phar://代替phar://从⽽绕过过滤。 ⽽phar的反序列化最多是包含⽂件,于是可以本身写⻢,然后包含本身。
访问下⽹址,获取session值,解码后得到其哈希值
本机php7编写脚本如下
运⾏后得到avatar.gif,上传到⾃⼰的云主机上
上传
命令执行
Misc
签到题
洛必达?不不不
LCTF
你会玩osu!么?
LCTF
PWN
easyheap
off by one:
libc2.27->tcache 只能malloc(0xF8) 可以先填满对应的tcache bin获得unsorted bin
审错了他的read过程,看成了
以为会连续⽣成两个"\x00",没法bypass,(fd和bk只有末位是"\x00"),卡了好久。晚上回来重新看发现看错了orz
剩下就是利⽤off by one覆盖prev in use,使两个堆块发⽣合并,然后便可以有两个索引指向同⼀个chunk。
⽽后进⾏tcache的double free,使chunk分配到malloc hook,写⼊one_gadget,再malloc⼀次 即可getshell
RE
去签到吧朋友
在init中有对401E79的SMC和基于进程名检查的反调试;401D90函数也是对401E79的 SMC。 输⼊⻓度限制为36字节。 将输⼊分别以两种⽅式遍历(不管什么⽅式,与解题关系不⼤,⼤概与树有关);将两种遍历 结果分别进⾏加密或类似操作、结果与常量⽐较并校验部分输⼊遍历前后的序号。两种遍历的 结果可以通过加密算法和最终的校验数据得出,再加上序号的校验,分别得出原始输⼊前或后 部分,合在⼀起就能得到正确的原始输⼊。
对第⼀种遍历结果加密的加密算法是des,密钥为fa1conn,加密后结果⼜进⾏了算术运算。 可解⽅程得出加密串的前36字节,加上明⽂校验的后4字节,得到完整加密串的hex值: 77afddee5cabcba362635c5d93180bfbc9174647b91d768eb6e3f5c7ac643479088e45f 9733cf57c
z3解⽅程的代码如下:
DES解密后得到:LC-+)=1234@AFETRS 根据序号校验,前18字节输⼊在遍历后的序号为: 0,1,14,12,17,18,19,27,28,2,15,20,31,29,30,16,13,5 即得到前18字节输⼊:LCTF
flag为:LCTF
easy_vm
常规VM题,handler如下:
VM上下⽂使⽤的数据结构如下:
对应的三段vm解析后为:
反解如下:
想起「 Lunatic Game
这是⽤了 Glasgow Haskell Compiler么。。。业务逻辑全在sub_402427中。游戏的初始化, 胜负判断,⼤概看下,胜利就输出flag,且游戏过程对最后flag输出没有影响,直接动态,游 戏初始化后,跳到4023C8运⾏,直接输出flag。
领取专属 10元无门槛券
私享最新 技术干货