pwntools用法

pwntools 是一個Python庫, 用于編寫二進制漏洞利用(exploitation)腳本

功能:

  • 遠程連接和本地連接: 支持通過TCP/UDP連接遠程服務或與本地進程進行交互。
  • Shellcode和ROP鏈構造: 提供了便捷的工具來生成和利用shellcode(比如execve的shellcode)以及構造ROP(Return-Oriented Programming)鏈。
  • 調試支持: 可以與調試器(如gdb)配合使用,進行調試、自動化調試等。
  • 自動化交互: 支持自動化與程序交互,模擬用戶輸入,處理輸入輸出流。
  • 格式化輸出: 提供了豐富的格式化工具,幫助你以不同的方式展示數據。

語法:

1. 基礎連接和交互
連接

from pwn import * #導入pwntools庫

p = remote('example.com', 12345) #連接遠程服務

p = process('./vulnerable_program') #連接本地程序

發送數據

p.sendline('Hello') #發送一行數據

p.send('Hello') #發送沒有換行符的數據

p.send(b'Hello') #發送多個數據

接收數據

data = p.recvline() #接收一行數據

data = p.recv() #接收任意數據

data = p.recv(1024) #接收特定大小的數據

2. 調試
使用GDB調試

p = process('./vulnerable_program')

gdb.attach(p) #啟動進程,并自動附加到gdb進行調試

p.interactive() #調試時,繼續執行直到退出

p = process('./vulnerable_program')

gdb.attach(p, '''

break main

continue ''') #啟動調試進程并設置斷點 設置gdb斷點并啟動

3. 利用ROP鏈
創建ROP鏈

elf = ELF('./vulnerable_program') #加載二進制文件

system = elf.symbols['system'] #獲取函數地址(比如system函數)

libc = ELF('/lib/x86_64-linux-gnu/libc.so.6') system = libc.symbols['system']

system = libc.symbols['system'] #獲取libc基地址

rop = ROP(elf)

rop.call(system, [next(elf.search(b'/bin/sh'))]) # 構造ROP鏈

print(rop.dump()) # 打印ROP鏈

4. 格式化輸出
格式化為16進制

data = b'Hello'

print(hex(data)) # 打印數據的16進制

構造填充數據(Padding)

padding = b'A' * 64 # 構造填充數據

print(padding) # 格式化成16進制

5. Shellcode與生成
使用asm來生成Shellcode

shellcode = asm(shellcraft.sh())

print(shellcode) #使用asm生成shellcode

執行Shellcode

p = process('./vulnerable_program') #創建一個進程并注入shellcode

p.send(shellcode) #注入shellcode

6. 腳本化交互

pwntools 提供了一個名為 interactive 的方法來幫助你與程序進行交互。

p.sendline('Hello') # 發送數據并啟動交互模式

p.interactive() # 啟動交互模式,進入交互式命令行

7. 利用context進行設置

context 是用來設置當前進程/連接的環境的。可以設置架構、字節序等。

設置架構和字節序

context.arch = 'amd64'

context.os = 'linux'

context.endian = 'little' # 設置架構和字節序(x86_64,little-endian)

設置輸入/輸出編碼

context.term = 'xterm-256color' # 設置輸入輸出編碼為utf-8

8. 其它常見工具
ELF

ELF 類提供了對二進制文件的操作接口,能夠幫助你提取符號、段、重定位等信息。

elf = ELF('./vulnerable_program') # 加載一個ELF文件

print(hex(elf.entry)) # 查看程序的入口地址

func_address = elf.symbols['main']

print(hex(func_address)) #獲取函數地址

libc

libc 類幫助你進行 libc 漏洞利用時的操作,包括獲取函數地址、計算基址等。

libc = ELF('/lib/x86_64-linux-gnu/libc.so.6') # 加載libc文件

system = libc.symbols['system']

print(hex(system)) # 獲取libc中的system函數地址

9. pwn 命令行工具

