【Code-Audit-Challenges】Challenge 18:SQL注入

0x01 題目

#GOAL: get password from admin;
<?php 
    
error_reporting(0);

$link = mysqli_connect('localhost', 'xxx', 'xxx', 'test');
if (!$link) { 
    die('Could not connect to MySQL: ' . mysqli_connect_error()); 
} 

$link->set_charset("utf8");


function clean($str){
    if(get_magic_quotes_gpc()){
        $str=stripslashes($str);
    }
    return htmlentities($str, ENT_QUOTES);
}
$username = @clean((string)$_GET['username']);
$password = @clean((string)$_GET['password']);
$query='select * from user where username=\''.$username.'\' AND password=\''.$password.'\';';
var_dump($query); //提示:htmlentities函數(shù)的效果可以通過(guò)右鍵查看網(wǎng)頁(yè)源代碼來(lái)看效果
echo "<br />";
$result=mysqli_query($link,$query);
if(!$result || mysqli_num_rows($result) < 1){
    die('Invalid password!');
}

$row = mysqli_fetch_assoc($result);

echo "Hello ".$row['username']."</br>";
echo "Your password is:".$row['password']."</br>";
?>

0x02 解題

原題不是這樣的,里面加了我自己的注釋和數(shù)據(jù)庫(kù)信息,有一個(gè)比較坑的是htmlentities()函數(shù)需要右鍵源代碼才能看到效果。。

然后分析一下代碼,首先已知用戶名admin,目標(biāo)是獲取密碼。其中username和password都使用了一個(gè)自定義的clean函數(shù)進(jìn)行過(guò)濾,看一下clean函數(shù),首先使用stripslashes函數(shù)去掉反斜杠,然后返回通過(guò)htmlentities()函數(shù)編碼的字符串,并且在函數(shù)中使用了ENT_QUOTES,將單引號(hào)和雙引號(hào)都進(jìn)行實(shí)體編碼,因此不能使用單引號(hào)進(jìn)行注入,但是htmlentities函數(shù)是不編碼反斜杠的,因此我們可以通過(guò)輸入一個(gè)反斜杠,轉(zhuǎn)義掉一個(gè)單引號(hào),從而完成注入,payload如下:

?admin\&password=%20or%201=1%23
?著作權(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)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評(píng)論 19 139
  • 之前積累了XSS 有一段時(shí)間,因?yàn)槟壳伴_(kāi)始了一件有趣的工程,需要整合非常多的知識(shí),其中Web 安全這一塊出現(xiàn)最多的...
    刀背藏身閱讀 9,573評(píng)論 0 16
  • 閱讀后我們發(fā)現(xiàn)要找到flag就要找到和‘QNKCDZO’md5加密后相同的字符串。顯然“碰撞”找對(duì)應(yīng)字符串是幾乎不...
    Sund4y閱讀 950評(píng)論 0 0
  • Sql注入定義: 就是通過(guò)把sql命令插入到web表單提交或輸入域名或頁(yè)面請(qǐng)求的查詢字符串,最終達(dá)到欺騙服務(wù)器執(zhí)行...
    付出從未后悔閱讀 760評(píng)論 0 3
  • 0x00概述 寬字節(jié)注入主要源于程序員設(shè)置數(shù)據(jù)庫(kù)編碼與php編碼設(shè)置為不同的兩種編碼,那么就可能產(chǎn)生寬字節(jié)注入 例...
    queena_閱讀 1,387評(píng)論 0 1

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