PHP代碼審計(jì)學(xué)習(xí)Day1-in_array函數(shù)缺陷

在github發(fā)現(xiàn)了個(gè)代碼審計(jì)學(xué)習(xí)的資料,項(xiàng)目叫PHP-Audit-Labs,紅日安全做的,跟著學(xué)習(xí)下做個(gè)記錄吧。
知識(shí)點(diǎn):in_array(),在不知道列名的情況跑數(shù)據(jù),make_set()。

in_array():檢查數(shù)組中是否存在某個(gè)值,可以接受3個(gè)參數(shù)(a,b,c)。在b中尋找a,如果存在則返回true,否則返回false。第三個(gè)參數(shù)c默認(rèn)為false,如果指定為TRUE ,則 in_array() 函數(shù)會(huì)進(jìn)行強(qiáng)檢查,檢查a的類型是否和b中的相同,則返回 TRUE,否則返回 FALSE。

將他的代碼下到本地,我這使用phpstudy,用它給的sql語句在本地?cái)?shù)據(jù)庫里運(yùn)行一下,再將數(shù)據(jù)庫賬號(hào)密碼改下,訪問,配置成功。

先黑盒測(cè)試,待會(huì)在對(duì)照代碼測(cè)試。需要傳一個(gè)id。隨便傳一個(gè)id=1,返回?cái)?shù)據(jù),添加單引號(hào),報(bào)錯(cuò)。傳id=1' and '1'='1,也出錯(cuò)。傳id=1 and 1=1,返回正常,傳id=1 and 1=2返回異常。存在數(shù)字型注入。

嘗試union查詢,發(fā)現(xiàn)union被過濾了。接著用updatexml(1,concat(0x7e,(select database()),0x7e),1),發(fā)現(xiàn)concat被過濾了。用burpsuite的intruder模塊fuzz測(cè)試下,大概過濾了or,union,concat,sub,join這些關(guān)鍵字。直接盲注吧,用mid()代替substr(),id=2 and if(mid((select database()),1,1)='d',sleep(5),1)。

然后想起了or被過濾了,用不了information.schema,也就是說跑不了表名和列名。emmmm接下來盲猜一下它的表(admin,user,users之類的),猜到表名users,列名從頁面顯示中得到有(id,name,email,salary)。
如果實(shí)在不知道列名,可以通過這個(gè)姿勢(shì)

select `4` from (select 1,2,3,4 union select * from users)a

正常查詢


圖片.png

發(fā)現(xiàn)列名變成了1,2,3,4


圖片.png

成功查到第3列
圖片.png

但是這里過濾了union,此處用不上這個(gè)姿勢(shì)。

接著對(duì)應(yīng)著代碼看,先看index.php,大意是得到一個(gè)id,經(jīng)過stop_hack()處理,再用in_array()處理后查詢。

//index.php
<?php
include 'config.php';
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("連接失敗: ");
}

$sql = "SELECT COUNT(*) FROM users"; 
$whitelist = array();
$result = $conn->query($sql);
if($result->num_rows > 0){
    $row = $result->fetch_assoc();
    $whitelist = range(1, $row['COUNT(*)']);
}

$id = stop_hack($_GET['id']);
$sql = "SELECT * FROM users WHERE id=$id";

if (!in_array($id, $whitelist)) {
    die("id $id is not in whitelist.");
}

$result = $conn->query($sql);
if($result->num_rows > 0){
    $row = $result->fetch_assoc();
    echo "<center><table border='1'>";
    foreach ($row as $key => $value) {
        echo "<tr><td><center>$key</center></td><br>";
        echo "<td><center>$value</center></td></tr><br>";
    }
    echo "</table></center>";
}
else{
    die($conn->error);
}
?>

在config.php中,過濾了一些關(guān)鍵字。

//config.php
<?php  
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "day1";

function stop_hack($value){
    $pattern = "insert|delete|or|concat|concat_ws|group_concat|join|floor|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile|dumpfile|sub|hex|file_put_contents|fwrite|curl|system|eval";
    $back_list = explode("|",$pattern);
    foreach($back_list as $hack){
        if(preg_match("/$hack/i", $value))
            die("$hack detected!");
    }
    return $value;
}
?>

再看下題解,發(fā)現(xiàn)它用make_set()替代了concat()。搜了一下它的用法

id=4 and (select updatexml(1,make_set(3,'~',(select flag from flag)),1))

make_set(bits,str1,str2,,,,),將第一個(gè)參數(shù)轉(zhuǎn)化為二進(jìn)制,在1處打印字符str,0處不打印,詳情如下
1的二進(jìn)制為0001,倒過來為1000,打印a。


圖片.png

2的二進(jìn)制為0010,倒過來為0100,打印b。


圖片.png

7的二進(jìn)制為0111,倒過來為1110,打印a,b,c。
[圖片上傳中...(圖片.png-7b38da-1562846283165-0)]
最后編輯于
?著作權(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)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • web應(yīng)用程序會(huì)對(duì)用戶的輸入進(jìn)行驗(yàn)證,過濾其中的一些關(guān)鍵字,這種過濾我們可以試著用下面的方法避開。 1、 不使用被...
    查無此人asdasd閱讀 7,658評(píng)論 0 5
  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,980評(píng)論 0 9
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,353評(píng)論 0 17
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,438評(píng)論 6 13
  • Web安全之SQL注入漏洞 本節(jié)知識(shí)點(diǎn) SQL注入原理 前言 結(jié)構(gòu)化查詢語句(Structured Query L...
    f354f7231c35閱讀 2,217評(píng)論 0 5

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