Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 中文字幕一区二区三区在线不卡 ,97国产精品视频观看一,亚洲资源在线视频

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          CSS注入實(shí)例

          習(xí)CSS注入的目的是學(xué)習(xí)計(jì)算機(jī)知識,千萬不要做違反法律的事情,不然等待你的是法律的嚴(yán)懲。

          CSS僅僅只是一種用來表示樣式的語言嗎?當(dāng)然不是!CSS就已被安全研究人員運(yùn)用于滲透測試當(dāng)中。使用屬性選擇器和iFrame,并通過CSS注入來竊取敏感數(shù)據(jù)的方法。但由于該方法需要iFrame,而大多數(shù)主流站點(diǎn)都不允許該操作,因此這種攻擊方法并不實(shí)用。這里為大家詳細(xì)介紹一種不需要iframe且只需10秒,就能為獲得CSRF token的方法。

          一、背景

          CSS屬性選擇器開發(fā)者可以根據(jù)屬性標(biāo)簽的值匹配子字符串來選擇元素。 這些屬性值選擇器可以做以下操作:

          • 如果字符串以子字符串開頭,則匹配
          • 如果字符串以子字符串結(jié)尾,則匹配
          • 如果字符串在任何地方包含子字符串,則匹配

          屬性選擇器能讓開發(fā)人員查詢單個(gè)屬性的頁面HTML標(biāo)記,并且匹配它們的值。一個(gè)實(shí)際的用例是將以“https://example.com”開頭的所有href屬性變?yōu)槟撤N特定的顏色。而在實(shí)際環(huán)境中,一些敏感信息會被存放在HTML標(biāo)簽內(nèi)。在大多數(shù)情況下CSRF token都是以這種方式被存儲的:即隱藏表單的屬性值中。

          可以將CSS選擇器與表單中的屬性進(jìn)行匹配,并根據(jù)表單是否與起始字符串匹配,加載一個(gè)外部資源,例如背景圖片,來嘗試猜測屬性的起始字母。通過這種方式,攻擊者可以進(jìn)行逐字猜解并最終獲取到完整的敏感數(shù)值。想要解決這個(gè)問題受害者可以在其服務(wù)器實(shí)施內(nèi)容安全策略(CSP),防止攻擊者從外部加載CSS代碼。

          二、無 iFrames

          要做到無iFrame,使用一種方法:創(chuàng)建一個(gè)彈窗,然后在設(shè)置計(jì)時(shí)器后更改彈出窗口的位置。使用這種方仍然可以加載受害者的CSS,不再依賴于受害者是否允許iFrame。因?yàn)樽畛醯膹棾鍪峭ㄟ^用戶事件觸發(fā)的,沒有被瀏覽器阻止。為了強(qiáng)制重載,在CSS注入間彈出一個(gè)虛擬窗口,如下:

          但由于CSRF是針對客戶端的攻擊,因此如果能想出一種不需要服務(wù)器的方法,那么就可以節(jié)省大量的開銷和簡化操作。為了接收客戶端加載資源,可以利用Service Workers來攔截和讀取請求數(shù)據(jù)。Service Workers目前只適用于同源請求,在演示中受害者和攻擊者頁面已處于同一源上。

          不久后,chrome很可能會合并這個(gè)實(shí)驗(yàn)性的功能,允許Service Workers攔截跨域請求。這樣,就可以確保在客戶端的攻擊100%的執(zhí)行,并強(qiáng)制用戶在10秒內(nèi)點(diǎn)擊鏈接執(zhí)行CSRF攻擊,演示如下:

          三、Demo

          如上所述,因?yàn)椴幌脒\(yùn)行一個(gè)web服務(wù)器,所以使用service workers攔截和模擬服務(wù)器端組件。目前,該演示只適用于Chrome瀏覽器。首先創(chuàng)建了一個(gè)易受攻擊的目標(biāo),它存在一個(gè)基于DOM的CSS注入漏洞,并在頁面放置了一個(gè)敏感token。再對腳本標(biāo)簽添加了一些保護(hù)措施,對左尖括號和右尖括號進(jìn)行了編碼。

          接下來將強(qiáng)制加載受害者的CSS,并且使用上述方法,可一次竊取(猜解)一個(gè)敏感字符。在接收端,定義一個(gè)攔截請求的service worker,并通過post-message將它們發(fā)送回域,然后將token存儲在本地存儲中以供后續(xù)使用。你也可以想象一個(gè)后端Web服務(wù)器,通過Web套接字或輪詢將CSRF token回發(fā)給攻擊者域。

          如果你的瀏覽器支持的話,只需點(diǎn)擊打開頁面任意位置,你將看到CSRF token將逐一被猜解出來。

          四、結(jié)束語

          反射型CSS注入實(shí)際上比存儲型CSS注入更致命,因?yàn)榇鎯π虲SS注入需要一個(gè)服務(wù)器在受害者渲染之前來更新CSS。一段時(shí)間以來,CSS注入在嚴(yán)重程度上來回變化。過去IE瀏覽器是允許用戶在CSS中執(zhí)行Javascript代碼的。這個(gè)演示也從某種程度上表明了CSS注入,以及渲染不受信任的CSS仍會導(dǎo)致嚴(yán)重的安全問題。所以在設(shè)計(jì)軟件一定要測試,才能及時(shí)發(fā)現(xiàn)和修復(fù)各種漏洞。

          讓我們看看如下這個(gè)web應(yīng)用示例:

          <html>
           <meta http?equiv="Content?Security?Policy"
           content="script?src 'nonce?...' 'unsafe?eval'">
           <div id="template_target"></div>
           <script type="application/template" id="template">
           Hello World! 1 + 1 = {{ 1 + 1 }}
           </script>
           Your search is <?php echo $_GET['q']; ?>
           <script nonce="...">
           let template = document.getElementById('template');
           template_target.innerHTML = template.innerText.replace(/{{(.?)}}/g,eval)
           </script>
          </html>
          

          以上這段簡單的HTML代碼可能反映了現(xiàn)在滲透測試人員經(jīng)常碰到的模板化Web應(yīng)用。某些模板內(nèi)容存儲在Web頁面中,然后再轉(zhuǎn)換為HTML代碼的一部分。上段代碼中含有id為template的HTML元素內(nèi)容先被讀取,然后再執(zhí)行{{}}括號內(nèi)的內(nèi)容,最后在某個(gè)單獨(dú)HTML元素中呈現(xiàn)出來。

          Hello World! 1 + 1 = 2
          Your search is ........... 
          

          其次,這段代碼應(yīng)用程序會在頁面上打印URL中的參數(shù)值。這顯而易見是一個(gè)XSS漏洞,但由于CSP(內(nèi)容安全策略)的存在,攻擊者并不能直接執(zhí)行javascript。雖然直接運(yùn)行javascript的路被堵死,但是我們可以找到其他繞過方法。

          乍一看,貌似eval函數(shù)是一個(gè)可以利用的點(diǎn),我們或許可以直接插入某些特制代碼,讓eval函數(shù)去執(zhí)行。

          為了實(shí)現(xiàn)這點(diǎn),我們必須插入HTML元素中id為template的代碼。但在我們插入語句的前面已有id為template的HTML元素,而document.getElementById('template')只會去獲取第一個(gè)HTML元素,并不是我們所輸入的語句。

          此刻,我們需要換個(gè)角度,看看瀏覽器是否能出現(xiàn)“意外”,以前就出現(xiàn)過很多瀏覽器的異常解析所導(dǎo)致的XSS攻擊。我把所有能使用的tag都收集起來進(jìn)行測試,看看是否有驚喜。測試代碼如下:

          <div id="template">First Tag</div>
           {% for tag in tag_list %}
           <{{tag}} id="template">{{tag}}</{{tag}}>
           {% endfor %}
          <script>console.log(document.getElementById('template'));</script>
          

          當(dāng)程序運(yùn)行完畢時(shí),我得到一個(gè)奇怪的結(jié)果:當(dāng)輪到<html>時(shí),頁面結(jié)構(gòu)似乎發(fā)生了大變,此時(shí)已不再是<div>排在前面。讓我們看下當(dāng)插入<html id="template">時(shí)的變化:

          此時(shí)<html>已排在文檔頂部(在我所測試的所有瀏覽器中都是如此!),現(xiàn)在getElementById('template')將獲取<html>中的惡意數(shù)據(jù),而不是<div>的內(nèi)容。

          只需簡單的?q=<html id="template">{{ alert("xss") }}</html>就可進(jìn)行攻擊

          最終,由于瀏覽器這個(gè)“莫名其妙”的特性,我們繞過了CSP成功進(jìn)行了XSS攻擊!

          本文由白帽匯整理并翻譯,不代表白帽匯任何觀點(diǎn)和立場

          來源:https://nosec.org/home/detail/2860.html

          原文:https://pagedout.institute/download/PagedOut_001_beta1.pdf(該P(yáng)DF文檔的第62頁

          白帽匯從事信息安全,專注于安全大數(shù)據(jù)、企業(yè)威脅情報(bào)。

          公司產(chǎn)品:FOFA-網(wǎng)絡(luò)空間安全搜索引擎、FOEYE-網(wǎng)絡(luò)空間檢索系統(tǒng)、NOSEC-安全訊息平臺。

          為您提供:網(wǎng)絡(luò)空間測繪、企業(yè)資產(chǎn)收集、企業(yè)威脅情報(bào)、應(yīng)急響應(yīng)服務(wù)。

          背景

          京東SRC(Security Response Center)收錄大量外部白帽子提交的sql注入漏洞,漏洞發(fā)生的原因多為sql語句拼接和Mybatis使用不當(dāng)導(dǎo)致。

          2 手工檢測

          2.1 前置知識

          mysql5.0以上版本中存在一個(gè)重要的系統(tǒng)數(shù)據(jù)庫information_schema,通過此數(shù)據(jù)庫可訪問mysql中存在的數(shù)據(jù)庫名、表名、字段名等元數(shù)據(jù)。information_schema中有三個(gè)表成為了sql注入構(gòu)造的關(guān)鍵。

          1)infromation_schema.columns:

          • table_schema 數(shù)據(jù)庫名
          • table_name 表名
          • column_name 列名

          2)information_schema.tables

          • table_schema 數(shù)據(jù)庫名
          • table_name 表名

          3)information_schema.schemata

          • schema_name 數(shù)據(jù)庫名

          SQL注入常用SQL函數(shù)

          • length(str) :返回字符串str的長度
          • substr(str, pos, len) :將str從pos位置開始截取len長度的字符進(jìn)行返回。注意這里的pos位置是從1開始的,不是數(shù)組的0開始
          • mid(str,pos,len) :跟上面的一樣,截取字符串
          • ascii(str) :返回字符串str的最左面字符的ASCII代碼值
          • ord(str) :將字符或布爾類型轉(zhuǎn)成ascll碼
          • if(a,b,c) :a為條件,a為true,返回b,否則返回c,如if(1>2,1,0),返回0

          2.2 注入類型

          2.2.1 參數(shù)類型分類

          • 整型注入
            例如?id=1,其中id為注入點(diǎn),類型為int類型。
          • 字符型注入
            例如?id=”1”,其中id為注入點(diǎn),類型為字符型,要考慮閉合后端sql語句中的引號。

          2.2.2 注入方式分類

          • 盲注
          • 布爾盲注:只能從應(yīng)用返回中推斷語句執(zhí)行后的布爾值。
          • 時(shí)間盲注:應(yīng)用沒有明確的回顯,只能使用特定的時(shí)間函數(shù)來判斷,例如sleep,benchmark等。
          • 報(bào)錯(cuò)注入:應(yīng)用會顯示全部或者部分的報(bào)錯(cuò)信息
          • 堆疊注入:有的應(yīng)用可以加入 ; 后一次執(zhí)行多條語句
          • 其他

          2.3 手動檢測步驟(字符型注入為例)

           // sqli vuln code
                      Statement statement = con.createStatement();
                      String sql = "select * from users where username = '" + username + "'";
                      logger.info(sql);
                      ResultSet rs = statement.executeQuery(sql);
          // fix code 如果要使用原始jdbc,請采用預(yù)編譯執(zhí)行
                      String sql = "select * from users where username = ?";
                      PreparedStatement st = con.prepareStatement(sql);

          使用未預(yù)編譯原始jdbc作為demo,注意此demo中sql語句參數(shù)采用單引號閉合。

          2.3.1 確定注入點(diǎn)

          對于字符類型注入,通常先嘗試單引號,判斷單引號是否被拼接到SQL語句中。推薦使用瀏覽器擴(kuò)展harkbar作為手工測試工具。https://chrome.google.com/webstore/detail/hackbar/ginpbkfigcoaokgflihfhhmglmbchinc

          正常頁面應(yīng)該顯示如下:

          admin后加單引號導(dǎo)致無信息回顯,原因是后端sql執(zhí)行報(bào)錯(cuò),說明引號被拼接至SQL語句中

          select * from users where username = 'admin'  #正常sql
          select * from users where username = 'admin'' #admin'被帶入sql執(zhí)行導(dǎo)致報(bào)錯(cuò)無法顯示信息

          2.3.2 判斷字段數(shù)

          mysql中使用order by 進(jìn)行排序,不僅可以是字段名也可以是字段序號。所以可以用來判斷表中字段數(shù),order by 超過字段個(gè)數(shù)的數(shù)字就會報(bào)錯(cuò)。

          判斷字段數(shù)

          當(dāng)order by 超過4時(shí)會報(bào)錯(cuò),所以此表共四個(gè)字段。

          后端所執(zhí)行的sql語句

          select * from users where username = 'admin' order by 1-- '

          此處我們將原本username的值admin替換為admin’ order by 1 —+,其中admin后的單引號用于閉合原本sql語句中的前引號,—+用于注釋sql語句中的后引號。—后的+號主要作用是提供一個(gè)空格,sql語句單行注釋后需有空格,+會被解碼為空格。

          2.3.3 確定回顯位置

          主要用于定位后端sql字段在前端顯示的位置,采用聯(lián)合查詢的方式確定。注意聯(lián)合查詢前后字段需一致,這也就是我們?yōu)槭裁醋龅诙降脑颉?/span>

          通過下圖可知,后端查詢并回顯的字段位置為2,3位。

          聯(lián)合查詢后的字段可以隨意,本次采用的是數(shù)字1到4直觀方便。

          2.3.4 利用information_schema庫實(shí)現(xiàn)注入

          group_concat()函數(shù)用于將查詢結(jié)果拼接為字符串。

          • 查看存在數(shù)據(jù)庫

          • 查看當(dāng)前數(shù)據(jù)庫中的表

          • 查看指定表中字段

          • 利用以上獲取信息讀取users表中username和password

          3 自動化檢測

          3.1 sqlmap 使用

          sqlmap兼容python2和python3,可以自動化檢測各類注入和幾乎所有數(shù)據(jù)庫類型。

          3.1.1 常用命令

          -u  可能存在注入的url鏈接
          -r讀取http數(shù)據(jù)包
          --data 指定post數(shù)據(jù)
          --cookie 指定cookie
          --headers 指定http頭 如采用token認(rèn)證的情況下
          --threads 指定線程數(shù)
          --dbms 指定后端的數(shù)據(jù)庫
          --os 指定后端的操作系統(tǒng)類型
          --current-user 當(dāng)前用戶
          --users 所有用戶
          --is-dba 是否是dba
          --sql-shell 交互式的sqlshell
          -p指定可能存在注入點(diǎn)的參數(shù)
          --dbs 窮舉系統(tǒng)存在的數(shù)據(jù)庫
          -D指定數(shù)據(jù)庫
          --tables 窮舉存在的表
          -T指定表
          --column 窮舉字段
          -C指定字段
          --dump dump數(shù)據(jù)

          直接檢測
          其中—cookie用于指定cookie,—batch 自動化執(zhí)行,—dbms指定數(shù)據(jù)庫類型

          檢測結(jié)果

          讀取系統(tǒng)中存在數(shù)據(jù)庫
          —dbs讀取當(dāng)前用戶下的數(shù)據(jù)庫

          讀取指定庫下的表
          -D java_sec_code —tables

          dump users表數(shù)據(jù)
          -D java_sec_code -T users —dump

          4 進(jìn)階

          4.1 Mybatis注入

          1)$錯(cuò)誤使用導(dǎo)致注入

          //采用#不會導(dǎo)致sql注入,mybatis會使用預(yù)編譯執(zhí)行
              @Select("select * from users where username = #{username}")
              User findByUserName(@Param("username") String username);
          //采用$作為入?yún)⒖蓪?dǎo)致sql注入
              @Select("select * from users where username = '${username}'")
              List<User> findByUserNameVuln01(@Param("username") String username);

          2)模糊查詢拼接

          //錯(cuò)誤寫法
            <select id="findByUserNameVuln02" parameterType="String" resultMap="User">
                  select * from users where username like '%${_parameter}%'
              </select>
          
           //正確寫法
           <select id="findByUserNameVuln02" parameterType="String" resultMap="User">
                  select * from users where username like concat(‘%’,#{_parameter}, ‘%’)  
              </select>

          3)order by 注入

          order by 后若使用#{}會導(dǎo)致報(bào)錯(cuò),因?yàn)?{}默認(rèn)添加引號會導(dǎo)致找不到字段從而報(bào)錯(cuò)。

             //錯(cuò)誤寫法 
          <select id="findByUserNameVuln03" parameterType="String" resultMap="User">
                  select * from users
                  <if test="order != null">
                      order by ${order} asc
                  </if>
              </select>
          //正確寫法 id指字段id 此表字段共四個(gè) 所以id為1-4
              <select id="OrderByUsername" resultMap="User">
                  select * from users order by id asc limit 1
              </select>

          以上測試均在本地進(jìn)行,請勿未授權(quán)進(jìn)行滲透測試

          5 文章及資料推薦

          slqmap手冊:https://octobug.gitbooks.io/sqlmap-wiki-zhcn/content/Users-manual/Introduction.html
          sql注入詳解:http://sqlwiki.radare.cn/#/


          作者:羅宇(物流安全小分隊(duì))


          主站蜘蛛池模板: asmr国产一区在线| 国产主播一区二区三区在线观看| 日本一区二区三区四区视频| 亚洲高清偷拍一区二区三区| 2021国产精品视频一区| 合区精品久久久中文字幕一区| 精品无码一区二区三区爱欲| 一区二区三区波多野结衣| 农村乱人伦一区二区| 一区二区三区精品高清视频免费在线播放| 久久无码人妻一区二区三区| 国产一区二区三区高清视频| 日韩精品一区二区三区老鸦窝| 人妻无码久久一区二区三区免费| 一区二区高清在线| 在线免费视频一区| 久久久老熟女一区二区三区| 国产在线精品一区免费香蕉| 人妻夜夜爽天天爽一区| 亚洲电影一区二区三区| 国产伦精品一区二区三区视频猫咪| 成人久久精品一区二区三区| 亚洲av鲁丝一区二区三区| 一本色道久久综合一区| 无码视频免费一区二三区| 精品无码一区二区三区爱欲| 亚洲成AV人片一区二区密柚| 国产福利一区二区在线视频 | 精品国产一区二区三区久久| 午夜一区二区在线观看| 亚洲Av无码一区二区二三区| 丰满爆乳一区二区三区| 中文字幕一区在线| 亚洲AV无码一区二区三区在线观看| 精品视频在线观看一区二区三区| 亚洲国产欧美日韩精品一区二区三区 | 国产免费一区二区三区| 无码视频一区二区三区在线观看| 亚洲一区二区女搞男| 自慰无码一区二区三区| 亚洲午夜福利AV一区二区无码|