pwn雜項之linux命令執行

CH13hh發表於2024-05-26

通常pwn題目,時常會考到對Linux命令的一些使用,比如當cat被禁用的時候,可以使用tac,或者別的命令代替🔢

下面是buu上的應該題目,考察的就是對liunx命令的理解,以及對程式的分析。

題目地址:BUUCTF線上評測 (buuoj.cn)

擴充套件:1.當我們輸入第一個命令之後加上;然後後面加上第二個命令,那麼就會先執行第一個命令再執行第二個命令,即使第一個命令不合法也可以執行第二個

2.當我們輸入第一個命令之後加上&&,然後後面加上第二個命令,那麼就會先執行第一個命令如果第一個命令為真再執行第二個命令,否則不會執行

3.當我們輸入第一個命令之後加上||,然後後面加上第二個命令,那麼就會先執行第一個命令如果第一個命令為真就不會執行第二個命令,否則會執行

1.當拿到題目的時候,先看有沒有給libc什麼的,如果給了,首先先把題目的libc換上,然後再進行下一步,當然對於這一個題目首先檢視保護

pwn雜項之linux命令執行

2.處於一個保護全開的狀態,其實對於這種保護全開的題目,要麼程式裡面給了後門,要麼這是個堆題,64位ida載入一下

pwn雜項之linux命令執行

pwn雜項之linux命令執行

可以看見程式確實留的有後門,現在進行逐步分析

pwn雜項之linux命令執行

v3是command的指標,v4是command的首地址

pwn雜項之linux命令執行

這裡就是我們對command裡面進行賦值,不過是要輸入數字,%d,4個單元為一個元素

pwn雜項之linux命令執行

這裡進行遍歷把* v3裡面每個元素都加了0x1bf52

pwn雜項之linux命令執行

v8裡面放的是這個

pwn雜項之linux命令執行

這裡進行判斷輸入command的東西是不是等於v8裡面的東西,如果不是就退出,而且如果最後迴圈結束的時候*v8指向的字串不是'0'的時候就不會執行system(command)。

思路是,首先輸入的東西肯定要包含v8裡面的東西,然後就是加上/bin/sh\x00\x00,\x00的作用就是進行繞過,不讓程式退出,然後就會執行PvvN| 1S S0 GREAT!/bin/sh,但是這個啥也不是啊,別忘了linux裡面的命令特點,當我們輸入第一個命令之後加上;然後後面加上第二個命令,那麼就會先執行第一個命令再執行第二個命令,即使第一個命令不合法也沒事,那麼就是PvvN| 1S S0 GREAT!;/bin/sh,但是前面將每一個元素加了0x1BF52,我們需要減去,然後就是輸入對應的ascii碼

可以使用u32或者u64進行輸入,返回的是int型別的ascii碼。

Exp:

from pwn import *
context(log_level='debug',arch='amd64',os='linux')

io = remote('pwn.challenge.ctf.show',28180)

payload = b'PvvN| 1S S0 GREAT!;/bin/sh\x00\x00'

print(len(payload))

for i in range(7):
    n=i*4
    io.sendline(str(u32(payload[n:n+4])-0x1BF52))


io.interactive()

相關文章