web16:
题目: ![](https://i-blog.csdnimg.cn/blog_migrate/7ee7227e4582d669118122047bd6fce7.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BsYW50MTIzNA==,size_5,color_FFFFFF,t_7#pic_center)题目说备份是个好习惯,因此网页链接存在备份
进入网页发现MD5码:
进行MD5解码发现是NULL,为MD5码
通过御剑进行后台扫描发现:
存在备份文件:http://114.67.246.176:10434/index.php.bak
访问得到记事本内容:
/**
* Created by PhpStorm.
* User: Norse
* Date: 2017/8/6
* Time: 20:22
*/
include_once "flag.php"; 存在一个flag.php文件
ini_set("display_errors", 0); 配置选项
$str = strstr($_SERVER['REQUEST_URI'], '?'); 进行get请求
$str = substr($str,1); 截取$str中1号位
$str = str_replace('key','',$str);
parse_str($str); 将$str中的值给$key并且去除头部两个字符相同和尾部一个字符相同
echo md5($key1); 输出$key1
echo md5($key2); 输出$key2
if(md5($key1) == md5($key2) && $key1 !== $key2){ 如果md5($key1) == md5($key2) 并且 $key1 不等于$key2,就输出$flag
echo $flag."取得flag";
}
?>
由题目可知这是一个MD5的绕过:
方法一:利用数组,数组返回的MD5值都相同
即 key1[]=ladla 的MD5与 key2[]=kdflal 的MD5值相同:
则如图:
得到flag
方法二:利用0e开头的MD5值为科学计数法0**12=0,
可以找出这些相等的值:
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
等等,随便用两个进行绕过
如图:
得到flag
web24:
题目要求:
进入题目网页查看原代码发现一个链接:
点击链接得到php源码:
<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
#进行变量设置
$v1 = $_GET['v1'];
$v2 = $_GET['v2'];
$v3 = $_GET['v3'];
if($v1 != $v2 && md5($v1) == md5($v2)){#V1值要与V2值不同,且MD5值相同
if(!strcmp($v3, $flag)){#进行二进制安全比较,值不同输出flag
echo $flag;
}
}
}
?>
思路:
考察了PHP弱类型,利用数组绕过
利用get进行请求:/?v1[]=blzdkn&v2[]=kkml7&v3[]=a;z
得到flag:flag{817641a0c719a277753f2de2ef6866b7}
web27:
由题目的到源码:
解析源码:知道需要GET一个a使a不等于QNKCDZO但MD5值相同
做题方法:
对QNKCDZO进行MD5加密得到:
发现有0e开头的MD5码,则用0e来绕过,
找一组MD5开头为0e的字符串来绕过:
得到flag:
flag{5f017f46a2b13e0b829d46114e0a61a9}
web29:
题目:
源码解析:
进行GET请求id和uname,和进行post请求一个passwd时,当id等于margin并且passw与uname的sha1值相同时,输出flag
根据题目要求知道是sha1绕过:
sha1函数存在漏洞,当传入的是数组时,会报错,返回为NULL,当传入的两个参数都是数组直接相等,所以利用数组绕过
得到flag:
flag{041154bc063524a9b5acb610d5a3a0b1}