T_MAC仔 发表于 2017-5-12 15:37

pwn小姿势 三&&四

本帖最后由 T_MAC仔 于 2017-5-13 00:33 编辑

http://pwnable.kr/bof && flagbof
os: kali 64 &&win7 64
toos:gdb—peda插件ida64 登陆pwbalble.kr 打开bof 根据英文提示:   
Nana told me that buffer overflow is one of the most common software vulnerability.Is that true?   
根据提示可获得信息:此题可能跟缓冲区溢出有关:
此时进行查看源代码获取更多信息:bof。c       #include <stdio.h>#include <string.h>#include <stdlib.h>void func(int key){      char overflowme;      printf("overflow me : ");      gets(overflowme);   // smash me!      if(key == 0xcafebabe){          system("/bin/sh");      }      else{          printf("Nah..\n");      }}int main(int argc, char* argv[]){      func(0xdeadbeef);      return 0;}从bof.c中可以提取到的知识点: ####
[*]main()函数调用func() 函数传递参数 0xdeadbeef
[*]func()函数中包含对数组overflowsme【】 数组的输入 ,接下来就是if(key == 0xcafebabe) 判断是否读取flag文件
[*]由此根据英文提示可以进行猜测就是,利用overflowme[]的溢出输入进行覆盖 key的值为 0xcafebabe进行正确的if判断读取flag文件
过程分析一
下载bof文件,直接拖进kali中 ,利用命令:file bof 查看文件为:
http://imglf.nosdn.127.net/img/dnUxZE56SzVQeDY3MXNqekhJYnY1YlAzYjZyL2kxdWl4amJmTG04MHN4S0VVelJYUm4rRk53PT0.png?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpg
打开windows 7虚拟机,利用ida分析 bof如图:
http://imglf1.nosdn.127.net/img/dnUxZE56SzVQeDR4cWRVL1lXRS9FWmFzNTAwSUNzdWdqM1orM3YrdzNPTlFoTVNyM1FSRzlnPT0.png?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpg
使用查看伪代码命令 F5: 此处伪代码对应的是main()函数:
http://imglf.nosdn.127.net/img/dnUxZE56SzVQeDR4cWRVL1lXRS9FWEtpRUVaNXArOUhTS2d6VUlUS3RGMkxNajlGQm1vY3h3PT0.png?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpg
接下来双击func()函数来到func()函数内部:此处伪代码对应func()函数   
http://imglf1.nosdn.127.net/img/dnUxZE56SzVQeDR4cWRVL1lXRS9FV3h3S2h1cFpjMk1sNUNjNjZ1dGpmOE9Kazl2TmRBazBRPT0.png?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpg计算需要覆盖的字节数 ####
由此我们可以进行比较出来:a1的地址为 s的首地址是 【ebp- 2c】
因此0x8 + 0x2c = 0x34 = 52d因为栈区是从高向低生长的,所以此时想覆盖掉 key的值为0xcafebabe 就需要先进行覆盖前面的52个字节下面通过调试bof文件进行验证此想法。   gdb调试bof
先执行objdump -d bof 进行查看反汇编代码:
http://imglf1.nosdn.127.net/img/dnUxZE56SzVQeDZWRWd5dkc1N0RVZTRJb0xWeGNZMFl3VlJXbFNFMmFHcEkzaitvbVM1dWV3PT0.png?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpg
重点位置已经标注,如相对地址 68a 和调用func()函数 69a等:
接下来进行gdb调试:如图
http://imglf1.nosdn.127.net/img/dnUxZE56SzVQeDZWRWd5dkc1N0RVY1NnZFNvS2dvSmFkWEp4K2RhbC93RmZPa0FXMzdFVTZBPT0.png?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpg
上图中我们需关注寄存器EIP eax 关注stack的变化:接下来利用命令 s 进入func函数:
http://imglf2.nosdn.127.net/img/dnUxZE56SzVQeDZWRWd5dkc1N0RVYzh1eFdGVTFBZkM1T0tvT3AvbUVQRGJLQkFWc204eXBRPT0.png?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpg
http://imglf1.nosdn.127.net/img/dnUxZE56SzVQeDZWRWd5dkc1N0RVZmcvYkhkZFBJekVoZ0grbkNqSmkrZ0d6UVRHU1cwQnBBPT0.png?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpg
上图中我们输入 aaaaaaaa的值 :接下来查看栈区内存:
http://imglf1.nosdn.127.net/img/dnUxZE56SzVQeDZWRWd5dkc1N0RVY1NnZFNvS2dvSmFRQnkxTzRIa0N4Y2RoejJ5RVJTZGp3PT0.png?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpg
通过对栈区内存的查看我们很容易得到 overflowme首地址与 key 相差52字节。因此我们只需要进行key 值得覆盖即可完成正确读取flag文件分析方法二
复制bof.c的代码进行在kali上进行 编译运行进行调试的时候会发现如下图的情形:
http://imglf2.nosdn.127.net/img/dnUxZE56SzVQeDZWRWd5dkc1N0RVUmswNkNOd0hQS04yZC9ZVlJWeEFRSm5vZDFNdGdUVmFBPT0.png?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpg
key和 overflowme的首地址相差48字节。这可能跟gcc的版本,操作系统内核等有关。构造payload ####
python -c (print "'A' * 52 + '\xbe\xba\xfe\ca'") -cat | nc pwnable.kr 9000
cat < (python -c (print " '\xbe\xba\xfe\ca'" * 14) - | nc pwnable.kr 9000) 使用cat的原因是:保持stdin opened
http://imglf.nosdn.127.net/img/dnUxZE56SzVQeDV2eUkxUk9WRTE4aFhSZkpWZHFaU0xuTGU0U0JKNjRGVW1KT05oaXJvTVpnPT0.png?imageView&thumbnail=500x0&quality=96&stripmeta=0&type=jpgflag
打开后读取英文提示:Papa brought me a packed present! let's open it
根据提示flag文件可能为加壳程序:下载后直接拖进iad利用命令F12 + shift 查看字符串发现是:upx加壳
利用kali 命令行upx -d flag进行脱壳。脱壳后进入ida进行分析(直接F5 查看伪代码跟踪flag变量也会发现)
直接发现flag = UPX...? sounds like a delivery service :)   

poyoten 发表于 2017-5-26 20:41

T_MAC仔 发表于 2017-5-12 23:38
这道题其实首先应该查看一下程序采用啦那种保护

就这道题的开始那个pwn,看不看保护根本没有区别。虽然有canarry,但是function根本不用返回,也就无所谓了

ZVesper 发表于 2017-5-12 16:10

这简洁的没的说

小飞鸟 发表于 2017-5-12 16:23

无图无真相 楼主尽快上传 避免删帖

52lxw 发表于 2017-5-12 16:31

楼主不厚道啊,直接分享不就行了

kato 发表于 2017-5-12 16:38

楼主,没图很容易被删贴的

T_MAC仔 发表于 2017-5-12 23:38

这道题其实首先应该查看一下程序采用啦那种保护

zdwseed 发表于 2017-5-13 17:12

直接分享更给力啊

niulaoshi 发表于 2017-5-14 20:55

直接分享才正道,

www52pojiecn 发表于 2017-5-30 19:08

谢谢,今天收获很大
页: [1] 2
查看完整版本: pwn小姿势 三&&四