除了作為一個Python庫,pwntools 還提供了一些命令行工具,如 pwn cyclicpwn checksec 等,來幫助你分析二進制文件和漏洞。

$ pwn cyclic 100 # 生成一個包含100個字符的循環序列

$ pwn checksec --fortify-file=./vulnerable_program # 檢查程序的安全設置

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

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

相關文章

【每日學點鴻蒙知識】placement設置top、組件攜帶自定義參數、主動隱藏輸入框、Web設置字體、對話框設置全屏寬

1、popup組件placement設置top沒有生效? 可以用offset屬性將popup往下邊偏移一下 來規避 2、組件攜帶自定義參數的接口是哪個? 參考鏈接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-…

PyTorch快速入門教程【小土堆】之優化器

視頻地址優化器(一)_嗶哩嗶哩_bilibili import torch import torchvision from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential from torch.utils.data import DataLoaderdataset torchvision.datasets.CIFAR1…

數據庫篇:mysql內置函數

前言 sql 是程序開發員繞不開的一項技能,而mysql是當前最流行的數據庫,熟知其內置的一些函數,可以使我們平時的開發工作更加順暢和方便 時間日期函數 字符串函數 數學計算相關函數 條件判斷函數 加密和壓縮函數 聚合函數 格式或類型轉…

C# 中 Webclient和Httpclient

在C#中,WebClient和HttpClient,這兩個類都是用于發起HTTP請求的客戶端,它們在使用API上傳文件或數據時有不同的優缺點和應用場景。在C#中WebClient是一種較早的網絡客戶端,而HttpClient是后期提供的更現代的、功能更強大的HTTP客戶…

權限獲得第一步

權限獲得第一步 下載打開附件 給了一串加密的密文 一般都是用MD5加密,每一段分別解碼一下 第一段不行,試一下第二段 這里發現第二段可以解碼出來,這應該就是密碼了 flag{3617656}

HTML 輪播圖(Carousel)詳細講解

HTML 輪播圖(Carousel)詳細講解 輪播圖(Carousel)是一種常見的用戶界面組件,用于在同一位置展示多個圖像或內容,允許用戶通過滑動或自動播放的方式查看不同的內容。它通常用于展示產品、圖片、廣告等。 1…

25秋招面試總結

秋招從八月底開始,陸陸續續面試了不少,現在也是已經塵埃落定,在這里做一些總結一些我個人的面試經歷 騰訊 騰訊是我最早面試的一家,一開始撈我面試的是數字人民幣,安全方向的崗位,屬于騰訊金融科技這塊。…

一份關于 Ubuntu 系統下代理配置的故障排查筆記

Ubuntu 網絡代理配置與故障排查指南 在使用 Ubuntu 系統時,配置網絡代理可以幫助提升網絡訪問速度或突破網絡限制。然而,代理配置過程中可能會遇到各種問題。本文將詳細介紹如何在 Ubuntu 下配置網絡代理,并提供故障排查的步驟和解決方案。 …

001__VMware軟件和ubuntu系統安裝(鏡像)

[ 基本難度系數 ]:★☆☆☆☆ 一、Vmware軟件和Ubuntu系統說明: a、Vmware軟件的說明: 官網: 歷史版本: 如何下載? b、Ubuntu系統的說明: 4、linux系統的其他版本:紅旗(redhat)、dibian、cent…

fiscoBcos中webase平臺導出java項目

導出合約為java項目并調用 1. 在webase管理平臺上面進行項目的導出 2.將下載好的項目解壓并用idea打開,目錄結構如下 在resources目錄下的abi放的是編譯過后的合約方法,bin.ecc放的是以編譯過后的智能合約,conf文件夾下面放的是鏈…

【嵌入式C語言】指針數組結構體

指針與數組 指針與數組指針數組數組指針 多維數組數組名的保存 結構體定義結構體定義結構體變量使用typedef簡化結構體聲明訪問結構體成員結構體內存分配字節對齊位域定義位域位域的限制示例 指針與數組 指針數組和數組指針是兩個不同的概念,它們涉及到指針和數組的…

