PHP漏洞全解(五)-SQL注入攻擊

黄舟
發布: 2023-03-03 20:54:02
原創
1960 人瀏覽過

SQL注入攻擊(SQL Injection),是攻擊者在表單中提交精心建構的sql語句,改動原來的sql語句,如果web程式沒有對提交的資料經過檢查,那麼就會造成sql注入攻擊。

SQL注入攻擊的一般步驟:

1、攻擊者存取有SQL注入漏洞的站點,尋找注入點

2、攻擊者建構注入語句,注入語句和程式中的SQL語句結合產生新的sql語句

3、新的sql語句被提交到資料庫執行處理

4、資料庫執行了新的SQL語句,引發SQL注入攻擊

PHP漏洞全解(五)-SQL注入攻擊

實例

資料庫

rr netsos.com.cn/show.php?id=71 可能有註入點,我們來測試

http://www.netsos.com.cn/show.php?id=71 and 1=1

PHP漏洞全解(五)-SQL注入攻擊

PHP漏洞全解(五)-SQL注入攻擊

一次查詢到記錄,一次沒有,我們來看看源碼

//show.php 12-15行

// 執行mysql查詢語句

$query = "selectlect from postmessage .$_GET["id"];

$result = mysql_query($query)

or die("執行ySQL查詢語句失敗:" . mysql_error());

id傳遞進來後,和前面參數的字元串結合的sql語句放入資料庫執行查詢

提交and 1=1,語句變成select * from postmessage where id = 71 and 1=1 這語句前值後值都為真,and以後也為真,返回查詢到的資料

提交and 1=2,語句變成select * from postmessage where id = 71 and 1=2 這語句前值為真,後值為假,and以後為假,查詢不到任何資料

正常的SQL查詢,經過我們建構的語句之後,就形成了SQL注入攻擊。透過這個注入點,我們還可以進一步拿到權限,比如說運用 union讀取管理密碼,讀取資料庫信息,或是用mysql的load_file,into outfile等函數進一步滲透。

防範方法

整數參數:

運用intval函數將資料轉換成整數

函數原型

int intval(mixed var, int base)

int intval(mixed var, int base)

int intval(mixed var, int base)

選,是基礎數,預設是10

浮點型參數:

運用floatval或doubleval函數分別轉換單精度和雙精確度浮點型參數

函數原型

int floatval(mixed varvar)

函數原型

int floatval(mixed varvar))要轉換的變數

  int doubleval(mixed var)

var是要轉換的變數

字元型參數:

運用addslashes函數將單引號“'”轉換成“'”,雙引號“'”,雙引號“”成“"”,反斜線“”轉換成“\”,NULL字元加上反斜線“”

函數原型

string addslashes (string str)

str是要檢查的字串

那麼剛才出現的程式碼漏洞,我們可以這樣修補

// 執行mysql查詢語句

$query = "select * from postmessage where id = ".intval($_GET["id"]);


$result = mysql_query( $query)

or die("執行ySQL查詢語句失敗:" . mysql_error());


如果是字符型,先判斷magic_quotes_gpcpc能無法為On,當不為Onlash的時候運用addslash的時候運用義特殊字元







if(get_magic_quotes_gpc())  
{  
    $var 
 {  
    $var = addslashes($_GET["var"]) ;  


再次測試,漏洞已經修補


以上就是PHP漏洞全解(五)-php注入攻擊的內容,更多中文相關請注意PHPcnPcnP. )!

🎜🎜🎜
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!