日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[转载]我的WafBypass之道(upload篇)

發(fā)布時(shí)間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载]我的WafBypass之道(upload篇) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

現(xiàn)在位置:?首頁?>?文章?>?Web安全?> 正文

我的WafBypass之道(upload篇)

2016 /11/30 15:20 4,901 沙發(fā)

0x00 前言

玩waf當(dāng)然也要講究循序漸進(jìn),姊妹篇就寫文件上傳好了,感覺也就SQLi和Xss的WafBypass最體現(xiàn)發(fā)散性思維的,而文件上傳、免殺、權(quán)限提升這幾點(diǎn)的Bypass更需要的是實(shí)戰(zhàn)的經(jīng)驗(yàn)。本文內(nèi)容為沉淀下來的總結(jié)以及一些經(jīng)典案例。想到哪寫到哪,所以可能不是很全。創(chuàng)造姿勢(shì)不易,且行且珍惜。(案例圖不好上,畢竟是upload的Bypass,就直接上姿勢(shì))

閱讀此文你會(huì)發(fā)現(xiàn)新老姿勢(shì)都有,因?yàn)槲沂窍胂到y(tǒng)的寫一寫,文件上無非就是結(jié)合各種特性或waf缺陷。輟寫時(shí)想過一個(gè)問題,如何歸攏哪些屬于文件上傳Bypass的范疇?打個(gè)比方:

  • 上傳正常.jpg的圖片 #成功
  • 上傳正常.php #攔截
  • 繞過.php文件的filename后進(jìn)行上傳 #成功
  • 使用繞過了filename的姿勢(shì)上傳惡意.php #攔截
  • 以上這么個(gè)邏輯通常來講是waf檢測(cè)到了正文的惡意內(nèi)容。再繼續(xù)寫的話就屬于免殺的范疇了,過于模糊并且跑題了,并不是真正意義上的文件上傳Bypass,那是寫不完的。

    0x01 搞起

    上傳文件(歪脖騷)時(shí)waf會(huì)檢查哪里?

  • 請(qǐng)求的url
  • Boundary邊界
  • MIME類型
  • 文件擴(kuò)展名
  • 文件內(nèi)容
  • 常見擴(kuò)展名黑名單:

  • asp|asa|cer|cdx|aspx|ashx|ascx|asax
  • php|php2|php3|php4|php5|asis|htaccess
  • htm|html|shtml|pwml|phtml|phtm|js|jsp
  • vbs|asis|sh|reg|cgi|exe|dll|com|bat|pl|cfc|cfm|ini
  • 個(gè)人寫的“稍微”全一點(diǎn),實(shí)際上waf的黑名單就不一定這么全了。
    測(cè)試時(shí)的準(zhǔn)備工作:

    • 什么語言?什么容器?什么系統(tǒng)?都什么版本?
    • 上傳文件都可以上傳什么格式的文件?還是允許上傳任意類型?
    • 上傳的文件會(huì)不會(huì)被重命名或者二次渲染?

    ?

    0x02 容器特性

    有些很老的特性其實(shí)也是最開始繞waf的基礎(chǔ),這里就一筆帶過了。

    • Apache1.X 2.X解析漏洞:

    Apache在以上版本中,解析文件名的方式是從后向前識(shí)別擴(kuò)展名,直到遇見Apache可識(shí)別的擴(kuò)展名為止。
    Win2k3 + APACHE2.0.59 + PHP


    IIS6.0兩個(gè)解析缺陷:

    目錄名包含.asp、.asa、.cer的話,則該目錄下的所有文件都將按照asp解析。例如:




    文件名中如果包含.asp;、.asa;、.cer;則優(yōu)先使用asp解析。例如:




    有一點(diǎn)需要注意,如果程序會(huì)將上傳的圖片進(jìn)行重命名的話就gg了。
    Nginx解析漏洞:

    • Nginx 0.5.*
    • Nginx 0.6.*
    • Nginx 0.7 <= 0.7.65
    • Nginx 0.8 <= 0.8.37

    以上Nginx容器的版本下,上傳一個(gè)在waf白名單之內(nèi)擴(kuò)展名的文件shell.jpg,然后以shell.jpg.php進(jìn)行請(qǐng)求。

    • Nginx 0.8.41 – 1.5.6:

    以上Nginx容器的版本下,上傳一個(gè)在waf白名單之內(nèi)擴(kuò)展名的文件shell.jpg,然后以shell.jpg%20.php進(jìn)行請(qǐng)求。

    PHP CGI解析漏洞

  • IIS 7.0/7.5
  • Nginx < 0.8.3
  • 以上的容器版本中默認(rèn)php配置文件cgi.fix_pathinfo=1時(shí),上傳一個(gè)存在于白名單的擴(kuò)展名文件shell.jpg,在請(qǐng)求時(shí)以shell.jpg/shell.php請(qǐng)求,會(huì)將shell.jpg以php來解析。
    多個(gè)Content-Disposition:

    在IIS的環(huán)境下,上傳文件時(shí)如果存在多個(gè)Content-Disposition的話,IIS會(huì)取第一個(gè)Content-Disposition中的值作為接收參數(shù),而如果waf只是取最后一個(gè)的話便會(huì)被繞過。
    Win2k8 + IIS7.0 + PHP

    請(qǐng)求正文格式問題:

  • Content-Disposition: form-data; name="file1"; filename="shell.asp"
  • Content-Type: application/octet-stream
  • 正常的upload請(qǐng)求都是以上這樣,然而這個(gè)格式也并非強(qiáng)制性的,在IIS6.0下如果我們換一種書寫方式,把filename放在其他地方:
    Win2k3 + IIS6.0 + ASP

    結(jié)合.htaccess指定某些文件使用php來解析:

    這個(gè)方法通常用于繞過waf黑名單的,配置該目錄下所有文件都將其使用php來解析:

    0x03 系統(tǒng)特性

    Windows特殊字符:
    當(dāng)我們上傳一個(gè)文件的filename為shell.php{%80-%99}時(shí):

    waf可能識(shí)別為.php{%80-%99},就會(huì)導(dǎo)致被繞過。
    Win2k8 + IIS7.0 + PHP

    exee擴(kuò)展名:
    上傳.exe文件通常會(huì)被waf攔截,如果使用各種特性無用的話,那么可以把擴(kuò)展名改為.exee再進(jìn)行上傳。

    NTFS ADS特性:
    ADS是NTFS磁盤格式的一個(gè)特性,用于NTFS交換數(shù)據(jù)流。在上傳文件時(shí),如果waf對(duì)請(qǐng)求正文的filename匹配不當(dāng)?shù)脑捒赡軙?huì)導(dǎo)致繞過。

    Windows在創(chuàng)建文件時(shí),在文件名末尾不管加多少點(diǎn)都會(huì)自動(dòng)去除,那么上傳時(shí)filename可以這么寫shell.php......也可以這么寫shell.php::$DATA.......。
    Win2k8 + IIS7.0 + PHP

    0x04 waf缺陷

    匹配過于嚴(yán)謹(jǐn):

    一個(gè)空格導(dǎo)致安全狗被繞過:

    Content-Type: multipart/form-data; boundary=---------------------------4714631421141173021852555099

    嘗試在boundary后面加個(gè)空格或者其他可被正常處理的字符:

    boundary =---------------------------4714631421141173021852555099

    Win2k3 + IIS6.0 + ASP



    以上也能說明一個(gè)問題,安全狗在上傳文件時(shí)匹配各個(gè)參數(shù)都十分嚴(yán)謹(jǐn),不過IIS6.0以上也變的嚴(yán)謹(jǐn)了,再看看其他的地方:

    每次文件上傳時(shí)的Boundary邊界都是一致的

    ?

    Content-Type: multipart/form-data; boundary=---------------------------4714631421141173021852555099
    Content-Length: 253

    -----------------------------4714631421141173021852555099
    Content-Disposition: form-data; name="file1"; filename="shell.asp"
    Content-Type: application/octet-stream

    <%eval request("a")%>
    -----------------------------4714631421141173021852555099--

    但如果容器在處理的過程中并沒有嚴(yán)格要求一致的話可能會(huì)導(dǎo)致一個(gè)問題,兩段Boundary不一致使得waf認(rèn)為這段數(shù)據(jù)是無意義的,可是容器并沒有那么嚴(yán)謹(jǐn):
    Win2k3 + IIS6.0 + ASP

    修改Content-Type的MIME類型:
    Win2k3 + IIS6.0 + ASP

    ASCII > 127的字符:

    數(shù)據(jù)過長導(dǎo)致的繞過:

    waf如果對(duì)Content-Disposition長度處理的不夠好的話可能會(huì)導(dǎo)致繞過,例如:

    Win2k3 + IIS6.0 + ASP

    基于文件名:基于構(gòu)造長文件名


    如果web程序會(huì)將filename除了擴(kuò)展名的那段重命名的話,那么還可以構(gòu)造更多的點(diǎn)、符號(hào)等等。

    特殊的長文件名:
    文件名使用非字母數(shù)字,比如中文等最大程度的拉長,不行的話再結(jié)合一下其他的特性進(jìn)行測(cè)試:

    shell.asp;王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王.jpg

    0x05 End

    文件上傳Bypass可寫的點(diǎn)不多,現(xiàn)有的姿勢(shì)也不能拿出來講(笑)重點(diǎn)在于上傳文件時(shí)遇到waf能夠準(zhǔn)確判斷所攔截的點(diǎn),目光不能只盯在waf,更多的時(shí)注意后端的情況。往往是需要結(jié)合哪些語言/容器/系統(tǒng)*版本“可以怎樣”、“不可以怎樣”。

    轉(zhuǎn)載于:https://www.cnblogs.com/deen-/p/7277159.html

    總結(jié)

    以上是生活随笔為你收集整理的[转载]我的WafBypass之道(upload篇)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。