• break *0x400100(b main), 在0x400100处下断点,tb, 一次性断点,info b,查看断点信息,delete [number] ,删除断点,watch *(int *)0x08044530,在内存0x08044530处的数据改变时stop
  • x /4xg $ebp, 查看ebp开始的4个8字节内容,(b表示单字节,h表示双字节,w表示四字节,g表示八字节;x表示十六进制输出,s表示字符串输出,i表示反汇编,c表示单字符)
  • p $eax, 输出eax内容, set $eax = 4,修改变量值
  • c继续运行,r重新开始运行,ni单步步过,si单步步入,fini运行至函数刚刚结束处,return expression,将函数返回值指定为expression
  • bt,查看函数调用
  • info f,查看当前栈帧,context查看运行上下文,stack查看当前堆栈
  • call func,强制函数调用
  • ropgagdet,找common rop
  • vmmap,查看虚拟地址分布
  • shellcode,搜索,生成shellcode
  • ptype struct link_map,查看link_map定义
  • p &((struct link_map*)0)->l_info,查看l_info成员的偏移

  • scanf(“%s”),可以读’\x00’字符,不截断
  • 忽略某信号 trap “” signal , 例如 trap “” SIGALRM ,忽略时钟信号, gdb “handle SIGALRM nostop noprint”
  • socat tcp-l:6666,reuseaddr,fork exec:”LD_PRELOAD=./libc.so.6 ./pwn 6666″
  • IDA pro: idapython findbinary(here(), SEARCH_DOWN, “61 62 63″) 从当前位置开始搜索”abc”
  • libc可以用来leak heap地址,fastbins[10]或者normalbins
  • pwntools dynelf 获取两个函数地址相对偏移,获取偏移之后leak一次即可获得system地址
  • pwntools 停止发送信息,p.shutdown(‘send’)
  • 程序运行之后找字符串,system(“sh”)通常也是可行的
  • 插入NULLbytes,http://phrack.org/issues/58/4.html
  • gcc 编译shellcode :gcc -fno-stack-protector -z execstack -o bug bug.c
  • 64 bit call parameters RDI, RSI, RDX, R10, R8, R9,rop 利用见 linux x64 rop利用总结
  • asm(‘sub rsp, 4; jmp rsp’, arch=’amd64′)
  • roputils 关于rop的各种利用方法集合