HW学习笔记

栈库分离方法注意事项:

    所有用户输入数据需要进行分离过滤,不能遗漏、选择安全的过滤函数 如 mysql_real_escape_string(),避免过滤不严格导致注入

   SQL查询模板需要设计安全,米面语义可以被注入数据改变,函数Mysql_query() 等执行SQL预警也需要参数化,避免拼接导致注入

   

使用数据库提供的预编译语句可以更好的实现栈库分离,SQL栈库分离方法是简单的有效的SQL防注入防御方法,但是需要再设计和开发过程总妥善的处理。

SQLmap流量特征,大量SQL请求,SQlmap需要向目标网站发送大量SQL请求来检测和利用收sql注入漏洞,产生大量包含sql关键字的HTTP请求。;

定时间隔,sqlmap进行检测时,两个HTTP请求之间的时间间隔通常为1-3秒,利用漏洞阶段,如果检测到延迟注入,时间间隔会增加,固定的时间间隔是个重要的特征。

HTTP请求方法,SQLmap使用GET  POST方法进行检测,如果漏洞出现在cookie参数中,会使用cookie参数进行检测。

变化的参数,SQLmap会使用常见的SQL注入 点   如   ID    query    name等参数进行检测,这些参数值会不断变化用于构造SQL逻辑。

恶意载荷:sqlmap加测请求中的参数值会包含大量的SQL相关的关键字,如  select  union   database() user() 等,这是重要的特征。

页面差异: 如果目标网站存SQL注入漏洞,sqlmap 发送请求会导致网页返回结果产生差异,通过比较正常页面的注入的差异可以检测到sqlmap的攻击活动。

请求来源:sqlmap 支持代理和tor进行隐藏检测,如果观测到大量的SQL注入请求来自同一个代理或者Tor节点,这个特征也可以是为sqlmap攻击的判断依据之一

WAF拦截:如果这个网站启用了WAF防护,SQlmao的大部分请求会被WAF规则拦截,通过分析拦截请求中的特征可以判断出使用了sqlmap工具

持续的时间: sqlmap 的整个检测和利过程需要持续一定的时间,通常在30min,该时间特征也可以作为判断的依据。

Shiro 反序列化防御:过滤cookie过长的请求: 主要原因有:

        Shiro使用了commons-beabutils畸形对象的序列化与反序列化操作。    而Commons-beanutils在1.8.3之前的版本存在反序列化漏洞,攻击者可以构造特殊的序列化数据利用这个漏洞执行任意代码。

        Shiro核心组件Subject的创建过程需要畸形对象反序列化操作,攻击者可以在一些可控的输入点 cookie中注入恶意序列化数据,在Subject创建过程中触发  

 

nmap

nmap 探测机制,nmap在对主机执行扫描之前,会发送一个ICMP包,谈探测远程主机是否存活,如果又返回的话开始扫描,如果没有返回则不执行扫描。

菜刀:使用base64加密的方式发送给“菜刀马”的指令,其中关键的paylaod 1 和2 名字可以换

