蓝狐狸
生活并不会总被预料,有意外才是生活。生活并不会总被预料,有意外才是生活。
蓝狐狸 发布于 收录于 漏洞复现 漏洞复现(Vulhub靶场) 进入到Vulhub靶场的/vulhub/webmin/CVE-2019-15107目录下,运行docker-compose up -d命令启动靶场。
输入用户名和密码,使用burp进行抓包。
修改数据包的请求地址为/password_change.cgi,请求体payload改为user=rootxx&pam=&expired=2&old=test|id&new1=test2&new2=test2,id 是要执行的命令。
发送请求,可以在响应体中找到命令执行成功的响应数据。
使用docker-compose down命令移除环境。
msf利用 使用https://vulfocus.cn/在线靶场,启动环境,访问漏洞地址:https://123.58.224.8:48832/,注意要加https进行访问
启动vps上的msf,进入命令行模式,搜索webmin相关的poc
这里使用第十个脚本,设置脚本参数
设置好参数后,查看一下
没问题后,输入run,可以成功
蓝狐狸 发布于 收录于 默认分类 关闭 win 10 (专业版) 系统更新,只在专业版win10测试过可行。其它版本不清楚。
打开组策略,按图找到 Windows 更新。
有三个配置需要更改
1)配置自动更新:禁用掉
2)指定 Intranet Microsoft 更新服务位置:启用,修改网址。
3)不要连接任何 Windows 更新 Intranet 位置:启用
三个选项设置好后,更新就会因无法联网而终止。记得重启
蓝狐狸 发布于 收录于 默认分类 设置虚拟机静态ip保持不变 宿主机更换网络后,ip 地址变动,同时虚拟机也会变动 ip 地址,如果是笔记本的话,频繁更换网络导致虚拟机地址也要频繁修改,很麻烦。
虚拟机在桥接模式下,通过 dhcp 获得一个和宿主机同网段的一个 ip,二者可以互通,可以正常访问互联网。但是如果宿主机换了一个网络,例如从 192.168.31.96 变成了 192.168.32.196,那么虚拟机的 ip 地址也要变为同 32 网段的 ip 地址才可以进行互通和上网。每次宿主机切换网络,虚拟机的地址也要跟着变动,这很麻烦,因为每次都有重新确认虚拟机新分配的 ip 地址。
我希望虚拟机的 ip 地址不变,同时还可以正常互通和上网。无论宿主机如何切换网络,虚拟机的地址永远都不会变动。
实际操作 有两台主机,宿主机和虚拟机处于同一网络,ip 地址如下(桥接模式)
宿主机 ip:192.168.31.96
虚拟机 ip:192.168.31.64
二者之间正常通信,且均可以访问互联网。如下图
现在,我们想要切换网络时保持虚拟机的ip地址不变动,进行以下设置
点击 VMware 的编辑-虚拟网络编辑器,点击更改设置。
点击添加网络
添加一个网络,这里我用的 VMnet17,点击确定。
取消勾选 DHCP 服务,同时将子网段设一个你想要的值,这里使用了 17 网段,点击确定即可。
打开笔记本宿主机的网络设置,可以看到新添加的 VMnet17 网卡
选择无线网卡,右键-属性-共享-选择 VMnet17,点击确定
点击确定后有一个弹窗,点击是,他会将 VMnet17 网卡改为 137 网段,我们需要将它改为 17 网段,就是自定义的网段。
将 VMnet17 网卡改为如下所示,将 137 改为 17,添加 dns。点击确定
将虚拟机的网络连接改为自定义,启动虚拟机。
配置虚拟机的 ip 地址:192.168.17.100,子网掩码,网关(VMnet 17 网卡的地址192.168.17.1)和 dns(同 192.168.17.1 就可以了)。保存即可
蓝狐狸 发布于 收录于 默认分类 前段时间偶然看到一篇关于accessToken和refreshToken的讨论帖,了解到了这两个Token的区别,还顺带了解了一些关于OAuth2.0标准的内容,简单记录一下,方便后面复习。本文只是写给我自己看的,因为我也是根据网上的文章自己总结的,可能有误,可以直接去看网上写得更详细的文章
Cookie、Session和Token 参考文章:一文讲透Token与Cookie、Session的区别
为啥会有这几个东西呢,是因为http协议是无状态的协议,两个http请求之间没有联系,假如有很多个http请求,我们该如何区分这些个请求是属于哪个用户的,这就用到了我们提到的Cookie、Session和Token这些东西了。其实Cookie、Session、Token就是一个身份标识,通过这个身份标识,来区分http请求。
Cookie、Session和Token这三者的工作原理、区别、优缺点推荐看我上面参考的那篇文章,写得很好,或者自行百度。
关于Token jwt:jwt只是实现Token的一种方式,你也可以用其他的方式来实现Token。例如对称加密算法或自研的加密算法。
accessToken和refreshToken是为了解决token在实际使用中的一些问题。关于这二者可以参考:Access Token 与 Refresh Token或自行百度
accessToken:一个临时的token,有效时间很短,就是我们用来访问服务器资源所使用的那个token。
refreshToken:用来刷新accessToken的。当accessToken过期或者快要过期的时候,会用refreshToken向服务器获取一个新的accessToken。
为啥要用两个Token呢,这多麻烦啊。我在知乎上看到这个帖子jwt续签为什么要使用双token,没看明白啊,感觉单个token也可以啊?,或许可以解答这个疑惑。
以下是我自己的理解:
1)单独一个Token是可以的(也就是accessToken),token过期后,让用户在重新登录,在给他一个不就好了。这样的话,就需要把token的有效时间设置的长一点,不然用户老是频繁登录很影响使用体验。要避免频繁登录的话,就需要使用到refreshToken了。当accessToken过期后,使用refreshToken重新获取accessToken,将accessToken刷新,这样用户就不用登录了。所以refreshToken的有效时间大于accessToken的有效时间才行。
2)关于安全方面问题,双token这个东西是在OAuth2.0标准中所用到的。*如果只是在用户(客户端)和服务端两者之间使用的话,它并没有安全防护的作用,或者说,它并不是为了解决token安全问题而被使用的,它是为了解决用户频繁登录而被使用的。*但如果是在OAuth2.0标准中,它确实是为了解决安全问题而被使用的,但它不是解决token的安全问题,而是解决安全授权问题,例如我们常用的第三方登录。
关于OAuth 建议自行百度看看什么是OAuth标准,推荐:白话让你理解什么是oAuth2协议和非常详细!深入理解OAuth原理和实践细节两篇文章,写得很好。
画了个简单的图
这个授权流程在OAuth 2中被称为授权码模式(authorization code grant),其命名的原因是,应用程序使用授权码来向授权服务器申请访问令牌/刷新令牌。
有几点需要注意:
1)第三方授权服务器给的token令牌就是:accessToken和refreshToken
2)refreshToken可以获取新的accessToken,所以为了安全,refreshToken一般只在服务器之间使用安全的https进行传递。怎么个意思呢,就是应用APP那里其实是两个部分,一个是APP的客户端(前端),一个是APP的后端,它们之间的请求是APP前端-APP后端-授权服务器,refreshToken自授权服务器传递到APP后端服务器上,就不往APP客户端传了,降低refreshToken被泄露的风险。
OAuth2.0有四种模式,最主要的还是授权码模式,其它三种感觉只是变了变主体,还是同一个思路。理解授权码模式就可以了。
其实整个应用码授权模式还有很多知识没有详细说明,比如3.2中app的认证信息是什么,如何具体实现这个流程,有哪些条件等等,建议看看非常详细!深入理解OAuth原理和实践细节这篇文章,利用第三方github登录详细解释了整个过程,值得一看。我就是看这个明白的。
最后 以上内容比较粗糙,因为我只是记个大概就行,真要详细去学的话还是去看看RFC文档或者其他人的文章吧。
参考文章:
https://zhuanlan.zhihu.com/p/625995458
https://www.cnblogs.com/blowing00/p/4524132.html
https://www.zhihu.com/question/506320859/answer/2913603859
https://zhuanlan.zhihu.com/p/92051359
https://zhuanlan.zhihu.com/p/380561372
https://www.cnblogs.com/Nyan-Workflow-FC/p/11082590.html
蓝狐狸 发布于 收录于 Linux 前言 最近遇到了Linux磁盘扩容的问题,磁盘扩容有好几种情景,因为之前没涉及到,踩了不少坑。在此记录一下,方便后续查阅。
假设有一块磁盘A,容量是100G。我分了20G用来安装Linux系统,剩下的没有动。随着时间的增长,20G不够用了,我可以将磁盘A剩下的80G分给Linux系统,也可以在加装一块磁盘B分给Linux。两种方式都可以实现扩容的目的,但是实现的手段可以分为两种:lvm和非lvm
非lvm方式,就是一般的磁盘挂载,将新硬盘分区并格式化后,挂载到Linux系统的某个文件夹上去,实现磁盘的扩容,但是这种方式一个文件夹只能挂载一个磁盘,如果想要将两块磁盘同时挂载到同一个文件夹上就需要用到lvm进行磁盘管理。
关于什么是lvm可以百度查询。简单来说,lvm可以将多个磁盘视为一个逻辑磁盘。假如有两块磁盘A和磁盘B,使用lvm的话,可以将这两个磁盘看做是一个逻辑磁盘a,我们只需对逻辑磁盘a进行操作,将其挂载到Linux目录下就行,如果后续要增添一块磁盘C,只需要将磁盘C加入逻辑磁盘a就行。以上说法并不准确,但是便于理解。
一点基础知识 简单的磁盘相关命令
1 2 3 df -h # df主要是检查文件系统磁盘占用情况 fdisk -l # fdisk一般用来磁盘分区,也可以用来查看磁盘分区情况。-l,列出所有分区表 lsblk # 用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,这个命令很好用,因为可以让电脑上的磁盘和分区信息很清晰。 lvm相关了解
PV(Physical Volume): 物理卷, 处于LVM最底层, 可以是物理硬盘或者分区;
PP(Physical Extend): 物理区域, PV中可以用于分配的最小存储单元, 可以在创建PV的时候指定, 如1M, 2M, 4M, 8M…..组成同一VG中所有PV的PE大小应该相同;
VG(Volume Group): 卷组, 建立在PV之上, 可以含有一个到多个PV;
LV(Logical Volume): 逻辑卷, 建立在VG之上, 相当于原来分区的概念, 不过大小可以动态改变.
使用lvm进行磁盘扩容 参考:https://www.cnblogs.com/lijiaman/p/12885649.html,写的很详细,推荐
注意:在安装Linux系统的时候,有一个配置磁盘分区属性,默认是使用整个磁盘,但是我这里使用的是第二个选项lvm进行的创建。非lvm的磁盘是无法与lvm的磁盘进行逻辑合并的。
使用fdisk进行分区操作 先查看整体磁盘分区情况
sda磁盘在系统安装是采用了lvm,所以才有蓝色框选的两个逻辑卷,否则是没有的。
sdb是未被使用的。将sdb进行分区并格式化
输入fdisk /dev/sdb,回车,然后输入m,回车
输入n并回车,n是“new”新建分区的意思
使用fdisk再次进行查看
磁盘分区之后,磁盘id为83,如果要使用逻辑卷管理,需要将id改为8e,才能创建物理卷。
输入fdisk /dev/sdb,回车,然后输入m,回车,输入t,选择分区1,输入id值8e,输入w保存
最终修改完成
使用lvm进行 先查看当前的一些信息
物理卷
卷组
逻辑卷
将sdb1创建物理卷:pvcreate /dev/sda3
将添加新的物理卷,加载到debian10-vg卷组,使用vgextend debian10-vg /dev/sdb1命令。
蓝狐狸 发布于 收录于 默认分类 安装zsh(Debian10) 查看当前 shell:echo $SHELL
查看系统中安装了哪些 shell:cat /etc/shells
切换 shell 环境:chsh -s /bin/zsh
安装:apt install zsh
安装 zsh 插件 zsh-autosuggestions:这个是自动建议插件,能够自动提示你需要的命令。根据历史命令提示 zsh-syntax-highlighting:这个是代码高亮插件,能够使你的命令行各个命令清晰明了。 zsh-completions:命令自动补全。感觉不是很好用,看个人情况,不推荐安装。 1 2 3 4 5 6 7 8 git clone https://github.com/zsh-users/zsh-autosuggestions /usr/local/zsh-plugins/zsh-autosuggestions # 自动补全 git clone https://github.com/zsh-users/zsh-syntax-highlighting /usr/local/zsh-plugins/zsh-syntax-highlighting # 语法高亮 git clone --depth=1 https://github.com/zsh-users/zsh-completions.git /usr/local/zsh-completions # 命令选项自动补齐,不太好使 # 我fork的仓库,使用ssh连接 git clone git@github.com:BluefoxQAQ/zsh-autosuggestions.git /usr/local/zsh-plugins/zsh-autosuggestions git clone git@github.com:BluefoxQAQ/zsh-syntax-highlighting.git /usr/local/zsh-plugins/zsh-syntax-highlighting git clone git@github.com:BluefoxQAQ/zsh-completions.git /usr/local/zsh-completions zsh的配置 这是我目前正在使用的zsh配置文件,可以直接复制使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 # PS1='[\[\e[1;35;1m\]\t \[\e[1;32;1m\]\u@\H \[\e[1;33;1m\]\w] \n \$ \[\e[1;37;1m\]' # 废弃,不好看 # PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' # bash用这个 # export PS1="%10F%m%f:%11F%1~%f \$ " # zsh用这个 # export PS1='%F{#00ffff}%B%n@%m%b%f:%B%F{#00afff}%~%f%#%b ' # zsh用这个 # export PS1=$'%F{#00ffff}%B%n@%m%b%f:%B%F{#00afff}%~%f%b\n>%# ' # zsh用这个 export PS1=$'%F{#00ffff}%B%n@%m%b%f:%B%F{#00afff}%~%f%b\n %F{#ffff00}>%#%b%f ' # zsh用这个,双行 alias ls='ls --color' alias grep='grep --color=auto' export GREP_COLOR="1;31" export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.
蓝狐狸 发布于 收录于 默认分类 Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。我在学习Swing时遇到了许多困惑,在这里记录一下,以便后续回顾。
JFrame和JPanel详解 刚学习的时候,跟着老师敲,但没有理解这两个东西,导致后面一直搞不清楚Swing的逻辑,查了些资料,现在有点明白了。
举一个不太准确的例子:假设Swing编程就像是我们在画画,我们画的圆圈,方块,文字就相当于Swing中的一个个组件。JFrame相当于一块透明的玻璃板,我们是没有办法在上面直接画画,JPanel相当于一张白纸,把这张白纸放到玻璃板上,就可以在纸上画出圆圈,方块和文字了。
JFrame是不能直接放置组件的,因为JFrame 不是一个容器,它只是一个框架。JFrame 有一个 Content Pane,窗口能显示的所有组件都是添加在这个 Content Pane 中。JFrame 提供了两个方法:getContentPane 和 setContentPane 就是用于获取和设置其 Content Pane 的。
先说setContentPane方法,常见于这样写:建立一个Jpanel中间容器,把组件添加到容器中,用setContentPane方法把该容器置为JFrame的内容面板
1 2 3 4 5 6 7 8 9 10 11 12 13 public class MyFrame3 extends JFrame { public MyFrame3(String tittle) { super(tittle); //创建一个面板,作为容器绑定到窗口上,这是不可见的 JPanel jPanel = new JPanel(); this.setContentPane(jPanel); JButton button = new JButton("按钮"); jPanel.add(button); this.setVisible(true); // 设置可见 } } 再说说getContentPane方法,常见于这样写:不用建立中间容器,直接用getContentPane().add()方式添加组件。getContentPane是得到了jframe的内容面板。
1 2 3 4 5 6 7 public class TestFrame extends JFrame{ public TestFrame() { JLabel label = new JLabel("lableTest"); getContentPane().
Docker 安装 下载: https://docs.docker.com/get-docker/
Win 10(家庭版) 需要安装Hyper-V才可以。将如下代码添加到记事本中,并另存为 Hyper-V.cmd 文件。右键以管理员身份运行,然后等待安装,最后输入 Y 进行重启即可
1 2 3 4 5 pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" del hyper-v.txt Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL 重启完后双击 docker 安装包安装,再次重启,启动 docker,可能提示 wsl 版本低,wsl --update
Win 10 (专业版) 启用Hyper-V进行安装:在控制面板—启用或关闭 Windows 功能,勾选Hyper-V和容器两个选项,两个都要,不然报错。然后重启,双击 exe 文件。
注意:如果使用安卓虚拟机的话,二者会有冲突。安卓虚拟机需要关闭 Hyper-V,docker 需要开启 Hyper-V。有文章说在控制面板—启用或关闭 Windows 功能—启用 Windows 虚拟机监控程序平台,勾选这个可以解决冲突,但我试了没有用。我用夜神模拟器有冲突,改用蓝叠 4 模拟器(hyper-v)版本
配置阿里云镜像: https://cr.
蓝狐狸 发布于 收录于 默认分类 安装部署 安装NodeJs:https://nodejs.org/en/download
安装Git:https://git-scm.com/download/win
安装hexo,输入以下命令
1 2 3 4 npm install hexo-cli -g # 安装hexo脚手架 hexo init blog # blog是自定义文件夹名字 cd blog hexo server # 启动hexo 注意:网络问题可能有点慢。
安装插件(看个人情况安装)
1 2 3 4 5 6 7 8 npm install hexo-renderer-pug hexo-renderer-stylus --save # 必须安装,不然无法运行,会报错 npm install https://github.com/BluefoxQAQ/hexo-asset-image.git --save # 插入图片用的插件 npm install hexo-generator-search --save # 安装搜索插件 # 主题使用本地静态js,cdn配置相关,可选。需要和主题版本最新,否则可能报错。见下文butterfly主题配置cdn npm install hexo-butterfly-extjs --save npm install hexo-deployer-git --save # 安装github部署插件 npm install hexo-deployer-ftpsync --save # 安装FTP部署插件 npm install https://github.
蓝狐狸 发布于 收录于 安全工具 1. 下载安装 下载地址: https://github.com/maurosoria/dirsearch
进入下载解压后的目录中,打开cmd,运行安装脚本
1 python setup.py install 运行如下命令安装用到的python库,可能需要先升级pip
1 pip3 install -r requirements.txt 2. 目录结构 其中,db文件夹为自带字典文件夹;reports为扫描日志文件夹;dirsearch.py为主程序文件 ;
安装完成后将目录地址改为主程序解压地址,使用管理员cmd启动dirsearch。
3. 常用命令参数 注意:在做扫描时太快会扫不出来
格式: python dirsearch.py 参数
常用参数列表:
-c:指定cookie扫描
dirsearch -u http://127.0.0.1 -c “user=Mo60;”
-e:指定需要扫描的文件名 例如:-e php 如果不知道即所有 -e *
dirsearch -u http://127.0.0.1 -e jsp
-s:每一秒扫描一次
dirsearch -u http://127.0.0.1 -s 1
-t:指定线程数(默认为10)(如果扫不出来就把线程弄的越低越好0.5也可以)
dirsearch -u http://127.0.0.1 -t 2
-w:指定自定义的字典文件路径
dirsearch -u http://127.0.0.1 -w /root/php.txt
-x:排除的响应状态码(以逗号分隔,支持指定范围) 如(-x 301,500-599)
-i:保留的响应状态码(以逗号分隔,支持指定范围) 如(-i 200,300-399)
–random-agents:使用随机ua头