尝试万能密码登录,没有任何回显

尝试扫描目录,这里不知道为啥御剑什么都扫不到,使用dirsearch可以扫到robots.txt

查看robots协议

访问下载index.phps

 查看index.phps

 简单审计一下php代码:

$password=$_POST['password'];
if(strlen($password)>10){
    die("password error");
}

首先验证用户提交的密码是否超过10个字符,如果超过,就终止脚本并显示密码错误消息

我们可以去登录页面实际验证一下,输入长度超过10字符的密码,果然报错

接着看sql查询语句:

$sql="select * from user where username ='admin' and password ='".md5($password,true)."'";

这段代码构建了一个 SQL 查询,但是它没有对用户输入进行适当的过滤或净化,很可能存在SQL注入,并且密码在数据库中储存为 MD5 散列值。

继续往后看:

$result=mysqli_query($con,$sql);

关于mysqli_query()函数的定义和用法:

mysqli_query( connection,query,resultmode;

参数 描述
connection 必需。规定要使用的 MySQL 连接。
query 必需,规定查询字符串。
resultmode

可选。一个常量。可以是下列值中的任意一个:

  • MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)
  • MYSQLI_STORE_RESULT(默认

这里执行了 SQL 查询并将结果存储在 $result 变量中,然后通过 mysqli_num_rows($result) 检查返回的结果集中是否有行数大于0的数据,如果有,表示登录成功,就会输出flag

关于md5这个函数:md5(string,raw)

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

可选。规定十六进制或二进制输出格式:

  • TRUE - 原始 16 字符二进制格式
  • FALSE - 默认。32 字符十六进制数

如果成功则返回已计算的 MD5 散列,如果失败则返回 FALSE。 

这里用到一个很奇妙的字符串 ffifdyop

经过md5加密后为 276f722736c95d99e921722cf9ed621c 

在转为字符串时会出现乱码 'or'6É]é!r,ùíb

or后面的第一个字母只要不是0,都会被认为是true,从而实现sql注入的绕过

使用该密码成功登录,拿到flag

ctfshow{eec0857d-9b09-4196-b033-7b0e34f09147} 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