6.SQL injection


<a href="#MIDDLE" ><h3>點(diǎn)擊跳轉(zhuǎn)到MIDDLE級(jí)別</h3></a><a href="#HIGN"><h3>點(diǎn)擊跳轉(zhuǎn)到HIGN級(jí)別<h3></a>

1.LOW級(jí)別:

輸入1' OR '1'='1
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
第一個(gè)'閉合查詢(xún)語(yǔ)句中的'號(hào),然后1=1又使等式恒真從而讀取了什么數(shù)據(jù)。

image.png

與數(shù)據(jù)庫(kù)中的內(nèi)容核對(duì),結(jié)果一致
image.png

<a id="MIDDLE">--------------------------------------------------------------------------------------------------------------------</a>

2.MIDDLE級(jí)別:

<?php 

if( isset( $_POST[ 'Submit' ] ) ) { 
    // Get input 
    $id = $_POST[ 'id' ]; 
    $id = mysql_real_escape_string( $id ); 

    // Check database 
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;"; 
    $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' ); 

    // Get results 
    $num = mysql_numrows( $result ); 
    $i   = 0; 
    while( $i < $num ) { 
        // Display values 
        $first = mysql_result( $result, $i, "first_name" ); 
        $last  = mysql_result( $result, $i, "last_name" ); 

        // Feedback for end user 
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>"; 

        // Increase loop count 
        $i++; 
    } 

    //mysql_close(); 
} 

?> 

可以看到,Medium級(jí)別的代碼利用mysql_real_escape_string函數(shù)對(duì)特殊符號(hào)
\x00,\n,\r,,’,”,\x1a進(jìn)行轉(zhuǎn)義,同時(shí)前端頁(yè)面設(shè)置了下拉選擇表單,希望以此來(lái)控制用戶(hù)的輸入。

使用burpsuite抓包改包:


image.png

image.png

<a id="HIGN">--------------------------------------------------------------------------------------------------------------</a>

3.HIGN級(jí)別:

<?php 

if( isset( $_SESSION [ 'id' ] ) ) { 
    // Get input 
    $id = $_SESSION[ 'id' ]; 

    // Check database 
    $query  = "SELECT first_name, last_name FROM users WHERE user_id = $id LIMIT 1;"; 
    $result = mysql_query( $query ) or die( '<pre>Something went wrong.</pre>' ); 

    // Get results 
    $num = mysql_numrows( $result ); 
    $i   = 0; 
    while( $i < $num ) { 
        // Get values 
        $first = mysql_result( $result, $i, "first_name" ); 
        $last  = mysql_result( $result, $i, "last_name" ); 

        // Feedback for end user 
        echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>"; 

        // Increase loop count 
        $i++; 
    } 

    mysql_close(); 
} 

?> 

可以看到,與Medium級(jí)別的代碼相比,High級(jí)別的只是在SQL查詢(xún)語(yǔ)句中添加了LIMIT 1,希望以此控制只輸出一個(gè)結(jié)果。但可以被注釋掉,只能防止一般的sqlmap注入,還是可以手注出來(lái)。


image.png

網(wǎng)站怎么避免被SQL注入?

1.參數(shù)化查詢(xún),提前編譯sql語(yǔ)句,使注入失效
2.掐死'號(hào),不讓程序被截?cái)?br> 3.限制數(shù)據(jù)庫(kù)權(quán)限,不允許讀寫(xiě)文件,拒絕除select之外的一切不必要操作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容