Junit4單元測試快速上手

文章目錄 POM依賴引入業務層測試代碼Web層測試代碼生成測試類文件 在工作中我用的最多的單元測試框架是Junit4。通常在寫DAO、Service、Web層代碼的時候都會進行單元測試&#xff0c;方便后續編碼&#xff0c;前端甩鍋。 POM依賴引入 <dependency><groupId>org.spr…

ubuntu 20.04 國內源安裝docker

先更新軟件包&#xff0c;安裝備要apt軟件 # 更新軟件包索引 sudo apt-get update# 安裝需要的軟件包以使apt能夠通過HTTPS使用倉庫 sudo apt-get install ca-certificates curl gnupg lsb-release使用阿里云源 # 添加阿里云官方GPG密鑰 curl -fsSL http://mirrors.aliyun.co…

【優選算法】查找總價格為目標值的兩個商品(雙指針)

算法_云邊有個稻草人的博客-CSDN博客 目錄 解法一&#xff1a;暴力算法 解法二&#xff1a;雙指針(時間復雜度為O&#xff08;N&#xff09;) 【代碼編寫】 LCR 179. 查找總價格為目標值的兩個商品 - 力扣&#xff08;LeetCode&#xff09; 解法一&#xff1a;暴力算法 用…

時空信息平臺-API安全措施-下篇:登錄鑒權【訪問受限】您的請求已被該站點的安全策略攔截。

文章目錄 引言I 登錄鑒權處理邏輯校驗順序用戶狀態校驗密碼校驗Token鑒權短信驗證碼/圖形驗證碼登錄設備限制II 服務端發生錯誤的處理業務返回碼處理前端處理業務返回碼nginx處理http狀態碼引言 時空信息平臺-API安全措施:上篇(通訊協議的安全措施) https://blog.csdn.net/z…

UE(虛幻)學習(三) UnrealSharp插件中調用非托管DLL

上一篇文章中我使用UnrealSharp成功使用了我的一個C#控制臺程序中的網絡模塊&#xff0c;這個程序是基于KCP網絡了&#xff0c;其中調用了Cmake 編譯的一個C的DLL&#xff0c;在虛幻中DLL需要放在Binaries目錄中才可以。Unity中只要放在任意Plugins目錄中就可以。 但是Binaries…

編譯openssl遇到錯誤Parse errors: No plan found in TAP output的解決方法

在編譯openssl時 tar -zxvf openssl-1.1.1p.tar.gz cd openssl-1.1.1p ./config --prefix/usr --openssldir/etc/ssl --shared zlib make make test 遇到錯誤 Parse errors: No plan found in TAP output 解決方法&#xff1a; yum install perl-Test-Simple

IO多路復用(select/epoll)

目錄 一、概念 二、語法 1.select 1.1 select函數的語法 1.2 文件描述符集合操作 1.3 select函數的優缺點 2.epoll 2.1 epoll語法 2.2 epoll的工作模式 2.3 epoll的優缺點 三、select服務端代碼 四、epoll服務端代碼 五、客戶端代碼 一、概念 IO多路復用是一種同…

android stdudio環境: gradle一直安裝失敗

一、一直顯示如下錯誤 The specified Gradle distribution file:/home/wangqingyuan/.gradle/wrapper/dists/gradle-8.6-bin/gradle-8.6-bin.zip does not exist. 經分析&#xff0c;是因為應用本身設置了gradle版本的地址為本地&#xff1a; 應用目錄&#xff1a;gradle/gra…

解決PS 撤銷卡頓

1. 關閉Windows Ink - 打開觸控筆設置 - 禁用Windows Ink功能 2. 創建 PSUserConfig.txt&#xff08;注意Win10/11 可能隱藏文件擴展名&#xff09; - 位置&#xff1a;C:\Users\[用戶名]\AppData\Roaming\Adobe\Adobe Photoshop CC 2019\Adobe Photoshop CC 2019 Se…