ctfshow-web9

web 9

首先把环境下载下来,然后,界面是这样子

 给了你用户名了,没有密码,惯性思维使我认为是sql注入,那我就试着做了一下,可是都没有回显,不知道是啥问题。或许是过滤了?还是怎么样。反正就是回显不了。

那我就扫描一下目录吧,拿出我们的dirsearch扫它一手: python dirsearch.py -u 网址 -e php ,利用这个命令就可以扫描了。

 发现了,一个robots.txt文件,访问一手。

 发现index.phps,确定源码泄露。访问index.phps下载源码

 1 <?php
 2         $flag="";
 3         $password=$_POST['password'];
 4         if(strlen($password)>10){
 5             die("password error");
 6         }
 7         $sql="select * from user where username ='admin' and password ='".md5($password,true)."'";
 8         $result=mysqli_query($con,$sql);
 9             if(mysqli_num_rows($result)>0){
10                     while($row=mysqli_fetch_assoc($result)){
11                          echo "登陆成功<br>";
12                          echo $flag;
13                      }
14             }
15     ?>

这便是源码。大家可以发现,第七行的这段代码: $sql="select * from user where username ='admin' and password ='".md5($password,true)."'"; sql查询,我们看查询条件,用户名是admin,密码是利用md5加密后的结果,

语法:md5(string,raw)

参数 描述
string 必需。规定要计算的字符串。
raw

可选。规定:

  TRUE - 原始 16 字符二进制格式

  FALSE - 默认。32 字符十六进制数

将密码转换成16进制的hex值以后,再将其转换成字符串后包含'or’xxxx

这样,条件就成了username ='admin' and password =‘ ’or 'xxxxx'。对语句进行了闭合,其实就是拼接成了万能密码。

看了大佬的博客,得来了字符:ffifdyop

输入此字符串即可获得flag

 参考文章:

md5类型绕过

原文地址:https://www.cnblogs.com/awsole/p/14384729.html