求知若渴,虚心若愚.|

lmarch2

园龄:1年8个月粉丝:5关注:7

PWN一些用到的指令和工具

ROPgadget

ROPgadget --binary 文件名 --only "指令|指令" | grep 寄存器或者其他存在的字段

查找汇编指令的地址

例子:

ROPgadget --binary get_started_3dsctf_2016 --only "mov|ret" |grep eax

ROPgadget --binary get_started_3dsctf_2016 --only "mov|ret" |grep ': mov eax'

  • --only ” | “ 表示只返回含有xx指令或xx指令的gadget

  • grep 表示含有什么什么特定字段(通常是寄存器)的指令

    但是grep能寻找的必须是连续的指令中间不能隔开,连空格都必须一致才能被搜索到

    比如你想要搜索0x080701a8 : mov eax, ecx ; ret,你可以用命令ROPgadget --binary get_started_3dsctf_2016 --only "mov|ret" |grep 'eax, ecx';命令ROPgadget --binary get_started_3dsctf_2016 --only "mov|ret" |grep 'eax,ecx'无法成功因为逗号和ecx之间少了一个空格

  • 取地址的指令[edx]无法被识别,[ ]在ROPgadget中貌似是表示含有[ ]内字母的指令

    比如 ROPgadget --binary get_started_3dsctf_2016 --only "mov|ret" |grep '[edx]'得到的是这样

ROPgadget --binary 文件名 --sting '/bin/sh'

查找字符串地址

例子:

ROPgadget --binary 文件名 --sting '/bin/sh'

ROPgadget --binary 文件名 --sting '/sh'

ROPgadget --binary 文件名 --sting 'sh'

ROPgadget --binary 文件名 --sting 'cat flag'

ROPgadget --binary 文件名 --sting 'cat flag.txt'

![(

vmmap

vmmap [-h] [pages_filter]

首先vmmap需要在pwndbg,且程序运行时使用

  • 输入vmmap,显示出程序运行时所用到的所有地址段
  • 输入vmmap 地址 ,显示该地址对应的地址段
  • vmmap -h,提示帮助;-w只显示可写的部分;-x只显示可执行的部分

例子:

第一行,表明了哪个颜色对应哪个段,

start和end对应该地址段的起始和结束位置

Perm 是该段的权限,rwx代表可读、可写、可执行

Size表示该段大小

Offset表示这段与程序基址的偏移

File表示加载的是什么

vim

命令模式下:

$ 行末

^ 行首

L 屏幕底行

H 屏幕顶行

yy 拷贝该行

dd 删除该行

P 前粘贴

p 后粘贴

D 删除至行尾

u 撤销

gg 光标移至行首

dG 删除光标行及光标行以下全部内容

底线命令模式下:

:wq 保存并退出

:%d 删除全部内容

:%s 替换 参考(万里哥我滴神)

pwndbg

基本指令

  • r = run 运行程序,如果你当前已经在运行程序了,再输入r会重新运行程序
  • b = break 下断点,在调试pwn中,一般是 b 0xabcde ,abcde是在ida中看到的地址,如b 0x400908
  • c = continue 继续运行程序直到停在下一个断点
  • n = next 下一行,一般装了pwndbg之后下一行指的是下一条汇编,但是如果调试的程序是带调试信息的,一般会跳几行汇编
  • ni = nexti 下一条指令,这个就是真正的下一条汇编指令
  • s = step 单步进入函数
  • d = delete 删除断点,后面可带数字,说明删除第几个断点,如果不带参数,说明删除全部断点
  • x 查看内存

c,n,ni这几个程序都可以带一个数字,用来代表连续运行这个指令多少次

x/num xg 地址 64位查看某处地址

x/num xw 地址 32位查看某处地址

s/num s 地址 查看从地址开始的num个字符串

b *$rebase(地址) 用于开启PIE该指令会在基址+地址处下断点

ASLR和pie编译

查看系统当前ASLR打开情况

sudo cat /proc/sys/kernel/randomize_va_space

ASLR的三个级别 :

0, 不开启任何随机化;

1, 开启stack、libraries [、executable base(special libraries -^-) if PIE is enabled while compiling] 的随机化;

2,开启heap随机化。

PIE编译出来的executable如果ASLR=0的话,基址也是不会变的(有能力但没使用),如果ASLR=1的话,即使按照ASLR定义这个级别似乎不会对heap基址随机化,但是由于executable的基址已经随机化了,所以heap的基址自然也就被随机化了

指令关闭ASLR

sysctl -w kernel.randomize_va_space=0

echo 0 > /proc/sys/kernel/randomize_va_space

fPIE选项仅能在编译可执行码时用,不能用于编译库。所以,如果想要PIE的程序,需要你除了在gcc增加-fPIE选项外,还需要在ld时增加-pie选项才能产生这种代码。即gcc -fpie -pie来编译程序。单独使用哪一个都无法达到效果。

gcc  helloworld.c

file a.out a.out:

ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

file a.out a.out:

ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

未开启PIE的文件属性为executable,开启的为shared object

注意PIE随机程序加载基地址,要和libc的随机libc库基地址区分

shellcode

pwntools生成的shellcode默认64位

shellcode = asm(shellcraft.sh())

要生成32位的shellcode需要指定

shellcode = asm(shellcraft.sh(),arch='i386',os='linux')

手动反汇编汇编指令

xx = asm('')

本文作者:lmarch2

本文链接:https://www.cnblogs.com/imarch22/p/17588989.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   lmarch2  阅读(206)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.