sql注入中關於group by 和 with rollup 函數運用


一、函數group by 和with rollup

           group by函數:對進行查詢的結果進行分類。group by函數后面跟什么就按什么分類;

         例如  select student group by age(按照年齡將學生分類)    

        with  rollup函數:通常跟在group by函數后面講分類的數據進行匯總統計,即在group by函數的基礎上對數據進行匯總統計;加入with roullup函數后會出現一行password為null

         只進行group by函數:select password from test;

group by函數與with roullup函數進行聯合使用

這里是借鑒大佬的文章(http://t.csdn.cn/UH39L

二 、例題:這里以ctfshow上面的一道題進行演示

          進入題目發現是一個登錄框

通過點擊取消我們得到了源碼

<?php
        $flag="";
        function replaceSpecialChar($strParam){
             $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
             return preg_replace($regex,"",$strParam);
        }
        if (!$con)
        {
            die('Could not connect: ' . mysqli_error());
        }
        if(strlen($username)!=strlen(replaceSpecialChar($username))){
            die("sql inject error");
        }
        if(strlen($password)!=strlen(replaceSpecialChar($password))){
            die("sql inject error");
        }
        $sql="select * from user where username = '$username'";
        $result=mysqli_query($con,$sql);
            if(mysqli_num_rows($result)>0){
                    while($row=mysqli_fetch_assoc($result)){
                        if($password==$row['password']){
                            echo "登陸成功<br>";
                            echo $flag;
                        }

                     }
            }
    ?>

通過觀察源碼,我們發現大多數sql注入語句字符都被過濾掉了,所以常規的sql注入思路是行不通的,觀察源碼,當輸入的password和數據庫相匹配是才能得到flag、所以我們可以構造group by函數與with rollup函數使數據庫中多出一行null的password;所以登錄框上不用輸入password就行,可以構造出null=null 從而成功登錄得到flag;

由於過濾空格所以空格用/**/代替

payload :admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup/**/#

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM