SQL注入
概念:一种将恶意代码插入到程序 SQL 语句中,从而误导数据库执行恶意逻辑的攻击技术。
通过 SQL 注入,攻击者可以达到获取敏感信息,窃取访问权限等目的。
原理:
攻击方式:
搜索注入
报错注入
堆叠查询注入
基于布尔的盲注
基于时间的盲注(延时注入)
HTTP头部注入
宽字节注入
二阶注入
DNSlog外带注入
XSS
概念:目标未对用户从前端功能点输入的数据与输出的内容进行处理或者处理不当,从而导致恶意的JS代码被执行造成窃取用户信息/劫持WEB行为危害的WEB漏洞!
原理:攻击者利用浏览器执行前端代码(HTML、CSS、JavaScript)的特性,将恶意的JavaScript代码插入到页面中,当用户浏览页面时,导致恶意代码被执行。
攻击方式:
1.反射型 xss 攻击的方法为:攻击者通过发送邮件或诱导等方法,将包含有 xss 恶意链接发送给目标用户,当目标用户访问该链接时,服务器将接收该用户的请求并进行处理,然后服务器把带有 xss 恶意脚本发送给目标用户的浏览器,浏览器解析这段带有 xss 代码的恶意脚本后,就会触发 xss 攻击
2.存储型 XSS为持久化攻击,代码是存储在服务器中的数据库里,如在个人信息或发表文章等地方,可以插入代码,如果插入的数据没有过滤或过滤不严,那么这些恶意代码没有经过过滤将储存到数据库中,用户访问该页面的时候,没有进行编码过滤输出到浏览器上,就会触发代码执行,造成 xss 攻击
3.DOM型 xss,DOM 型 XSS 其实是一种特殊类型的反射型 XSS,它是基于 DOM 文档对象模型的一种漏洞。 在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的 Document object 文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过 JS 脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过 DOM 来动态修改页面内容,从客户端获取 DOM 中的数据并在本地执行。基于这个特性,就可以利用 JS 脚本来实现 XSS 漏洞的利用!
三者区别:
CSRF
概念:由于网站对用户网页浏览器的信任导致用户在当前已登录的Web站点的状态下,访问攻击者构造的攻击连接从而执行非本意的操作的漏洞。
原理:
攻击方式:
1. 以受害者名义发送邮件,发消息。
2. 盗取受害者的账号,甚至购买商品,虚拟货币转账。
3. 修改受害者的网络配置(比如修改路由器DNS、重置路由器密码)。
4. 网站后台创建管理员用户,破坏网站,获取服务器权限等。
SSRF
概念:由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发送请求,并返回对该目标地址请求的数据的Web安全漏洞!
原理:
攻击方式:
1.访问内部资源:攻击者通过在目标应用程序中构造恶意请求,使其发起针对内部网络的请求。
2.攻击内部系统:攻击者可以通过SSRF攻击利用受害者服务器作为跳板攻击其他系统。
3.绕过访问控制:攻击者可以利用SSRF漏洞绕过访问控制,直接访问目标系统。
4.DOS攻击:攻击者可以通过SSRF攻击使目标服务器发起大量的请求,从而导致拒绝服务(DoS)状态。
5.利用其他漏洞:攻击者可以将SSRF与其他漏洞结合使用,以增强攻击效果。
CORS
概念:跨域资源共享,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通,它允许浏览器向跨域服务器发出XMLHttpRequest请求,从而克服AX只能同源使用的限制。
原理:第三方网站生成访问控制策略,指定用户浏览器放宽SOP的限制,实现与指定的目标网站共享数据。
CORS跨域漏洞
概念:因为同源策略的存在,不同源的客户端脚本不能访问目标站点的资源,如果目标站点CORS配置不当,没有对请求源的域做严格限制,导致任意源都可以访问时,就存在cors跨域漏洞问题。
原理:攻击者可以利用Web应用对用户请求数据包的Origin头校验不严格,诱骗受害者访问攻击者制作好的恶意网站,从而跨域获取受害者的敏感数据。
攻击方式:
构造恶意的html页面,利用链接诱导受害者进行点击,从而获取受害者的敏感信息
JSONP
概念:JSONP是JSON with padding(填充式JSON或参数式JSON)的简写,是基于JSON格式达的为解决跨域请求资源而产生的解决方案。
原理:他实现的基本原理是利用的script标签的src属性不受同源策略影响的特性,来跨越获取数据。
说人话就是:可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
攻击方式:
构造恶意的html页面,利用链接诱导受害者进行点击,从而获取到受害者的敏感信息
文件包含漏洞
概念:在PHP程序中使用文件包含的对象可以被前端的用户控制且没有经过过滤或严格的定义,用户可以将其他的文件作为参数带入到PHP代码中解释执行,从而造成敏感信息泄露/程序文件读取/GetShell等危害的漏洞。
原理:在应用程序中未正确过滤用户控制的文件路径,并将用户提供的输入直接或间接地包含在动态文件包含语句中。
攻击方式:
1. 本地文件包含(Local File Inclusion,LFI)攻击:攻击者通过构造恶意请求,直接或间接地包含服务器上的本地文件。如果攻击成功,攻击者可以读取敏感文件的内容,如配置文件、用户凭证、日志文件等。有时候攻击者甚至可以通过修改包含的文件来达到任意代码执行的目的。
2. 远程文件包含(Remote File Inclusion,RFI)攻击:攻击者通过构造恶意请求,将远程服务器上的文件包含到应用程序中。攻击者通常会在远程服务器上放置恶意脚本,然后通过文件包含漏洞来执行这些恶意脚本。这使得攻击者能够在目标服务器上执行任意的代码,并可能导致服务器完全被控制。
文件上传漏洞
概念:由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。
原理:网站web应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型,此时攻击者就可以上传一个webshell到一个web可访问的目录上,并将恶意文件传递给PHP解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。
攻击方式:
寻找测试网站的文件上传的模块,常见:头像上传,修改上传,文件编辑器中文件上传,图片上传、媒体上传等,通过抓包上传恶意的文件进行测试,上传后缀名 asp php aspx 等的动态语言脚本,查看上传时的返回信息,判断是否能直接上传,如果不能直接上传,再进行测试上传突破,例如上传文件的时候只允许图片格式的后缀,但是修改文件时,却没有限制后缀名,图片文件可以修改成动态语言格式如php,则可能访问这个文件的 URL 直接 getshell,可以控制网站。
文件解析漏洞
概念:由于中间件错误的将任意格式的文件解析成网页可执行文件,配合文件上传漏洞进行GetShell的漏洞!
原理:由于网站管理者操作不当或者web服务器自身的漏洞,导致一些特殊文件被IIS,apache,nginx或者其他web服务器在某种情况下解析成脚本文件去执行。
攻击方式:
1. 目录遍历攻击:攻击者利用文件解析函数未正确过滤用户输入的路径导致的漏洞,尝试获取系统中的敏感文件。攻击者可能使用"../"等字符序列来跳出当前目录,访问系统中的其他目录和文件。
2. 文件包含漏洞:攻击者通过向应用程序提交恶意请求,利用应用程序在包含外部文件时未进行恰当验证的漏洞。攻击者可能通过在URL参数、请求头部或配置文件中注入恶意文件路径来实现对恶意代码的执行。
3. 远程文件包含(RFI)攻击:攻击者通过利用包含远程文件的功能,向应用程序注入恶意代码。攻击者可以通过提供指向恶意脚本的远程URL,使应用程序将该脚本下载并在服务器上执行。
4. 本地文件包含(LFI)攻击:攻击者通过注入文件路径或恶意代码,利用应用程序在包含本地文件时未进行适当验证的漏洞。攻击者可能访问系统中的敏感文件、加密密码、配置文件等。
5. Null字节注入攻击:攻击者通过在文件名中插入空字节(0x00),欺骗解析函数将文件截断,从而绕过文件扩展名控制,执行恶意代码。
反序列化漏洞
概念:当程序在进行反序列化时,会自动调用一些函数,例如__wakeup(),__destruct()等函数,但是如果传入函数的参数可以被用户控制的话,用户可以输入一些恶意代码到函数中,从而导致反序列化漏洞。
原理:
1. 序列化和反序列化:在编程中,对象可以通过序列化转换为字节流,以便在不同的系统之间传输或存储。序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。
2. 反序列化漏洞:反序列化漏洞通常出现在输入信任的序列化数据上。攻击者可以构造包含特定有效负载的恶意序列化数据,并将其提供给目标应用程序。
3. 不安全的反序列化:应用程序未正确验证或过滤反序列化数据,导致攻击者能够执行恶意操作。这可能是由于应用程序信任反序列化数据,而没有恰当地验证其内容或结构。
4. 恶意负载执行:攻击者可以在恶意序列化数据中嵌入可执行代码。当应用程序反序列化此数据时,恶意代码将被执行,从而使攻击者能够执行任意操作,包括远程代码执行、拒绝服务攻击、数据泄露等。
5. 特定漏洞类型:具体的反序列化漏洞类型包括Java中的Java反序列化漏洞(例如Apache Commons Collections漏洞)、PHP中的PHP反序列化漏洞(例如PHP对象注入漏洞)。这些漏洞通常是由于设计缺陷或使用不当的反序列化库、框架或功能引起的。
攻击方式:
1. 参数污染攻击:攻击者可以通过修改应用程序或请求的参数,将恶意的序列化数据传递给应用程序。应用程序在反序列化时,会解析并执行这些恶意数据,导致安全漏洞。
2. 远程代码执行(RCE):攻击者通过传递经过特殊构造的恶意序列化数据到应用程序,成功执行远程代码。这使得攻击者可以获取应用程序的控制权,并执行任意操作。
3. 敏感信息泄露:在某些情况下,应用程序在执行反序列化过程中,可能会暴露敏感信息。攻击者可以通过构造特定的序列化数据,使得应用程序在反序列化时泄露敏感数据。
4. 服务拒绝(Denial of Service,DoS)攻击:攻击者可以构造恶意的序列化数据,使目标应用程序在反序列化过程中消耗大量计算资源或内存,导致系统崩溃或无法响应正常请求。
5. 链式反序列化攻击:攻击者利用复杂的对象关联和嵌套,通过构造恶意的序列化数据,触发多次反序列化操作。这些操作可能会引起应用程序中的意外行为,导致安全漏洞。
命令执行漏洞
概念:由于PHP程序未对前端用户提交的数据进行严格过滤或限制,从而导致传入的字段被带入到命令执行函数中作为参数执行,造成GetShell或接管服务器权限等高危害的Web漏洞!
原理:服务端没有对执行命令的函数做出过滤导致的。我们可通过编写一些系统函数来输入疑似存在命令执行接口的地方,来检测是否此接口是否存在命令执行漏洞。
攻击方式:
1. 输入验证不足:当用户输入被直接传递给系统命令时,没有进行充分的输入验证和过滤,攻击者可以通过在输入中插入特殊字符或命令注入,执行任意命令。
2. 操作系统调用:当程序在执行命令时使用操作系统的调用函数,但没有正确验证和过滤输入数据,攻击者可以通过构造恶意输入来执行任意系统命令。
3. Shell接管:当程序在执行命令时,通过使用系统调用函数将命令传递给一种外部程序解释器,如Shell,但在传递命令时,未正确过滤和验证输入,攻击者可以通过构造特殊字符或命令注入来接管Shell并执行任意命令。
4. 文件包含漏洞:当应用程序允许通过用户输入包含外部文件时,如果没有正确验证和过滤输入,攻击者可以构造恶意输入来包含并执行任意命令。
5. 操作系统环境变量:当应用程序使用操作系统的环境变量来执行命令时,如果没有正确验证和过滤环境变量,攻击者可以通过修改环境变量的值来执行任意命令。
代码执行漏洞
概念:由于PHP程序未对前端用户提交的数据进行严格过滤或限制,从而导致传入的字段被带入到代码执行函数中作为参数执行,造成GetShell或接管服务器权限等高危害的Web漏洞!
原理:由于开发者在编写代码时没有预见到或考虑到攻击者可能利用输入来执行恶意操作的情况,或者在编写过程中没有充分地进行输入验证、数据过滤和安全控制,从而导致了漏洞的产生。
攻击方式:
1. 远程代码执行(Remote Code Execution,RCE):攻击者通过输入恶意数据触发目标系统上的代码执行,进而控制目标系统。常见的远程代码执行漏洞包括未经正确过滤的用户输入传递给命令执行函数、不安全的反序列化等。
2. SQL 注入(SQL Injection):攻击者通过在用户输入中注入恶意的 SQL 语句,绕过输入验证和过滤,从而执行恶意代码。如果目标系统没有正确处理用户输入的 SQL 查询,就容易受到 SQL 注入攻击。
3. 命令注入(Command Injection):攻击者通过在用户输入中注入恶意的命令,绕过输入验证和过滤,从而在目标系统上执行任意命令。常见的命令注入漏洞出现在系统调用、Shell 命令执行、远程管理协议等地方。
4. 文件包含漏洞(File Inclusion Vulnerabilities):攻击者通过包含恶意文件的方式执行代码。这种漏洞通常出现在动态包含文件的语言中,如 PHP。如果目标系统未对用户输入进行适当校验和过滤,攻击者就可以通过构造恶意的文件路径或远程 URL,包含并执行恶意文件。
5. eval() 函数调用:如果目标系统的代码中使用 eval() 函数动态执行用户输入的代码,而没有对输入进行适当处理和验证,攻击者就可以通过注入恶意代码利用这个漏洞执行任意代码。
6. 反序列化漏洞(Deserialization Vulnerabilities):攻击者可以通过构造恶意的序列化数据来实现远程代码执行。当目标系统未正确验证和过滤反序列化的数据时,攻击者可以注入恶意代码。
常见的执行命令, 获取敏感信息,写入 web 后门等
webshell免杀
概念:攻击者通过各种技术手段绕过安全软件的检测和防御机制,使其植入的Webshell能够在目标系统中长期存在而不被发现。
原理:
通过对Webshell进行修改或加密,使其能够绕过安全软件的检测和防御机制。
1. 代码混淆:通过对 webshell 代码进行混淆,使其难以被静态分析引擎或模式匹配规则识别和检测。混淆可以包括变量名、函数名、常量字符串等的更改、添加冗余代码、使用编码或加密等手段。
2. 动态加载:将 webshell 拆分为多个模块,通过动态加载和组合来还原完整的功能。这样做可以使原有的 webshell 样本变得不连续,使其更难被基于特征匹配的检测机制检测到。
3. 命令执行绕过:在执行命令时,采用一些绕过技巧来规避安全软件的检测和防御。例如,利用操作系统的特殊命令、检测环境是否在沙盒内、模拟用户登录等。
4. 数据包加密:对 webshell 和与其交互的数据进行加密,使其在传输过程中难以被网络安全设备或入侵检测系统(IDS/IPS)检测到。
5. 反调试和反追踪:在 webshell 中添加反调试和反追踪的代码,以防止安全人员对其进行分析和调试。
6. 文件伪装:将 webshell 文件伪装成系统或合法应用程序的文件,使其更难被安全软件或系统文件扫描检测到。
攻击方式:
1.代码混淆和加密:攻击者使用代码混淆和加密技术,使Webshell的代码难以被识别和分析。这可以包括使用多种编码、加密算法和混淆工具,使Webshell的代码变得无法直接识别和理解。
2.变形和变量替换:攻击者通过改变Webshell的代码结构和变量命名,使其与常见的安全检测规则和模式不匹配。这样可以绕过检测系统的静态和动态分析。
3.动态生成和反射执行:攻击者使用动态代码生成和反射执行技术,使Webshell的代码不存储在磁盘上,而是在运行时动态生成并执行。这种方式可以绕过静态文件扫描和恶意代码检测。
4.高级免杀工具和技术:攻击者使用高级的免杀工具和技术,例如使用自定义的加密算法、虚拟化技术、多级反射执行等,以提高Webshell的免杀能力。这些工具和技术通常能够绕过常见的安全防御工具和规则。
5.文件格式的利用:攻击者利用一些特定文件格式的漏洞来传播和执行Webshell。例如,利用图片或文档文件格式的漏洞,将Webshell嵌入其中,从而绕过文件扫描和安全检测。
6.时间延迟和睡眠机制:攻击者通过在Webshell代码中添加时间延迟和睡眠机制,使Webshell的活动在特定时间范围内变得较为稀少,从而减少被检测到的可能性。