路由

一步一步pwn路由器之路由器环境修复&&rop技术分析

梦想与她 提交于 2020-03-05 23:41:28
前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 拿到路由器的固件后,第一时间肯定是去运行目标程序,一般是web服务程序。我们可以去 /etc/init.d/ 找启动文件,或者看看一些有可能的目录。一般来说路由器的程序很少的情况下是可以直接用qemu运行起来的。我们需要做一些修复的工作,本文会介绍一个常用的方法,后面会分析在 mips uclibc 中常用的 rop 手法。 正文 运行环境修复 由于路由器运行时会去 nvram中获取配置信息,而我们的qemu中是没有该设备,路由器中的程序可能会因为没法获取配置信息而退出。我们可以使用 https://github.com/zcutlip/nvram-faker 配合着设置 LD_PRELOAD 环境变量来使用( 类似于一种 hook )。如果你的mips交叉编译工具链和它脚本里面的不一样就要修改它的脚本,比如 编译后把 libnvram-faker.so 和 nvram.ini 放到 / 目录,然后使用 LD_PRELOAD 来加载。即可 sudo chroot . ./qemu-mips-static -E LD_PRELOAD=/libnvram-faker.so /usr/bin/httpd 如果程序还会在其他地方保错,就要自己分析程序

前端vue部分小结

时光总嘲笑我的痴心妄想 提交于 2020-03-05 19:19:32
对Vue进一步理解 1、Vue的特点(数据的双向绑定和组件化) A.响应式:可以实现数据和视图层的双向绑定,可以只关心数据,试图会自动同步,减少了DOM 操作 B.组件化、模块化:将大片的代码拆分成若干个小的模块,增强了代码的复用性和可读性,便于管理 2、vue与后台交互的方法 Get post put delete Get:将提交的数据放在URL中,即以明文的方式传递参数数据(以?分割URL地址和数据,参数间以&相连接); 因为受URL长度限制,传递的数据量较小,最大不超过2kB; 会产生一个TCP数据包,会把header和data一并发出去,服务器响应200并传回相应的数据 Post:将提交的数据放在请求体中; 传递的数据量较大,一般不受限制,(大小取决于服务器的处理能力); 会产生两个TCP数据包,浏览器会先把header发出去,浏览器响应100(continue)后,浏览器再发送data,服务器响应200,并回传相应的数据 get在浏览器回退的时候是无害的,而post会再次提交请求;get请求参数会被完整的保留在浏览器的历史记录中,而post不会;对于参数的数据类型,Get只接收ASCII字符,而post没有限制;get参数通过URL传递,post放在request body中 Post和get本质上是没有区别的;GET和POST是HTTP协议中两种发送请求的方法

TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议

