SQL注入攻擊(SQL Injection),是攻擊者在表單中提交精心建構的sql語句,改動原來的sql語句,如果web程式沒有對提交的資料經過檢查,那麼就會造成sql注入攻擊。
SQL注入攻擊的一般步驟:
1、攻擊者存取有SQL注入漏洞的站點,尋找注入點
2、攻擊者建構注入語句,注入語句和程式中的SQL語句結合產生新的sql語句
3、新的sql語句被提交到資料庫執行處理
4、資料庫執行了新的SQL語句,引發SQL注入攻擊
實例
資料庫
rr netsos.com.cn/show.php?id=71 可能有註入點,我們來測試http://www.netsos.com.cn/show.php?id=71 and 1=1一次查詢到記錄,一次沒有,我們來看看源碼//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. )!