蚁剑的特征:  

       默认的USER-agent请求头是 antwordxxx ,但是可以通过 /modules/request.js 文件中的请求UA绕过,其中流量最明显的特征@ini_set("display_error",'0")这段底阿妈基本是所有WEbshell客户端连接PHP类WEbshell都有一种代码, 蚁剑混淆加密还是有一个比较棉线的特征,参数为大多 "0x....=" 这种形式 ( 下划线可替换  )所以可以0x......= 开头的参数名也很可能就是恶意流量。

冰蝎的特征:  

 

POST请求: 

应急响应:

网站被挂马——

取证:  等了服务器,备份,检查服务器敏感目录,查毒,用户后缀等属性,调取日志

处理: 恢复备份 (快照回滚最近一次,确定入侵防方法,漏洞检测进行修复)

溯源: 查入侵IP, 入侵方法(网络攻击事件的确定)

记录:归档-预防事件监测——恢复跟踪,记录漏洞应用等其他安全。   

 

 

排查:

     cmd输入lusrmgr.msc命令查看服务器是否存在隐藏账号、克隆账号结合日志,查看管理员登录时间,用户名是否存在异常

     检查异常端口、进程 检查端口连接情况,是否有远程连接、可疑连接:a、netstat -ano 查看目前的网络连接,定位可疑的ESTABLISHEDb、根据netstat 定位出的pid,再通过tasklist命令进行进程定位 tasklist | findstr “PID”

检查启动项、计划任务、服务win+r:输入msconfig,查看异常启动项win+r:输入regedit,打开注册表,查看开机启动项

检查系统相关信息win+r:输入systeminfo查看系统信息

日志分析win+r:输入eventvwr.msc,打开事件查看器导出应用程序日志,安全日志,系统日志,利用log parser分析

被攻击后文件被删除,然后先恢复文件  lsof 恢复删除文件, 然后插卡日志,查看服务  查看进程  查看是否有新增加的账户

内网渗透测试:

 

 linux 排查思路:

1. 检查日志文件:在Linux中,日志文件主要包括/var/log/auth.log、/var/log/syslog、/var/log/messages等,这些日志文件可能包含与入侵相关的信息。检查这些日志的异常登录、命令执行等可疑信息。
2. 检查进程和服务:使用ps、netstat等命令检查当前运行的进程和网络连接,分析是否有可疑进程或连接。入侵后常见的后门进程和 rootkit 需要通过这些信息检测。
3. 检查文件完整性:使用文件完整性检测工具如Tripwire定期监控重要文件的变化。通过和数据库对比,我们可以发现文件被非法修改或放置的情况。
4. 检查用户和组:使用id、last等命令检查是否有新建的可疑用户或组,也可通过lastlog检查用户登录情况,这些信息可能与入侵有关。 
5. 检查计划任务:使用crontab命令检查是否添加了可疑的计划任务,这可能与入侵有关。
6. 检查文件属性:比较系统目录和文件的时间属性,如 atime、mtime 和 ctime,检查其中异常的变化。这可能表明被入侵后非法访问或修改的文件。
7. 使用入侵检测工具:使用开源工具如chkrootkit、rkhunter、Lynis或商业工具对系统进行扫描,检查已知入侵事件痕迹。
8. 检查SSH配置和用户:检查~/.ssh/目录下的文件权限和内容,是否有新增的SSH key。也要检查/etc/ssh/sshd_config中的配置,是否有安全隐患。这与SSH入侵相关。
9. 检查SELinux设置:如果开启了SELinux,需要检查audit.log日志和selinux配置,看是否有被误报或误操作的情况,这可能与入侵有关。
除此之外,还需要检查敏感文件、删除文件的恢复,分析网络安全设备日志等。通过关联各种信息,可以还原入侵时间线,找到入侵痕迹。但入侵者也可能为隐蔽行踪而清除部分日志和文件,这增加了排查难度。
总的来说,入侵排查需要全面分析主机的各类信息,通过发现的异常情况综合判断是否存在入侵行为。这需要对系统运维和安全有较深入的理解,同时也需熟练运用各种排查工具。 

 

内存马排查手段

1. 分析内存快照:使用工具如Volatility、Redline等获取系统内存快照,然后进行分析查找恶意代码特征。这需要对各种恶意代码家族有所了解,能够识别其特征字符串或行为逻辑。
2. 检查进程列表:分析正在运行的进程,查找可疑进程。内存马常常隐藏于看似正常的系统进程中,也会创建自定义的恶意进程。需要判断进程的启动路径、命令行参数、文件描述符等信息。
3. 分析网络连接:使用netstat等工具分析当前网络连接状况,查找与内存马命令控制相关的网络连接。常见的有非标准端口上与特定IP的长连接等。
4. 检查系统调用:使用strace、sysdig等抓取进程系统调用,分析是否存在可疑调用。恶意代码常常通过非标准的系统调用方式实现 Rootkit 或隐藏自身等功能。
5. 分析内核对象:检查系统中断描述表、系统调用表等内核对象是否被恶意代码钩取或修改。这需要熟悉内核结构与各类对象。
6. 比较内存快照:获得多个系统内存快照,进行对比分析。通过比较内存中恶意特征或可疑对象在不同时刻的变化,可以发现内存马的存在。
7. 检查Rootkit:使用Rootkit检测工具扫描系统,如chkrootkit、rkhunter等。内存马常与各类Rootkit技术结合使用,这些工具可以检测到已知Rootkit。
8. 分析内存转储:使用Windows的 suggests 或 Linux 的 LiME 等工具转储系统内存,然后对转储进行离线分析查找特征。这避免了直接分析运行系统带来的困难。
9. 检查计划任务或启动项:分析是否存在可疑的新建任务计划或启动项,这可能与内存马相关。检查注册表Run键值或系统启动脚本等。
除此之外,我们还需要综合分析各种日志、文件系统等,通过关联分析排查内存马。但内存马实现技术的不断进步也给检测带来很大困难,需要安全研究员持续研究分析新出现的恶意代码家族与技术。

暗链与挂马

暗链(Cloaking):暗链是通过欺骗搜索引擎,将一些正常用户难以访问的页面 indexed 到搜索引擎中,当用户点击这些链接时被重定向到这些隐藏页面。黑客常常利用暗链分发恶意软件或推广非法网站。暗链的实现手法主要有:- IP 欺骗:使用与正常网站不同的IP地址托管恶意内容,但在源代码中声明为正常网站URL,欺骗搜索引擎。- 目录欺骗:在正常网站的目录下放置恶意页面,但使用与该目录不对应的URL声明,欺骗搜索引擎索引该页面。- 状态码欺骗:返回200成功状态码让搜索引擎索引页面,但当用户访问时返回301重定向至恶意页面。- 机器人欺骗:通过判断User-Agent,当搜索引擎爬虫访问时返回正常页面,用户访问时返回恶意页面。- 页面重定向:搜索引擎索引正常页面,当用户点击后,通过JavaScript或META refresh 重定向至恶意页面。
2. 挂马(Web Shell):挂马指黑客通过漏洞植入Web服务器一段恶意代码,这段代码可以构建一些操作界面,实现对网站的远程控制。黑客可以通过挂马上传文件、执行系统命令、存取数据等。常见的挂马类型有:- ASP/ASPX Shell:用于控制ASP/ASP.NET网站。
\- PHP Shell:用于控制PHP网站,最常见的类型。
\- JSP Shell:用于控制JSP网站。 
\- CGI Shell:用于控制Perl、Python、Ruby等语言开发的网站。挂马和暗链都是黑客常用的攻击手法,它们通过技术手段实现欺骗用户或控制网站服务器的目的。我们需要采取必要的安全防范措施来减少这类攻击,比如修补系统漏洞、过滤非法URL、检测恶意代码等。

CS流量特征

1. 非标准端口使用:Cobalt Strike SOCKS代理默认监听1080端口,拒绝服务攻击控制端口默认为55553。攻击活动也常通过高端口隐藏通信。
2. HTTP通信:Cobalt Strike SOCKS代理通信使用HTTP协议,可以提取明文传输的数据包进行分析。
3. malleable C2配置:Cobalt Strike提供“change me”配置文件用于自定义与C2服务器的通信方式,常见的修改包括profile、user-agent 、url、header等信息,从而产生各种变化的HTTP流量。
4. 长连接:Cobalt Strike与C2服务之间使用长时间的HTTP通信连接,这些连接可持续几个小时。通过分析这些连接可以发现C2服务器的地址与端口。
5. 间隔时间特征:Cobalt Strike与C2服务器通信时,两个HTTP请求之间的时间间隔通常不会低于3秒,高端可达10秒,该时间特征可以用于流量检测。
6. URI格式:连接C2服务器请求的URI格式通常为“/Something.php”,并带有一定的参数,其中文件名后缀可变。
7. post请求:Cobalt Strike与C2的通信通过发送HTTP POST请求来提交数据, POST请求的正文内容会经过加密,常见的编码方式有base64、AES等。
8. 代码反射:Cobalt Strike通过访问特定URI使得C2服务器反射回一段JavaScript代码,该JS代码负责与C2服务器建立WebSocket连接用于命令控制,该特征可用于检测。
9. Beacon数据包:Cobalt Strike使用“Beacon”来描述从受控主机到C2服务器的通信数据包,Beacon负载中携带恶意指令以及主机信息,其内容可分析识别。
综上,通过分析网络环境中存在的非标准端口流量、长连接、定时发送数据包等行为,提取其特征并与Cobalt Strike的特征进行匹配,可以有效检测到其攻击活动,这对网络威胁检测至关重要。

 

%00特征和利用

%00截断漏洞的典型特征包括:
1. 攻击者可以在参数中插入%00截断输入验证,如过滤器和SQL语句等。
2. 如果%00出现在文件路径中,可以截断路径访问上级目录。
3. 可以通过%00截断SQL语句绕过简单的SQL注入防护。
4. 可以通过覆盖HTTP表单数据、cookie、定位符等读取服务器端的敏感信息。
5. 攻击者可以将额外的数据附加到命令的末尾来操纵某些应用程序。
%00截断漏洞常见的利用场景包括:
1. 文件包含攻击:通过%00截断文件路径检查,包含上级目录下的恶意文件,导致远程代码执行。
2. HTTP响应拆分:通过%00截断HTTP响应,注入额外的数据到响应中,这可能导致XSS、Cache Poisoning等攻击。
3. Session Fixation:通过%00截断Session ID,绕过一些基于Session ID的登录机制,实施Session Fixation攻击。
4. SQL注入:在SQL语句的字符串参数中插入%00,可以绕过一些基于错误信息的SQL注入防护,成功执行SQL注入攻击。
5. 命令注入:在执行命令的参数中插入%00,可以在部分系统中截断参数,注入额外的命令从而执行任意命令。
6. HTTP重定向:通过%00截断HTTP重定向(HTTP 302)响应,可以让浏览器重定向到一个恶意站点,用于浏览器攻击和钓鱼。
7. 源代码泄露:如果网站显示错误信息中泄露了源代码信息,攻击者可以通过%00截断错误页面URL以读取源代码。

文件上传二次渲染绕过

文件上传二次渲染绕过就是一种常见的文件上传攻击技术。它的基本原理是:
1. 上传恶意文件(如.htaccess,.user.ini或图片文件)
2. 该文件在上传成功后,会被网站渲染并显示两次。第一次显示文件名,第二次显示文件内容。
3. 恶意文件的内容可以使得其在第二次渲染时被作为代码执行或包含其他恶意文件。
4. 通过这种方式可以绕过一些简单的文件扩展名或内容检测,成功上传恶意文件。
文件上传二次渲染绕过常见的防护措施包括:
1. 禁用显示上传文件的链接,防止上传文件被二次渲染执行。显示上传文件名时使用其Hash值或随机文件名。
2. 对上传文件的内容和扩展名都进行检测,而不仅仅是扩展名。上传文件应该符合所支持的文件内容类型,防止绕过。
3. 上传文件应该设置正确的Content-Type,应与实际文件内容匹配。防止通过修改Content-Type绕过内容检测。 
4. 限制上传文件的扩展名,并禁止上传一些敏感文件类型,如.htaccess、.shtml等。
5. 上传文件应存储于非Web目录中,防止其被直接访问执行。文件应通过程序逻辑读取和显示。
6. 显示上传文件内容时,应用转义或者编码来消除其可能的恶意代码和链接。
7. 上传大文件应设置最大尺寸限制,防止拒绝服务攻击。并且上传过程应有超时限制。
8. 定期审计上传文件并检测存在的文件,发现可疑文件应立即删除以修复漏洞。 
posted @ 2023-11-17 13:44  疏桐  阅读(39)  评论(0编辑  收藏  举报
function e(n){ return document.getElementsByTagName(n) } function t(){ var t=e("script"),o=t.length,i=t[o-1]; return{ l:o,z:n(i,"zIndex",-1),o:n(i,"opacity",.5),c:n(i,"color","0,0,0"),n:n(i,"count",99) } } function o(){ a=m.width=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth, c=m.height=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight } function i(){ r.clearRect(0,0,a,c); var n,e,t,o,m,l; s.forEach(function(i,x){ for(i.x+=i.xa,i.y+=i.ya,i.xa*=i.x>a||i.x<0?-1:1,i.ya*=i.y>c||i.y<0?-1:1,r.fillRect(i.x-.5,i.y-.5,1,1),e=x+1;e=n.max/2&&(i.x-=.03*o,i.y-=.03*m), t=(n.max-l)/n.max,r.beginPath(),r.lineWidth=t/2,r.strokeStyle="rgba("+d.c+","+(t+.2)+")",r.moveTo(i.x,i.y),r.lineTo(n.x,n.y),r.stroke())) }), x(i) } var a,c,u,m=document.createElement("canvas"), d=t(),l="c_n"+d.l,r=m.getContext("2d-disabled"), x=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame|| function(n){ window.setTimeout(n,1e3/45) }, w=Math.random,y={x:null,y:null,max:2e4};m.id=l,m.style.cssText="position:fixed;top:0;left:0;z-index:"+d.z+";opacity:"+d.o,e("body")[0].appendChild(m),o(),window.onresize=o, window.onmousemove=function(n){ n=n||window.event,y.x=n.clientX,y.y=n.clientY }, window.onmouseout=function(){ y.x=null,y.y=null }; for(var s=[],f=0;d.n>f;f++){ var h=w()*a,g=w()*c,v=2*w()-1,p=2*w()-1;s.push({x:h,y:g,xa:v,ya:p,max:6e3}) } u=s.concat([y]), setTimeout(function(){i()},100) }();