旧街凉风 提交于 2020-03-05 18:19:45
把这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息。数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据信息。 1.IP协议 IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGCP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制--这被认为是上层协议--TCP或UDP要做的事情。所以这也就出现了TCP是一个可靠的协议,而UDP就没有那么可靠的区别。这是后话,暂且不提 1.1.IP协议头 如图所示 挨个解释它是教科书的活计,我感兴趣的只是那八位的TTL字段,还记得这个字段是做什么的么?这个字段规定该数据包在穿过多少个路由之后才会被抛弃(这里就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64,Tracerouter这个工具就是用这个原理工作的,tranceroute的-m选项要求最大值是255,也就是因为这个TTL在IP协议里面只有8bit。

RIP基础理论篇

眉间皱痕 提交于 2020-03-05 15:03:52
RIP 路由选择信息协议。 基于传闻的协议 。 看似运行rip能获悉菲直连网络的路由,但它并不了解整体网络的连接,只是听众邻居给你发的非直连网络路由。 这种方式有好有坏,好处就是不用但心过多的资源消耗。但邻居告诉你的信息可能是错的,但你无法分辨。 如果是错误信息接收后,你还会转发给你其它的邻居,在数据层面,这组路由器沿着错误的路由信息,来转发数据去往一个目的网络,最后结果是到不了,并且可能会在一组路由器之间打环。 rip版本 V1: 有类, 通告时,路由只会有前缀和度量值 。 只能使用flsm。 广播更新 带有强制性 广播更新会影响整个网络内的所有其它人。当广播更新到达pc连接网络的路由器上,但pc并不需要。会造成一定的资源浪费 有一个更好的优化方式 :叫被动接口 passive-interface,华为叫静默接口 。当一接口被设置成被动接口。他没办法发送任何形式的更新和请求。就不用担心收到任何的rip更新了。通常会给环回口,和连接pc网络的接口设成环回口 **V2:**只支持vlsm,不支持cidr 组播更新 224.0.0.9 *自动汇总对于任何路由选择协议而言不是一件好事,在不连续子网中,导致协议中断。并且自动汇总,在汇总过程中会非常不可控,不精确。尽可能要关闭。 不连续子网是属于同一主类的两个子网,被另外一个网络分割开来。 但有类协议是靠自动汇总吃饭的,在有类环境中

vue路由传参页面刷新参数丢失问题解决方案

折月煮酒 提交于 2020-03-05 13:02:00
最近项目中涉及到跨页面传参数和后台进行数据交互,看到需求之后第一反应就是用路由传参来解决;Vue中给我们提供了三种路由传参方式,下面我们一个一个的来看一下: 方法一:params传参: this.$router.push({ name:"admin",     //这里的params是一个对象,id是属性名,item.id是值(可以从当前组件或者Vue实例上直接取) params:{id:item.id} }) //这个组件对应的路由配置 {   //组件路径 path: '/admin',   //组件别名 name: 'admin',   //组件名 component: Admin, } 通过params传递参数,如果我们想获取id的 参数值,我们可以通过this.$route.params.id这种方式来打印出来就可以得到了;(注意:获取参数的时候是$route,跳转和传参的时候是$router) 方法二:路由属性配置传参: this.$router.push({ name:"/admin/${item.id}", }) //这个组件对应的路由配置 {   //组件路径 path: '/admin:id',   //组件别名 name: 'admin',   //组件名 component: Admin, } 通过路由属性配置传参我们可以用this.$route

Huawei HG556a A版 刷 openwrt

别来无恙 提交于 2020-03-05 05:33:04
一直想玩玩openwrt,调研了一下 HG556a尽管散热很烂,但性价比超高,于是淘宝入手一台A版,A版和C版区别为wifi芯片: 到货后在网上找了几个教程便开始动手刷openwrt,但刷机的过程中还是碰到不少问题。 刷机 无论是 官方教程 还是个人博客的教程都有提到: 断电,按住restart,保持,插电,保持按住restart 10秒以上,只亮 但仅此操作中没有提及HG556a在进入刷机模式后Lan无dhcp和没有无线SSID。另外路由器到手时,默认网关是192.168.0.1,而刷机时是192.168.1.1。在折腾很久很,尝试手动配置IP,并用网线连接笔记本和Lan,才进入刷机界面。 笔记本有线网卡静态IP如下 : 配好后,用有线连上HG556a,测试连通性: 此时方能正常连接HG556a,用浏览器打开固件升级界面 http://192.168.1.1 : 从openwrt官网上下载HG556a的openwrt固件(HG556a A版和C版都使用该固件), 点击下载openwrt-HW556-squashfs-cfe.bin 点击上图中的“选择文件”选中下载好后的固件,点击“update software”,如下图所示 此时, 灯一闪一闪,当 常亮时,表示刷机成功。 登陆 待路由器重启后,保持笔记本和HG556a连接方式不变, 使用 putty 登陆HG556a

TCP成块的数据流

与世无争的帅哥 提交于 2020-03-04 16:08:05
滑动窗口   接收方提出的窗口为提出窗口。 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。 当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存时。 当右边沿向左移动时,我们称之为窗口收缩   由上图可知 发送方不必发送一个全窗口大小的数据。 来自接收方的一个报文段确认数据并把窗口向右边滑动。这是因为窗口的大小是相对于确认序号的。 正如从报文段7到报文段8中变化的那样,窗口的大小可以减小,但是窗口的右边沿却不能够向左移动。 接收方在发送一个A C K前不必等待窗口被填满。 PUSH标志   该标志使发送方使用该标志通知接收方将所收到的数据全部提交给接收进程。这里的数据包括与PUSH一起传送的数据以及接收方TCP已经为接收进程收到的其他数据。   通过允许客户应用程序通知其TCP设置PUSH标志,客户进程通知TCP在向服务器发送一个报文段时不要因等待额外数据而使已提交数据在缓存中滞留。类似地,当服务器的TCP接收到一个设置了PUSH标志的报文段时,它需要立即将这些数据递交给服务器进程而不能等待判断是否还会有额外的数据到达。 慢启动   如果发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。当发送方和接收方处于同一个局域网时,这种方式是可以的

CCF 201403-4 无线网络(100分)

守給你的承諾、 提交于 2020-03-04 05:08:47
问题描述   目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上。任何两个无线路由器只要距离不超过 r 就能互相建立网络连接。   除此以外,另有 m 个可以摆放无线路由器的位置。你可以在这些位置中选择至多 k 个增设新的路由器。   你的目标是使得第 1 个路由器和第 2 个路由器之间的网络连接经过尽量少的中转路由器。请问在最优方案下中转路由器的最少个数是多少? 输入格式   第一行包含四个正整数 n,m,k,r。(2 ≤ n ≤ 100,1 ≤ k ≤ m ≤ 100, 1 ≤ r ≤ 108)。   接下来 n 行,每行包含两个整数 xi 和 yi,表示一个已经放置好的无线 路由器在 (xi, yi) 点处。输入数据保证第 1 和第 2 个路由器在仅有这 n 个路由器的情况下已经可以互相连接(经过一系列的中转路由器)。   接下来 m 行,每行包含两个整数 xi 和 yi,表示 (xi, yi) 点处可以增设 一个路由器。   输入中所有的坐标的绝对值不超过 108,保证输入中的坐标各不相同。 输出格式   输出只有一个数,即在指定的位置中增设 k 个路由器后,从第 1 个路 由器到第 2 个路由器最少经过的中转路由器的个数。 样例输入 5 3 1 3 0 0 5 5 0 3 0 5 3 5 3 3 4 4 3 0 样例输出 2 分析 BFS 代码

thinkphp资源路由

我只是一个虾纸丫 提交于 2020-03-03 19:27:02
Route::resource('test','api/v1.Test'); Route::resource('','api模块/v1文件夹下的控制器Test'); class Test{ public function index(Request $request){ return 'index'; } public function create(Request $request){ return 'create'; } public function read(Request $request){ return 'read'; } } 来源: CSDN 作者: 码林鼠 链接: https://blog.csdn.net/weixin_41254345/article/details/104633603

基于vue的路由权限管理

风流意气都作罢 提交于 2020-03-03 18:09:32
前言 (此项目基于vue-cli跟layuot布局,不过后台系统基本都是这么布局的吧) 现有一个需求,要求把现有管理后台修改为可以根据不同用户呈现出不同的菜单栏(其实就是路由)就如下图 思路 1:先定义基本路由,然后使用router.addRoutes()动态添加相关路由 2:将用户的路由信息存储到localStorage 3:使用router.matcher重置路由 代码 router.js文件:定义基本路由,创建初始路由跟定义重置路由函数 import Vue from 'vue'; import Router from 'vue-router'; Vue.use(Router); // 定义基本路由 export let routes = [ { path: '/login', name: 'login', component: () => import('@/views/Login.vue') }, { path: '*', name: 'notFound', component: () => import('@/views/404.vue') } ]; const createRouter = () => { return new Router({ routes: routes }); }; //创建路由 let router = createRouter(); /