PWN練習之環境變數繼承

2021-07-22 12:08:05 字數 1323 閱讀 3934

一、環境變數引數:

在linux/windows作業系統中, 每個程序都有其各自的環境變數設定。 預設情況下, 當乙個程序被建立時,除了建立過程中的明確更改外,

它繼承了其父程序的絕大部分環境變數資訊。 擴充套件的c語言main函式可以傳遞三個引數,除了argc和argv引數外,還能接受乙個char**型別

的envp引數。envp指向乙個字串陣列,該陣列儲存了當前程序具體的環境變數的內容,envp的最後乙個元素指向null,此為envp結束的

識別符號。如下**可以列印環境變數:

#include

int main(

int argc,

char

** argv,

char

** envp)

return0;

}環境變數的格式為:環境變數名=環境變數值

當父程序啟動乙個子程序時,子程序會繼承父程序的換了變數資訊。在linux shell下,通過export可以給shell新增乙個環境變數,此後

通過shell啟動的子程序都會擁有這個環境變數。除了通過export新增環境變數以外,我們還可以通過函式getenv、putenv、setenv等對環境變數進行

操作。python的os模組提供建立子程序以及修改環境變數的函式,其中os.system函式可以建立乙個子程序,且子程序會繼承父程序的環境變數引數資訊;os.putenv可以修改程序的環境變數引數資訊。

二、關於linux

linux shell中,可以使用$()或者兩個反引號(`)來包裹一條shell命令,並返回shell命令的執行結果。比如執行

export testenv2=`python -c "print 'a'*20"`

命令後,再執行./env可以看到有乙個名為testenv2的環境變數,其值為20個a。

三、getenv函式以乙個字串首位址為引數,這個字串為環境變數名。返回值在eax中,存的內容為環境變數引數字串首位址。

tips:

python輸出不可列印字元時,可以使用「\x」,如print '\x0a\x0d\x0a\x0d'。

python修改環境變數(heetian=aaa): os

.putenv

("heetian"

,"aaa")

int execve(const char * filename,char * const argv[ ],char * const envp[ ]);可以設定執行乙個程序的引數與環境變數

#include

main()

;char * envp[ ]=;

execve("/bin/ls",argv,envp);

}

Linux之環境變數

按環境變數的生存週期來劃分可分為兩類 1 永久生效的環境變數 環境變數是定義在配置檔案中的,修改時需要修改配置檔案。1 在 etc profile檔案中使用export定義環境變數,對所有使用者都生效 2 在某使用者的家目錄的.bash profile檔案中使用export定義環境變數,對該使用者生...

linux環境程式設計 環境變數 列印環境變數

在shell程式設計主題中,我們已經大致的介紹過 環境變數和本地變數啦 我們今天來具體的介紹介紹,那環境變數到底是什麼呢?是我 一.環境變數含義 特徵 環境變數是指 作業系統中用來指定作業系統執行環境的一下引數 1 特徵 字串 有統一的格式 名 值 值 值用來描述程序的環境資訊 2 使用形式 與命令...

學習linux之環境變數

前言 環境變數 要是你學過c語言,你可以以這樣的思想去理解,變數,變數,是乙個變化的量,用乙個簡單的 字眼 來代替另外乙個比較複雜或者是容易變動的資料 出自鳥哥的私房菜 根據需求,改變這個變數的值。正解 變數就是一組文字或者符號 這些文字和符號都是你自己定義的 來代替一些設定或者是一串保留的資料。例...