1. 程式人生 > >BugKuCTF套路滿滿的題-------login1(SKCTF)

BugKuCTF套路滿滿的題-------login1(SKCTF)

在進入這道題目之前,有提示說是SQL約束,這是什麼鬼,,,,於是就有以下的。。。。。

什麼是SQL約束:

這是註冊頁面程式碼:

<?php
// Checking whether a user with the same username exists
$username = mysql_real_escape_string($_GET['username']);
$password = mysql_real_escape_string($_GET['password']);
$query = "SELECT *
          FROM users
          WHERE username='$username'";
$res = mysql_query($query, $database);
if($res) {
  if(mysql_num_rows($res) > 0) {
    // User exists, exit gracefully
    .
    .
  }
  else {
    // If not, only then insert a new entry
    $query = "INSERT INTO users(username, password)
              VALUES ('$username','$password')";
    .
    .
  }
}

 這是登陸頁面的程式碼:

<?php
$username = mysql_real_escape_string($_GET['username']);
$password = mysql_real_escape_string($_GET['password']);
$query = "SELECT username FROM users
          WHERE username='$username'
              AND password='$password' ";
$res = mysql_query($query, $database);
if($res) {
  if(mysql_num_rows($res) > 0){
      $row = mysql_fetch_assoc($res);
      return $row['username'];
  }
}
return Null;

從以上的程式碼可以看出,在登陸和註冊的程式碼裡,都過濾的該過濾的,這是不是就是說沒有什麼可利用的呢,答案當然是NO!

接下來是由兩個一樣的連線,這兩個講的都是SQL約束攻擊,但是從兩個不同的角度來闡述,裡面的原理和操作思路都非常的清晰,話不多說,直接上鍊接:

https://www.cnblogs.com/ECJTUACM-873284962/p/8977983.html

https://www.freebuf.com/column/179817.html

 

看完以上,我想你們應該理解了,什麼是約束攻擊了,接下來,就是這道題的題解

首先,我想,應該是先註冊一個賬號吧。。。

 

使用者名稱那裡應該就不需要多加解釋了吧。。。

然後再登陸。。。。。

這裡需要注意的是,在登陸賬號的時候,使用者名稱前面的空格是和你在註冊賬戶裡的使用者名稱前面的空格是一樣多的,要不然就會一直說賬號或密碼不正確。。。。。

登上後,如圖所示,我想應該是可以交flag了。。。。。。