CG CTF-Web-SQL注入

SQL注入1

进入题目之后先看源码,进行代码审计

<html>
<head>
Secure Web Login
</head>
<body>
<?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 = trim($_POST[user]);
  $pass = md5(trim($_POST[pass]));
  $sql="select user from ctf where (user='".$user."') and (pw='".$pass."')";
    echo '</br>'.$sql;
  $query = mysql_fetch_array(mysql_query($sql));
  if($query[user]=="admin") {
      echo "<p>Logged in! flag:******************** </p>";
  }
  if($query[user] != "admin") {
    echo("<p>You are not admin!</p>");
  }
}
echo $query[user];
?>
<form method=post action=index.php>
<input type=text name=user value="Username">
<input type=password name=pass value="Password">
<input type=submit>
</form>
</body>
<a href="index.phps">Source</a>
</html>

要想获得flag,首先user和pass都要is_set,而且你从数据库中取得的user必须为admin。
这里我们首先考虑的是pass,因为pass要经过md5编码,而且是我们不知道的,要想成功查询,必须把pass这部分去掉。因此注入点应该在前面的user。
在pass没有的情况下,如果直接让注入的user为admin,经过查询后得到的user一定为admin,那么这题flag也就得到了。
因此这样构造:
在这里插入图片描述

密码随便输。
在这里插入图片描述
就成功得到了flag。

SQL注入2

第二题就是我的知识盲区了。union注入我知道,可我没想到还有这样的新姿势。
首先打开环境,点击Source进行代码审计。最重要的是下面的代码:

<?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]))) {
      echo "<p>Logged in! Key: ntcf{**************} </p>";
  }
  else {
    echo("<p>Log in failure!</p>");
  }
}
?>

获得flag的条件是query[pw]不为空且我们输入的pw的md5值必须小于等于我们查到的值。因为user我们不知道,queru[pw]我们也不知道,因此想办法用union联合注入使得$query[pw]是我们想要的值。因此我们这样构造user如下:

' union select md5(1) #

首先用单引号闭合,这样user为空就查不到值,但是后面使用union,这样后面的md5(1)的值就为查询值。
因此$quert[pw]的值就是md5(1)的值。这时候再让pass的md5小于等于md5(1),我们直接让pass为1,这样就可以了。
在这里插入图片描述
在这里插入图片描述

后记

第二题对于union还是要掌握的,我就是对union是一知半解,结果就没做出来。第一题主要还是审清题,我代码审计完没想别的直接union注入,注入了半天把所有表里的东西都弄了一遍发现flag不在数据库里。所以自己的思维和对知识点的掌握还是很重要的。

猜你喜欢

转载自blog.csdn.net/rfrder/article/details/108432247
今日推荐