免责声明 由于传播、利用本公众号所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢! 欢迎关注本公众号,长期推送技术文章 前言随着现在网络安全的不断发展,护网演练已经不再像以前那样,对于我们来说,比较的陌生。 无论是参加攻防演练中的防守方(蓝军),或者技术要求更高的攻击手(红军),都可以让我们得到很多新的理解与经验,在后期丰富简历参加求职寻找工作、清楚自己的技术发展方向等方面都有很大的帮助,除此之外,咱们还可以获得一笔不菲的报酬,一劳多得。 正因为如此,在咱们寻找HW职位的时间,多数需要通过面试进行定级。只要是面试,免不了的就会出现面试题这个概念,以下给大家分享一些往年自己在参加HW面试过程中所经历的问题,以及相应的解答方法,以备大家不时之需。 不同的面试官有不同的询问重点,可能红队渗透方向的多点,也有可能直接偏向于蓝队防守,流量分析,应急处置等 所以以下的知识点分的比较粗,大家可以按自己的理解进行进一步的区分 面试集锦sql注入 waf绕过
文件上传 waf绕过(1)通过filename换行来绕过检测 第一种: Content-Disposition: form-data; name='file'; filename='1.p hp' 第二种: Content-Disposition: form-data; name='file'; file name='1.php' 第三种: Content-Disposition: form-data; name='file'; filename= '1.php' 三种均可 使用多个等号绕过检测
增大文件大小,类似于sql注入的大量垃圾字符绕waf检测 Content-Disposition: form-data; aaaaaaaaaaaaaaaaaaaaa......aaaaaaaaaaaaaaaaaaaaa;name='file'; filename='a.php' 去掉双引号或替换为单引号绕过waf
有些只检测第一个firename,可以增加filename干扰拦截 Content-Disposition: form-data; name='file'; filename= ; filename='a.php' 混淆waf匹配字段 混淆form-data
混淆 ConTent-Disposition COntEnT-DIsposiTiOn: form-data; name='file'; filename='a.php' 大小写混淆 Content-Type: image/gif Content-Disposition: form-data; name='file'; filename='a.php' 调换Content-Type和ConTent-Disposition的顺序 Content-Type: image/gif Content-Disposition: form-data; name='file'; filename='a.php' Content-Type: image/gif 增加额外的头 AAAAAAAA:filename='aaa.jpg'; Content-Disposition: form-data; name='file'; filename='a.php' Content-Type: image/gif 增加额外的头 Content-Length: 666 Content-Disposition: form-data; name='file'; filename='a.php' Content-Type: image/gif 增加额外的头 双文件绕过,例如安全狗总以最后一个Content-Disposition中的值做为接收参数进行检测,一些中间件例如IIS6.0总是以第一个Content-Disposition中的值做为接收参数。 容器与WAF对Boundary要求规则不一致
条件竞争,一些情况下在上传文件时,先上传到临时目录,然后再检测,检测到再删除,例如:可以上传生成一句话木马的文件 fputs(fopen('shell6666.php','w'),'<?php @eval($_POST[1])?>'); 上传同时疯狂重复发包访问此文件,就有可能会在文件被删除之前生成webshell文件a.php 数据库区分网站类型与数据库的联系asp:SQL Server,Access.net :SQL Serverphp:Mysql,PostgreSqljava:Oracle,Mysql 依据主机端口如果可以对主机进行端口扫描,可以根据是否开启对应端口,来大概判断数据库类型。 Oracle 默认端口号:1521 SQL Server 默认端口号:1433 MySQL 默认端口号:3306 PostgreSql 默认端口号:5432 Access Access数据库属于文件型数据库,所以不需要端口号。 数据库特有函数len和length 在mssql和mysql中,返回长度值是调用len()函数;在oracle中则是通过length()来返回长度值。 @@version和version() 在mysql内,可以用@@version或是version()来返回当前的版本信息。version()>1 返回与@@version>1 相同页面时,则可能是mysql。如果出现提示version()错误时,则可能是mssql。 substring和substr 在mssql中可以调用substring。oracle则只可调用substr 根据注释符判断“#”是MySQL中的注释符,返回错误说明该注入点可能不是MySQL,另外也支持’-- ',和/* */注释(注意mysql使用-- 时需要后面添加空格) “null”和“%00”是Access支持的注释。 “--”是Oracle和MSSQL支持的注释符,如果返回正常,则说明为这两种数据库类型之一。 “;”是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库。 根据数据库特有表进行判断1、mssql数据库
2、access数据库 http://127.0.0.1/test.php?id=1 and (select count(*) from msysobjects)>0 and 1=1 3、mysql数据库(mysql版本在5.0以上)
4、oracle数据库 http://127.0.0.1/test.php?id=1 and (select count(*) from sys.user_tables)>0 and 1=1 mssql 提权函数xp_cmdshell sp_oacreate oracle提权1、普通用户模式: 前提是拥有一个普通的oracle连接账号,不需要DBA权限,可提权至DBA,并以oracle实例运行的权限执行操作系统命令。 2、DBA用户模式: 拥有DBA账号密码,可以省去自己手动创建存储过程的繁琐步骤,一键执行测试。 3、注入提升模式: 拥有一个oracle注入点,可以通过注入点直接执行系统命令,此种模式没有实现回显 使用oracleshell工具进行提权 站库分离1.从web网站打入进而打站库分离的数据库,内网渗透; 2.从数据库打入进而打站库分离的web网站,内网渗透。 一、从 web 入口渗透 从 web 入口通常就是通过网站的各种漏洞来getshell,比如文件上传、命令执行、代码执行、还有SQL注入写入一句话(into outfile、日志备份等)。 在获得 web 权限或者有诸如文件读取等漏洞时,我们还读数据库配置文件、对数据库内容分析、查找数据库备份,进而对数据库目标 ip 进行渗透,以便后续操作。 二、从数据库入口渗透 但是这里要说主要是外网暴露的数据库入口点弱口令;web网站SQL注入。 从数据库入口渗透,同样主要是为了获取更大的权限,或者扩展我们的渗透成果,比如从数据库里可以得到一些密码信息,用户名等,在后续的内网渗透中可以很有效的帮助我们。 站点是站库分离的,数据库和web不在同一台服务器上,这时候不能写入一句话木马通过web去连,因为路径没有用。如果是从web端找到的SQL注入,那么可以通过以下这些方式去做收集、获取权限。 MYSQL(1)定位 web 端 ip 地址 通过查询
在得到了web端的ip,我们可以进而对web端进行渗透。 MSSQL(1) 判断是否站库分离 得到客户端主机名 select host_name(); 得到服务端主机名
根据结果判断是否分离,结果一样就可能站库同服务器,结果不一样就是站库分离。 前后端分离webpack、vue等 查看未授权 fastjson不出网写静态文件Fastjson不出网利用总结 https://xz.aliyun.com/t/12492 TemplatesImpl利用链版本 1.2.24苛刻条件:
dnslog外带
网站目录写文件/静态资源(需要知道网站路径) 报错 查看存在的静态文件进行fuzz测试 fastjson增加的autotype机制导致可以自己设置类型,攻击者准备rmi服务和web服务,将rmi绝对路径注入到lookup方法中,受害者JNDI接口会指向攻击者控制rmi服务器,JNDI接口向攻击者控制web服务器远程加载恶意代码,执行构造函数形成RCE。 Fastjson反序列化的Gadget需要无参默认构造方法或者注解指定构造方法并添加相应参数。使用Feature.SupportNonPublicField才能打开非公有属性的反序列化处理,@type可以指定反序列化任意类调用其set,get,is方法,并且由于反序列化的特性,我们可以通过目标类的set方法自由的设置类的属性值。 常见的流量特征包含: '@type':'com.xxx.XXX' log4jApache Log4j 漏洞相关技术分析文章,可得知 log4j 攻击的一个关键词是
php站点webshell执行函数无回显php函数禁用寻找未禁用的函数黑名单绕过,难免会有遗漏的函数,我们可以查看phpinfo文件,看看是否有未被禁用的危险函数 dl,exec,system,passthru,popen,proc_open,pcntl_exec,shell_exec,mail,imap_open,imap_mail,putenv,ini_set,apache_setenv,symlink,link 利用 LD_PRELOAD环境变量 LD_PRELOAD是Linux系统的一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。一方面,我们可以以此功能来使用自己的或是更好的函数(无需别人的源码),而另一方面,我们也可以以向别人的程序注入程序,从而达到特定的目的。 方法一:劫持函数
预加载共享对象在实际情况中,很多机器尚未安装或者禁止了sendmail功能,通常的 www-data 权限又不可能去更改 php.ini 配置、去安装 sendmail 软件,所以可以采用另一种方式绕过disable_function 系统通过LD_PRELOAD预先加载对象,如果加载时,就直接进行调用,就不用进行劫持绕过 使用条件linux系统 putenv() mail或error_log 目录可写,需要上传.so文件 利用PHP7.4 FFIFFI(Foreign Function Interface),即外部函数接口,是指在一种语言里调用另一种语言代码的技术。PHP 的 FFI 扩展就是一个让你在 PHP 里调用 C 代码的技术。FFI的使用只需声明和调用两步 申明FFI,使用C语言的System函数 bypass uac如果大佬有好的方式可以评论区进行分享,如果实在想不到就是github上面的bypass uac工具集,通过他们进行绕过 溯源通常情况下,接到溯源任务时,获得的信息如下
其中攻击 IP、攻击类型、恶意文件、攻击详情是溯源入手的点。 通过攻击类型分析攻击详情的请求包,看有没有攻击者特征, 通过获取到的 IP地址进行威胁情报查询来判断所用的IP具体是代理IP还是真实IP地址。
溯源结果框架 在受到攻击、扫描之后,进行一系列溯源操作后,理想情况下想要获得如下数据,来刻画攻击者画像 |
|