2024 0xGame Writeup

0xGame_web_week1

WEB

[Week 1] ez_login

账号:admin

密码:admin123

登录即可!

0xGame{It_Is_Easy_Right?}

[Week 1] ez_sql

提示了是sqlite注入,所以我们采用sqlite注入

经过尝试只有5列!

版本是3.40.1 查看数据库版本:id=1 union select 1,2,3,sqlite_version(),5---

sqlite 注入方式和 mysql 的区别不大,少了一些我们经常使用的函数, mid 、 left , sleep ,甚至 if 函数都没有 . 没有 information_schema 闭合方式与 sql 有区别:分 号 ; – /* 因为注入方式和 mysql 注入差不多,就只简单列一下 payload

查看表:id=1 union select 1,2,3,sqlite_version(),(select sql from sqlite_master limit 0,1)---

直接查看flag列数据:id=1 union select 1,2,3,sqlite_version(),(select group_concat(flag) from flag)-- payload和mysql其实差不多,所以这里我直接省略了!

0xGame{Do_not_Use_SqlMap!_Try_it_By_Your_Self}

[Week 1] helo_web

0xGame{ee7f2040-1987-4e0a

-872d-68589c4ab3d3}

0xGame{ee7f2040-1987-4e0a-872d-68589c4ab3d3}

[Week 1] helo_http

0xgame{1cd6a904

0xgame{1cd6a904-725f-11ef

0xgame{1cd6a904-725f-11ef-aafb-d4d8

0xgame{1cd6a904-725f-11ef-aafb-d4d8533ec

很简单,签到题!

0xgame{1cd6a904-725f-11ef-aafb-d4d8533ec05c}

[Week 1] ez_rce

非常简单

dc处理不了字符串,所以绕过即可

payload :114 1000 * 514 + p; !ls -al /

0xGame{Do_You_Know_gtfobins?Try_To_Use_It!}

[Week 1] ez_ssti

使用 {{''.__class__.__base__.__subclasses__()}} 来确定 os 子类所在的位 置!

os在135的位置上,这个方法较快!当然也可以写脚本!

{{''.__class__.__base__.__subclasses__()[135].__init__.__globals__}} 查看可以用命令执行的函数

{{().__class__.__bases__[0].__subclasses__()

[135].__init__.__globals__.__builtins__['eval']

("__import__('os').popen('whoami').read()")}}

{{url_for.__globals__.__builtins__['__import__']

('os').popen('id').read()}}

这两个都行

进行命令执行!

ok,上面这些都是前置知识,其实拿到flag只需要看环境变量即可,单纯的命令执行是 看不到的,那么我们就用 getenv() 函数,来看环境变量的值。所以只需要调用getenv 函数即可!

源码里,删除了名称叫flag的变量名称!所以我们直接搜即可!

[Week 1] ez_unser

调用关系很好理解,最后的两个方法做了文件上传操作,但是修改名称了,我们构造 payload!

这两个类做了文件写入和文件名修改操作! 所以我们只需要触发Mamba类即可!所以我们调用关系只做到Mamba类!

payload: data=O%3A3%3A%22Man%22%3A1%3A%7Bs%3A9%3A%22%00Man%00name%22%3BO%3A4%3A %22What%22%3A1%3A%7Bs%3A9%3A%22%00What%00Kun%22%3BO%3A3%3A%22Can%22%3A 1%3A%7Bs%3A10%3A%22%00Can%00Hobby%22%3BO%3A1%3A%22I%22%3A1%3A%7Bs%3A7% 3A%22%00I%00name%22%3BO%3A3%3A%22Say%22%3A1%3A%7Bs%3A9%3A%22%00Say%00e vil%22%3BO%3A5%3A%22Mamba%22%3A0%3A%7B%7D%7D%7D%7D%7D%7D&&content=

这是第一个payload,我们上传文件,会以时间戳的方式保存!

这里的时间戳文件就是我们写入的文件!我们再做修改操作!

这里我们需要触发修改文件这个类,因为Out类不存在name属性方法,所以我直接在 I 类中让其调用name属性,触发call魔术方法!

data=O%3A3%3A%22Man%22%3A1%3A%7Bs%3A9%3A%22%00Man%00name%22%3BO%3A4%3A %22What%22%3A1%3A%7Bs%3A9%3A%22%00What%00Kun%22%3BO%3A3%3A%22Can%22%3A 1%3A%7Bs%3A10%3A%22%00Can%00Hobby%22%3BO%3A1%3A%22I%22%3A1%3A%7Bs%3A7% 3A%22%00I%00name%22%3BO%3A3%3A%22Out%22%3A0%3A%7B%7D%7D%7D%7D%7D&&o=17 28392438.log&&n=shell.php

这里payload的o参数要写成第一个得到的时间戳文件名,也就是要修改的文件名,n参 数就是我们要修改成的文件名!

成功!

得到flag!PWN

PWN

0xGame_pwn_week1

[Week 1] test your pwntools

   打开题目查看

   要在10秒内完成100个计算,那么自己肯定是不能做的,只能写脚本了

[Week 1] stack overflow

 看一下主函数

有一个很明显的溢出漏洞,然后有一个strlen的检查,但是检查没有做什么限制,查看字符串也发    现是有/bin/sh的

查看一下保护,发现就开启了一个nx,那就可以直接溢出到/bin/sh 了

直接写脚本:

[Week 1] positive

通过read读入了4个长度的数据到buf中,然后atoi函数将buf转换为字节,下面有一个检查,让 吧nbytes转换为int,然后不能够超过16个,超过16个的话就会退出了,然后又有一个read, 入读无符号整型到v4中,这个时候就可以溢出了,是一个整数溢出

然后发现也是有后门函数的,那么就可以溢出到后门函数,去完成这个题目

exp:

[Week 1] find_me

可以看到是一个伪随机数,需要去绕过伪随机数,可以利用ctypes。然后循环打开fake_flag, 也就是假的flag,然后再打开一个真的flag,思路就是利用do_bad函数中的read去读打开的 flag文件

再看do_bad函数,是一个循环判断。

exp:

[Week 1] where_is_my_binsh

查看保护

查看main函数,看到一个read写入到something中,something是在bss段,可以看到有system 函数,所以就可以通过写入/bin/sh 到bss段然后传给system去执行就可以了,在第二个read也 可以看到是溢出点

可以直接写exp:

[Week 1] ret2csu

查看保护

查看main函数 可以看到是读入到something , 依旧是在bss段,然后read读入buf中,这里就可以看到是一个 溢出。然后一个strlen检查buf,如果超过0x10就退出。这一题是用到了ret2csu,所以我们可 以直接去看__libc_csu_int,可以看到也是有execve执行函数的,所以可以直接ret2csu了

exp:

RE全解

0xGame_re_week1

[Week 1] BabyBase

查壳

无壳,⽤64的ida打开,F5查看主函数

Shift+12查看符串

发现base64编码,测是base64加密

猜测没错

[Week 1] BinaryMaster

无壳,⽤64的ida打开,F5查看主函数

发现flag

[Week 1] SignSign

查壳

无壳,⽤64的ida打开,F5查看主函数

发现⼀半flag,Shift+F12查看符串

发现前⼀半flag

[Week 1] Xor-Beginning

查壳

无壳,⽤64的ida打开,F5查看主函数

分析伪代码可知,flag为30位,每一位经过异或之后与v5对比,所以只要来个反异或就行了

[Week 1] Xor-Endian

查壳

无壳,⽤64的ida打开,F5查看主函数

分析可知主要在于encrypt函数,加密后与v6对比,解密只要来个反异或就行了

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值