2022各大厂商护网面试题

Posted 网小白白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022各大厂商护网面试题相关的知识,希望对你有一定的参考价值。

安恒信息蓝队初级面试题

一.owasp top10(2021年版本)

1.访问控制崩溃

风险描述:攻击者可通过修改URL,html页面绕过访问控制检查;或目录遍历,目录爬升和回溯进行未授权访问;越权访问(垂直越权、平行越权)敏感资源,冒充用户、管理员或拥有特权的用户,或者创建、访问、更新或删除任何记录。

对业务的影响取决于应用程序和数据的保护需求。

加固建议:

除了公共资源外,默认禁止访问;

确保以尽可能少的方式提供给用户、程序或进程访问权限;

禁止列出WEB服务器目录,确保元数据和备份文件不在根目录;

限制访问API的频率,使自动化扫描攻击工具的损害最小化;

token应该在登出后立刻失效;

加强引用参数的封装、加密;

记录所有的访问控制事件;

2.敏感数据泄露

风险描述:

由于使用弱加密、未加密、过时的哈希函数(例如 MD5 或 SHA1)、默认加密密钥或重复使用弱加密密钥、缺少二次身份校验,而导致系统泄露敏感信息,造成损失。

加固建议:

使用随机加密;

避免使用不安全的加密算法;

始终使用二次身份验证,而不是只进行加密;

使用安全协议传输数据;

3.注入

风险描述:

恶意攻击者可通过SQL注入漏洞构造SQL注入语句,对服务器端返回特定的错误信息来获取有利用价值的信息,甚至可篡改数据库中的内容并进行提权。

加固建议:

对产生漏洞模块的传入参数进行有效性检测,对传入的参数进行限定;

当用户输入限定字符时,立刻转向自定义的错误页,不能使用服务器默认的错误输出方式;

对标签进行危险字符过滤或转义,禁止(’、"、+、%、&、<>、()、;、and、select等)特殊字符的传入;

加密数据库内存储信息;

与数据库链接并访问数据时,使用参数化查询方式进行链接访问。

4.不安全的设计

风险描述:

由于开发过程中的设计缺陷,可能导致注入、文件上传等漏洞被利用;

加固建议:

建立并使用安全设计库或安全组件;

分离系统层和网络层;

将威胁建模用于关键身份验证、访问控制、业务逻辑和关键数据流;

5.安全配置错误

风险描述:

在应用栈中任意一处没有安全加固,云服务器授权没有正确配置;

非必要的特性被启用或安装;

使用默认账户和密码;

异常报错抛出堆栈,或其他包含信息过多的错误消息被泄露给了用户;

可升级的系统中最新的安全特性没有被启用或正确配置;

应用服务器、应用框架、数据库中的安全设置没有被设为安全值;

服务器没有发送安全头或指令,或是没有被正确设置;

加固建议:

使用可重复的加固程序,但使用不同的凭据;

最小化原则。系统不包含任何非必须的特性,组件,文档,删除或不安装未使用的功能和框架;

通过分段、容器化或云安全组 (ACL) 在组件或用户之间提供有效且安全的分离;

向客户端发送安全指令;

使用自动化进程以验证所有环境中配置的有效性;

6.使用含有已知漏洞的组件

风险描述:

管理员不知道使用的所有组件的版本,无法及时了解到组件的安全状况;

使用易受攻击的,不再支持,或是过时的组件。包括OS, web服务器,DBMS,APIs和所有组件,运行环境、库。

没有周期性扫描漏洞,没有关注所使用组件的安全公告;

没有及时修复或升级平台,框架,依赖;

软件开发者没有测试升级,更新,补丁的兼容性.

加固建议:

删除不再使用的依赖,不必须的功能,组件,文件,文档;

持续记录当前用的组件和依赖的版本。持续关注CVE, NVD上的关于对应组件的漏洞,订阅关于所使用组件的邮件通知。

仅通过安全链接,从官方来源获取组件。

关注不再维护的库和组件,如果无法打补丁,考虑部署虚拟补丁。

7.认证崩溃

风险描述:

允许自动化的攻击,如凭据填充(credential stuffing,撞库)攻击。

允许爆破等攻击;

允许默认口令,弱密码;

使用弱或无效的凭据,恢复和忘记密码找回;

使用明文,加密或弱hash的密码;

使用损坏的或无效的多因子认证;

在URL中暴露会话ID;

在成功登录后没有轮换会话ID;

没有及时把会话ID,验证令牌等信息无效化。

加固建议:

避免使用默认密码;

进行弱密码检查;

确保注册,凭据恢复和API加固以抵御账户枚举攻击;

限制或延迟失败的登录尝试,并记录所有失败尝试并在发动攻击时报警;

使用服务端内置的会话管理,确保对于每次登录生成随机会话ID。会话ID不应该在URL中,且应该及时销毁

8.软件与数据完整性失败

风险描述:

应用程序依赖来自于不受信任的来源;

不安全的 CI/CD 管道可能会导致未经授权的访问、恶意代码或系统受损;

应用程序更新在没有充分完整性验证的情况下被下载并应用于以前受信任的应用程序;

攻击者可能会上传自己的更新以分发并在所有安装上运行;

对象或数据被编码或序列化为攻击者可以看到和修改的结构,容易受到不安全的反序列化。

加固建议:

使用数字签名或类似机制来验证软件或数据来自预期来源且未被更改;

确保使用安全工具验证组件不包含已知漏洞;

确保未签名或未加密的序列化数据不会在没有检查或数字签名的情况下发送到不受信任的客户端;

9.不足的日志记录和监控

风险描述:

审计日志记录不足,无法有效定位到操作者;

警告和错误日志记录不全面、不清晰;

应用和API关于可疑事件的日志没有被监管;

日志无备份,仅本地保存;

日志留存时间较短;

攻击事件未实时监测或未触发告警;

加固建议:

确保登录、访问控制,服务器验证失败和成功等事件均会被日志记录,同时记录足够多的操作以确定可疑账号与可疑行为。

保存足够长时间的日志(至少留存6个月)便于分析。

确保日志的格式,便于阅读与管理。

对日志进行备份存储;

建立有效的监管和报警机制,使得可疑活动能被及时检测和处置。

10.服务器请求伪造

风险描述:

是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。也就是说,存在一个web服务端和另一个外网隔绝的服务器,web端可以与该服务器通信,web端可以从其他服务器获取数据并返回,黑客就可以通过利用或伪造这个web服务端的请求来向内网服务器发起攻击获取数据。

加固建议:

验证所有客户端提供的数据;

使用白名单强制执行 URL 架构、端口和目标;

不向客户端发送原始响应;

禁用 HTTP 重定向;

URL一致性,避免 DNS 重新绑定和“检查时间、使用时间”(TOCTOU) 竞争条件等攻击。

限制请求端口为http常用端口:80,8080,443,8090.

CSRF(跨站请求伪造)

概念:挟持了当前已经登录的用户程序去做用户非本意的操作,

比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。 如下:其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。

攻击原理:

                1. 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

                2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

                3. 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

                4. 网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

                5. 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会  根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

防御手段:1.同源策略,检查referer字段,拒绝非本站的请求

                      2.检查taken校验码,服务器生成的伪随机数发给用户,后台会拒绝掉错误的请求

SSRF(服务器请求伪造)

概念:服务器提供服务的其他应用未对其访问进行限制,存在一个web服务端和另一个外网隔绝的服务器,web端可以与该服务器通信,web端可以从其他

服务器获取数据并返回,黑客就可以通过利用或伪造这个web服务端的请求来向内网服务器发起攻击获取数据。

防御手段:1.验证所有客户端提供的数据;

2.使用白名单强制执行 URL 架构、端口和目标;

3.不向客户端发送原始响应;

4.禁用 HTTP 重定向;

5.URL一致性,避免 DNS 重新绑定和“检查时间、使用时间”(TOCTOU) 竞争条件等攻击。

6.限制请求端口为http常用端口:80,8080,443,8090.

SSRF与CSRF漏洞的区别:

csrf由客户端发起请求的安全漏洞

Ssrf是由服务器端发起请求的安全漏洞

XSS(跨站脚本攻击)

概念:往web页面中插入恶意代码,用户浏览该网页时恶意代码会执行

反射型:XSS攻击脚本被Web服务器反射回来给浏览器解析执行。

存储型:是攻击者将恶意脚本代码存储到Web服务器中并被解析,客户当访问到这网页时将受到攻击

DOM型:基于DOM文档对象模型的一种漏洞,所以受客户端浏览器的脚本代码所影响

区别:攻击对象不同:反射型XSS的被攻击对象一般是攻击者去寻找的,存储型XSS是广撒网的方式或者指定的方式,DOM型XSS的被攻击对象其实和反射型XSS被攻击对象差不多,就是给攻击对象放送URL。

         解析位置不同:反射型XSS的脚本被解析的地方是浏览器,而存储型XSS的脚本被解析的地方是服务器,DOM型XSS也是浏览器,所以DOM型又叫DOM反射型XSS。但是反射型XSS需要联网,而DOM型不需要!

         存储时间不同:反射型XSS没有持久性,存储型XSS是存储在服务器上,只要服务器不挂机或者是被干掉,就一直会有,DOM型XSS和反射型差不多

防御措施:主要就是过滤输入和转义输出

1.比如说对用户提交的url、http头、post数据进行输入验证

2.输出的话,比如说对用户输出的内容使用标签,标签内的内容会直接显示

3.还有就是严格控制字符输入字数

4.或者在脚本执行的代码里杜绝掉用户输入

反序列化:

序列化:把对象转换成字节流,便于保存或者传输;

反序列化:就是把字节流还原成对象

Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,

ObjectInputStream类的readObject()方法用于反序列化。

在java读取完字节流后,会判断是否存在用户自定义的“readObject”方法,如果存在的话,就优先使用udf。所以,如果存在一个自定义了“readObject”方法的对象,而这个方法是危险的,比如说执行系统命令,就会导致反序列化后形成威胁。

防御措施:

需要在objectinputstream类反序列化时,对生成的对象类型做限制,比如说设置白名单

XXE(xml外部实体注入)

概念:注入是指xml数据在传输过程中被修改,导致服务器执行了恶意代码

防御措施:

配置xml处理器使用禁用DTD、禁止外部实体解析

使用开发语言提供的禁用外部实体的办法

通过黑名单过滤用户提交的xml数据

不允许xml中含有任何自己声明的DTD

SQL注入

概念:就是在和数据库有交互的地方,对输入的参数没有进行严格的过滤导致输入的恶意查询语句被执行;或者对字符串进行拼接构造sql注入

sql注入的分类有哪些?

a.从注入方式上看有联合查询注入、报错型注入、布尔型注入、延时注入、堆叠注入这些

b.从数据类型上有:字符型、数字型

c.从注入位置可以分为GET型、POST型、HTTP头部、cookie数据

报错注入函数:

updatexml():是mysql对xml文档数据进行查询和修改的xpath函数

extractvalue():是mysql对xml文档数据进行查询的xpath函数

floor():mysql中用来取整的函数

exp():此函数返回e(自然对数的底)指数X的幂值

Union联合注入函数:

concat():凭借字符串拼接

concat_ws():指定字符串拼接

group_concat():内容以逗号隔开显示出来

布尔盲注函数:

Length():返回指定对象的长度

Left(),right():对字符串str从左开始数起,返回num个字符

Substr():截取字符串

ascii():返回字符串第一个字符的 ASCII 值

时间盲注函数:

Sleep()

If()

读写文件函数:load_file():读取

into outfile:写入

sqlmap使用:

 sqlmap -u  "http://www.xx.com?id=x"    【查询是否存在注入点

2.     --dbs         【检测站点包含哪些数据库

3.     --current-db    【获取当前的数据库名

4.     --tables -D "db_name"  【获取指定数据库中的表名 -D后接指定的数据库名称

5.     --columns  -T "table_name" -D "db_name"  【获取数据库表中的字段

6.     --dump -C "columns_name" -T "table_name" -D "db_name"  【获取字段的数据内容

2#、COOKIE注入:

sqlmap -u "http://www.xx.com?id=x" --cookie "cookie" --level 2  【cookie注入 后接cookie值

3#、POST注入:

(1)目标地址http:// www.xxx.com /login.asp

(2)打开brup代理。

(3)点击表单提交

(4)burp获取拦截信息(post)

(5)右键保存文件(.txt)到指定目录下

(6)运行sqlmap并执行如下命令:

用例:sqlmap -r okay.txt  -p  username

// -r表示加载文件(及步骤(5)保存的路径),-p指定参数(即拦截的post请求中表单提交的用户名或密码等name参数)

(7)自动获取表单:--forms自动获取表单

例如:sqlmap -u www.xx.com/login.asp --forms

(8)指定参数搜索:--data

例如:sqlmap -u www.xx.com/login.asp --data "username=1"

4#、常用指令:

1.    --purge      【重新扫描(--purge 删除原先对该目标扫描的记录)

2.    --tables      【获取表名

3.     --dbs         【检测站点包含哪些数据库

4.     --current-db    【获取当前的数据库名

5.     --current-user  【检测当前用户

6.    --is-dba   【判断站点的当前用户是否为数据库管理员

7.    --batch      【默认确认,不询问你是否输入

8.    --search  【后面跟参数 -D -T -C 搜索列(C),表(T)和或数据库名称(D)

9.    --threads 10  【线程,sqlmap线程最高设置为10

10.  --level 3        【sqlmap默认测试所有的GET和POST参数,当--level的值大于等于2的时候也会测试HTTP Cookie头

                                的值,当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。最高为5

11.  --risk 3           【执行测试的风险(0-3,默认为1)risk越高,越慢但是越安全

12.     -v   【详细的等级(0-6)

          0:只显示Python的回溯,错误和关键消息。

          1:显示信息和警告消息。

          2:显示调试消息。

          3:有效载荷注入。

          4:显示HTTP请求。

          5:显示HTTP响应头。

          6:显示HTTP响应页面的内容

13.    --privileges  【查看权限

14.   --tamper xx.py,cc.py   【防火墙绕过,后接tamper库中的py文件

15.  --method "POST" --data "page=1&id=2"   【POST方式提交数据

16.  --threads number  【采用多线程 后接线程数

17.  --referer  ""  【使用referer欺骗

18.  --user-agent ""     【自定义user-agent

19.  --proxy “目标地址″   【使用代理注入

sqlmap常用路径:

1. 添加表字段的目录在/usr/share/sqlmap/txt/common-tables.txt

2. 存放扫描记录的目录在/root/.sqlmap/output

常用数据库常见漏洞,框架漏洞:

Mysql:3306   弱口令爆破,提权(udf提权:udf为自定义函数,导入到指定目录以dll后缀,引入udf.dll文件,引入自定义函数达到提权

mof提权:上传mof需要root权限,将mof上传到任意文件夹,用mysql执行

启动项提权:将想要执行的命令写入到vbs,bat文件通过mysql导入到开机启动目录),注入

Mysql server:1433 爆破弱口令,注入

Oracle:1521 弱口令爆破,注入攻击,TNS劫持:Tns劫持本质就是一个大代理,因为负载均衡把一部会话转到黑客处,黑客改包后在转回给真实数据库处,因此得以查询敏感信息  打补丁 

数据库配置不当:所有账号最小权限控制

PostgreSQL:5432 弱口令爆破,

缓冲区溢出(经过身份验证的远程用户通过contrib/hstore/hstore_io.c内的hstore_recv, hstore_from_arrays, hstore_from_array函数及contrib/hstore/hstore_op.c内的hstoreArrayToPairs函数,利用此漏洞可触发缓冲区溢出,导致在受影响应用上下文中执行任意代码。)

MongoDB:27017 弱口令,未授权访问

Redis数据库:6379  爆破,未授权访问:Redis服务绑定到公共接口,并且没有开启认证,又暴露在公网上,这样就会导致任意用户在可以访问此公网的情况下未授权访问Redis以及读取Redis的数据

解决:禁止外部访问Redis服务端口 禁止使用root权限启动redis服务

web中间件常见漏洞:

Apache解析漏洞:防护:将AddHandler application/x-httpd-php .php的配置文件删除

Apache目录遍历:修改apache配置文件httpd.conf

找到Options+Indexes+FollowSymLinks +ExecCGI并修改成 Options-Indexes+FollowSymLinks +ExecCGI 并保存

Tomcat远程代码执行:启用了 HTTP PUT 请求方法,可通过构造的攻击请求向服务器上传包含任意代码的 JSP 文件,造成任意代码执行

禁用put方法

Tomcat war后门文件部署:Tomcat 支持在后台部署war文件,可以直接将webshell部署到web目录下

低权限运行Tomcat应用程序,后台管理避免弱口令

Weblogic反序列化:反序列话则是再把字节序列恢复为java对象的过程,然而就在这一转一变得过程中,程序员的过滤不严格,就可以导致恶意构造的代码的实现

升级补丁,对访问wls-wsat的资源进行访问控制

Weblogic SSRF:利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis、fastcgi等脆弱组件。

SearchPublicRegistries.jsp直接删除,删除uddiexplorer文件夹

Weblogic 任意文件上传:原理:通过访问config.do配置页面,先更改Work Home工作目录,用有效的已部署的Web应用目录替换默认的存储JKS Keystores文件的目录,之后使用"添加Keystore设置"的功能,可上传恶意的JSP脚本文件

进入Weblogic Server管理控制台,domain设置中,启用”生产模式

Weblogic war后门文件部署:防火墙设置端口过滤,设置只允许访问后台的IP列表,避免后台弱口令

Spring RCE:JDK 9版本里,spring MVC的数据绑定时出现的漏洞

升级官方补丁

Log4j2 :Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞

防护:关闭对应应用的网络外连,禁止主动外连,设置“log4j2.formatMsgNoLookups=True”

Log4j:搜索的 url 里面,加上 $jndi:ldap://127.0.0.1/test ,log4j 会对这串代码进行表达式解析,给 lookup 传递一个恶意的参数指定.升级版本,查看是否关闭lookup 

Jboss 反序列化:不需要http-invoker.sar 组件的用户可直接删除此组件,用于对 httpinvoker 组件进行访问控制

Struts远程代码执行 使用了Java的 unicode字符串表示\\u0023,攻击者就可以绕过保护

上海奇安信蓝队初级面试题:

使用过的工具:Wireshark(过滤规则,ip,协u议端口过滤,tcp.port==80,ip.src==)rips,sqlmap,bp,seay,

Nmap

-sT TCP (全)连接扫描,准确但留下大量日志记录

-sS TCP SYN (半)扫描,速度较快,不会留下日志

-sN null 扫描,标志位全为 0,不适用 Windows

-sF FIN 扫描,标志位 FIN=1,不适用 Windows

-O 查看目标主机系统版本

-sV 探测服务版本

-A 全面扫描

apache解析漏洞复现

Weblogic反序列化:使用vulhub实验环境,访问靶机,抓包,修改相应位置数据。Kali启动监听。 发送数据包成功后,拿到shell。

Linux应急响应

①识别现象,从客户场景的主机异常现象出发,先识别出病毒的可疑现象②清除病毒 然后定位到具体的病毒进程以及病毒文件,进行清除③闭环兜底 病毒一般会通过一些自启动项及守护程序进行重复感染,所以我们要执行闭环兜底确保病毒不再被创建④系统加固-将主机上的病毒项清除干净后,最后就是进行系统加固了,防止病毒从Web再次入侵进来。

误报

修改报警规则,重新设置告警触发阈值 

多次误报

根据设备加白名单,修改策略,如果依然误报找产品售后进行咨询

分析被代理出来的数据流:分析数据包中请求头中的xff,referer信息

大的日志分析:攻击匹配规则,统计方法,统计请求次数,低于平均次数为异常请求,白名单模式,日志工具分析。

日志分析思路:用流量监测的安全设备,看报文,分析报文里ip 使用微步查询ip是否为恶意,使用 wireshark对数据包深度分析源 IP 与目的 IP 地址,host 字段,发包内容等

JAVA代码审计:敏感函数,关键字回溯参数传递过程,文件上传 upload,反序列化:readobjeck xss:getparameter   审计工具 idea

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

如果是代码执行漏洞,排查中间件的error.log,查看是否有可疑的报错,判断注入时间和方法根据业务使用的组件排查是否可能存在java代码执行漏洞以及是否存在过webshell,排查框架漏洞,反序列化漏洞。如果是servlet类型,根据上报的webshell的url查找日志,根据url最早访问时间确定被注入时间。

Shiro:shiro是apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权  

550:当我们勾选remember me 的时候 shiro 会将我们的 cookie 信息序列化并且加密存储在 Cookie 的 rememberMe字段中,这样在下次请求时会读取 Cookie 中的 rememberMe字段并且进行解密然后反序列化

721:可以通过Padding Oracle加密生成的攻击代码来重新构造一个恶意的rememberMe字段,重新请求网站,进行反序列化攻击,最终导致任意代码的执行。

Cs远控如何处理:看下当前系统的反向连接端口都开了哪些,然后看看对应的服务项是否有被篡改的迹象,对比下修改时间。cmd命令运行netstat -an看看都有哪些IP在连接哪些端口,并一一对应查看,看看有无反向连接到443端口的IP和进程,如果有的话就对应进程ID查找所属程序,然后看看这个程序有无和之前的大小体积不一样。查到对应的反向连接到443可疑的IP的时候可疑直接把此IP直接禁止访问即可

绿盟堡垒机,qax网神防火墙,态势感知天眼(sql注入,看union还是时间,看语句)策略上的话身份识别策略然后NAT,DOS服务,配置地址表,地址组,配置负载均衡功能,例如虚拟服务器,有效服务器。明御ids,玄武盾防火墙

JAVA反序列化:ctf 相关函数serialize,unserialize   有串php代码

 有file_get_content(),可以利用伪协议写入‘welcome to the zjctf '过判断;同时看到提示有useless.php ,可以利用include()读一下文件构造payload:得到base64源码:

框架漏洞:Spring是Java EE编程领域的一个轻量级开源框架,weblogjic

溯源

1.攻击源捕获

安全设备报警,如扫描IP、威胁阻断、病毒木马、入侵事件等

日志与流量分析,异常的通讯流量、攻击源与攻击目标等

服务器资源异常,异常的文件、账号、进程、端口,启动项、计划任务和服务等

邮件钓鱼,获取恶意文件样本、钓鱼网站 URL 等

蜜罐系统,获取攻击者 ID、电脑信息、浏览器指纹、行为、意图的相关信息

2.溯源反制手段

IP 定位技术

根据IP定位物理地址–代理 IP

ID 追踪术

搜索引擎、社交平台、技术论坛、社工库匹配

网站 url

域名 Whois 查询–注册人姓名、地址、电话和邮箱 --域名隐私保护

3.攻击者画像

攻击路径

攻击目的:拿到权限、窃取数据、获取利益、DDOS 等

网络代理:代理 IP、跳板机、C2 服务器等

攻击手法:鱼叉式邮件钓鱼、Web渗透、水坑攻击、近源渗透、社会工程等

Xss窃取cookie payload:document.cookie

Sql经验长圆高能网站发现可能含有注入点的url界面,?Id=234 添加and1=1 跟1=2,通过测试发现所以新闻页面均存在数据库回显状况,可以判定此URL未过滤注入关键词并含有注入漏洞,order by查询字段长度,判断出了共有26字段 在错误界面爆出字段位置,然后查询当前用户权限和数据库 查询表名和列名 因为数据库中不止有一个表名,所以加limit语句进行查询,可以limit X,1逐个查询表名,查询字段中数据,也可以配合工具sqlmap结合使用.

解决措施:1.限制数据类型:比如整型 Integer,随后加入函数判断,如is_numeric($_GET[‘id’]) 只有当get到的id为数字或者数字字符时才能执行下一步,限制了字字符自然就限制了注入。2.正则表达式匹配传入参数,但是这种匹配非常消耗性能,因此攻击时可以构造大量的正常语句‘骗’过服务器,当后台对数据的处理达到最大限制时就会放弃匹配后面我们构造的非法语句,从而略过这个数据包。3.函数过滤转义:在php中最基本的就是自带的magic_quotes_gpc函数,用于处理 ’ " 符号加上/ 防止转义4.预编译语句应该是最佳的,绑定变量,避免了类似sql语句拼接、闭合等非法操作。

Webshell流量特征分析:中国菜刀:payload特征:

PHP: <?php @eval($_POST['caidao']);?>

ASP: <%eval request(“caidao”)%>数据包流量特征:

1,请求包中:ua头为百度,火狐

2,请求体中存在eavl,base64等特征字符

冰蝎:paylaod分析:php在代码中同样会存在eval或assert等字符特征

在aps中会在for循环进行一段异或处理,在jsp中则利用java的反射,所以会存在ClassLoader,getClass().getClassLoader()等字符特征

冰蝎2.0流量特征:

第一阶段请求中返回包状态码为200,返回内容必定是16位的密钥

建立连接后的cookie存在特征字符

所有请求 Cookie的格式都为: Cookie: PHPSESSID=; path=/;

冰蝎3.0流量特征:

请求包中content-length 为5740或5720(可能会根据Java版本而改变)

采用动态二进制加密,与检测传统的网站管理工具不同的,中国菜刀、中国蚁剑、c刀等都从POST请求中去提取特征,而冰蝎在通信过程中使用加密传输无法获取明文,因此,利用冰蝎在和服务端通信过程中会获取密钥的特性去检测

文件包含:原理就是注入一段用户能控制的脚本或代码,并让服务端执行

文件包含函数:PHP:include()、include_once()、require()、require_once()

Php伪协议:file:// — 访问本地文件系统:使用file://协议去包含本地的phpinfo.php

 php协议:// — 访问各个输入/输出流(I/O streams),php://filter用于读取源码:php://input用于执行php代码。

 zip协议:// — 压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名,可修改为任意后缀:jpg png gif xxx等等,涉及一些ctf的题目

任意文件下载:利用信息收集信息>猜路径 >>下载配置文件/代码文件 >> 利用服务器软件漏洞> shell> 提权)

任意文件下载漏洞的利用主要是为了信息收集,我们通过对服务器配置文件的下载,获取到大量的配置信息、源码,从而根据获取的信息来进一步挖掘服务器漏洞从而入侵。下载常规的配置文件,例如: ssh,weblogic,ftp,mysql等相关配置下载各种.log文件,从中寻找一些后台地址,文件上传点之类的地方,

下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器

猜解Windows路径:C:\\boot.ini //查看系统版本 C:\\Windows\\System32\\inetsrv\\MetaBase.xml //IIS配置文件 C:\\Windows\\repair\\sam //存储系统初次安装的密码

Linux:/root/.ssh/authorized_keys

/usr/local/app/php5/lib/php.ini //PHP配置文件

/etc/httpd/conf/httpd.conf //apache配置文件

修复:对下载路径进行过滤,如下载前对传入的参数进行过滤,并且对下载文件类型进行检查,是否是允许下载的类型过滤.(点),使用户在url中不能回溯上级目录

XSS:反射型:XSS攻击脚本被Web服务器反射回来给浏览器解析执行。

存储型:是攻击者将恶意脚本代码存储到Web服务器中并被解析,客户当访问到这网页时将受到攻击

DOM型:基于DOM文档对象模型的一种漏洞,所以受客户端浏览器的脚本代码所影响

区别:攻击对象不同:反射型XSS的被攻击对象一般是攻击者去寻找的,存储型XSS是广撒网的方式或者指定的方式,DOM型XSS的被攻击对象其实和反射型XSS被攻击对象差不多,就是给攻击对象放送URL。解析位置不同:反射型XSS的脚本被解析的地方是浏览器,而存储型XSS的脚本被解析的地方是服务器,DOM型XSS也是浏览器,所以DOM型又叫DOM反射型XSS。但是反射型XSS需要联网,而DOM型不需要!

存储时间不同:反射型XSS没有持久性,存储型XSS是存储在服务器上,只要服务器不挂机或者是被干掉,就一直会有,DOM型XSS和反射型差不多

防御:使用XSS Filter,即跨站脚本过滤器,用于分析用户提交的输入,并过滤可能存在的脚本攻击及恶意的HTML或简单的HTML格式错误等

对特殊符号及特殊语句进行的严格过滤

设置黑名单和白名单

安全狗绕过:waf的检测机制是正则匹配(正则偏多)还有字符串强匹配,还有语义解析        特殊字符绕过 编码绕过 等价替换(利用其他函数代替)

文件上传绕过:客户端检测绕过:修改脚本JS,将自定义的文件类型后缀添加进去。在上传时使用Burp拦截数据,将其中的扩展名改为php,就可以绕过客户端验证。

服务端检测绕过:mime验证绕过:上传php文件时,并使用 Burp 拦截查看 MIME 类型,更改 Content-Type 即可通过验证。

黑白名单

Spring框架漏洞

Spring Security OAuth2是为Spring框架提供安全认证支持的一个模块。Spring Security OAuth2处理认证请求的时候如果使用了whitelabel views,response_type参数值会被当做Spring SpEL来执行,攻击者可以在被授权的情况下通过构造response_type值也就是通过构造恶意SpEL表达式可以触发远程代码执行漏洞。

Struts2

现阶段已知的S2poc大多数都是远程命令执行漏洞,主要出现位置有:url中,报文内容中,content-type中;

S2-052:REST插件使用到XStreamHandler处理xml数据,由于未对xml数据做任何过滤,在进行发序列xml数据转换为Object时导致RCE

2-053:Struts2在使用Freemarker模板引擎的时候,同时允许解析OGNL表达式,导致用户输入的数据本身不会被OGNL解析,但由于被Freemarker解析一次后变成离开一个表达式,被OGNL解析第二次,导致任意命令执行漏洞。

最新漏洞Spring Framework远程代码执行漏洞

发布时间 2022-03-31 JDK 版本 >= 9

使用了 Spring 框架或衍生框架

项目中 Controller 参数接收实体类对象并存在代码调用

struts2框架漏洞 复现过,content-type出现异常字段,非MIME类型标识

2.字段格式为典型的注入代码格式%ognl

3.存在命令执行方法java.lang.ProcessBuilder().start()

4.执行命令“whoami”,返回包中返回执行成功信息“root”

5.出现类似于“3345*23565”的日志,通常都是扫描器扫描的日志

Windows常见命令

netstat -ano

taskkill | -f | -t | im 6140

Ipconfig

chmod 777 *ch(执行所有.ch文件)

Linux常见命令

rm -rf 被删除的目录的路径

mkdir 新目录的路径

cp 被复制的文件的路径 目标目录的路径

显示文件全部内容:cat

日志

windows 主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志

系统日志: %SystemRoot%\\System32\\Winevt\\Logs\\System.evtx

应用程序日志:%SystemRoot%\\System32\\Winevt\\Logs\\Application.evtx

安全日志:%SystemRoot%\\System32\\Winevt\\Logs\\Security.evtx

Linux

日志默认存放位置:/var/log/

查看日志配置情况:more /etc/rsyslog.conf

nmap -p n1,n2... IP nmap指定端口扫描命令

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网

ps -l(ps -u)#仅查看隶属于自己进程的详细信息

ps aux(ps -le) #查看所有用户执行的过程的详细信息

ps -o pid,comm,ni 列出占用CPU最多的5个进程,并按从大到小进行排序

Linux

netstat命令参数:

  -t : 指明显示TCP端口

  -u : 指明显示UDP端口

  -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)

  -p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。

  -n : 不进行DNS轮询,显示IP(可以加速操作)

Windows

netstat -ano 查看端口占用情况

netstat -ano | findstr xxxx.查看某个端口被占用情况

taskkill /pid xxxx -t -f 结束指定进程

2021年中:Android各大厂面试题汇总

缘起

接触Android已经3年,在工作中遇到疑难问题总是在网上搜索答案,各位大牛大神总是把自己的经验分享出来,帮助我们这些需要帮助的人,由此表示衷心感谢!然而现在自己细想了一下,自己也是时候把遇到的问题并把解决方案分享出来,希望能帮助到有需要的人。

随着时间的流逝,很多人说互联网这一块已经越来越不好干了,因为烧钱时代已经过去,剩下的都是根基牢固的大公司,独角兽已经不复存在。这就直接导致了互联网岗位的下降,本人亲测,也的确如此。

2021.05月,本人离职(此时3年工作经验,深圳就职),开始试水安卓市场,寻求一份合适自己,稳定的中大型公司。投了很多公司,面试机会并不是我想象中的那么多,即时面试过程顺利,也没有获得offer(候选人太多太多)。不过借此机会,前前后后我面了10家公司,现在就把我遇到的面试题,并且提供一些面试技巧给各位即将面试的同志们。

Android

1.Activity

  • 1.Activity的启动流程
  • 2.onSaveInstanceState(),onRestoreInstanceState的掉用时机
  • 3.activity的启动模式和使用场景
  • 4.Activity A跳转Activity B,再按返回键,生命周期执行的顺序
  • 5.横竖屏切换,按home键,按返回键,锁屏与解锁屏幕,跳转透明Activity界面,启动一个 Theme 为 Dialog 的 Activity,弹出Dialog时Activity的生命周期
  • 6.onStart 和 onResumeonPause 和 onStop 的区别
  • 7.Activity之间传递数据的方式Intent是否有大小限制,如果传递的数据量偏大,有哪些方案
  • 8.Activity的onNewIntent()方法什么时候会执行
  • 9.显示启动和隐式启动
  • 10.scheme使用场景,协议格式,如何使用
  • 11.ANR 的四种场景
  • 12.onCreate和onRestoreInstance方法中恢复数据时的区别
  • 13.activty间传递数据的方式
  • 14.跨App启动Activity的方式,注意事项
  • 15.Activity任务栈是什么
  • 16.有哪些Activity常用的标记位Flags
  • 17.Activity的数据是怎么保存的,进程被Kill后,保存的数据怎么恢复的

2.Service

1.service 的生命周期,两种启动方式的区别

  • 2.Service启动流程
  • 3.Service与Activity怎么实现通信
  • 4.IntentService是什么,IntentService原理,应用场景及其与Service的区别
  • 5.Service 的 onStartCommand 方法有几种返回值?各代表什么意思?
  • 6.bindService和startService混合使用的生命周期以及怎么关闭

3.BroadcastReceiver

  • 1.广播的分类和使用场景
  • 2.广播的两种注册方式的区别
  • 3.广播发送和接收的原理
  • 4.本地广播和全局广播的区别

4.ContentProvider

  • 1.什么是ContentProvider及其使用
  • 2.ContentProvider[,]ContentObserver之间的关系
  • 3.ContentProvider的实现原理* 4.ContentProvider的优点* 5.Uri 是什么

     

5.Handler

  • 1.Handler的实现原理
  • 2.子线程中能不能直接new一个Handler,为什么主线程可以
    主线程的Looper第一次调用loop方法,什么时候,哪个类
  • 3.Handler导致的内存泄露原因及其解决方案
  • 4.一个线程可以有几个Handler,几个Looper,几个MessageQueue对象
  • 5.Message对象创建的方式有哪些 & 区别?
    Message.obtain()怎么维护消息池的
  • 6.Handler 有哪些发送消息的方法
  • 7.Handler的post与sendMessage的区别和应用场景
  • 8.handler postDealy后消息队列有什么变化,假设先 postDelay 10s, 再postDelay 1s, 怎么处理这2条消息
  • 9.MessageQueue是什么数据结构
  • 10.Handler怎么做到的一个线程对应一个Looper,如何保证只有一个MessageQueue
    ThreadLocal在Handler机制中的作用
  • 11.HandlerThread是什么 & 好处 &原理 & 使用场景
  • 12.IdleHandler及其使用场景
  • 13.消息屏障,同步屏障机制
  • 14.子线程能不能更新UI
  • 15.为什么Android系统不建议子线程访问UI
  • 16.Android中为什么主线程不会因为Looper.loop()里的死循环卡死
    MessageQueue#next 在没有消息的时候会阻塞,如何恢复?
  • 17.Handler消息机制中,一个looper是如何区分多个Handler的
    当Activity有多个Handler的时候,怎么样区分当前消息由哪个Handler处理
    处理message的时候怎么知道是去哪个callback处理的
  • 18.Looper.quit/quitSafely的区别
  • 19.通过Handler如何实现线程的切换
  • 20.Handler 如何与 Looper 关联的
  • 21.Looper 如何与 Thread 关联的
  • 22.Looper.loop()源码
  • 23.MessageQueue的enqueueMessage()方法如何进行线程同步的
  • 24.MessageQueue的next()方法内部原理
  • 25.子线程中是否可以用MainLooper去创建Handler,Looper和Handler是否一定处于一个线程
  • 26.ANR和Handler的联系

6.View绘制

  • 1.View绘制流程
  • 2.MeasureSpec是什么
  • 3.子View创建MeasureSpec创建规则是什么
  • 4.自定义Viewwrap_content不起作用的原因
  • 5.在Activity中获取某个View的宽高有几种方法
  • 6.为什么onCreate获取不到View的宽高
  • 7.View#post与Handler#post的区别
  • 8.Android绘制和屏幕刷新机制原理
  • 9.Choreography原理
  • 10.什么是双缓冲
  • 11.为什么使用SurfaceView
  • 12.什么是SurfaceView
  • 13.View和SurfaceView的区别
  • 14.SurfaceView为什么可以直接子线程绘制
  • 15.SurfaceView、TextureView、SurfaceTexture、GLSurfaceView
  • 16.getWidth()方法和getMeasureWidth()区别
  • 17.invalidate() 和 postInvalidate() 的区别
  • 18.Requestlayout,onlayout,onDraw,DrawChild区别与联系
  • 19.LinearLayout、FrameLayout 和 RelativeLayout 哪个效率高
  • 20.LinearLayout的绘制流程
  • 21.自定义 View 的流程和注意事项
  • 22.自定义View如何考虑机型适配
  • 23.自定义控件优化方案
  • 24.invalidate怎么局部刷新
  • 25.View加载流程(setContentView)

7.View事件分发

  • 1.View事件分发机制
  • 2.view的onTouchEvent,OnClickListerner和OnTouchListener的onTouch方法 三者优先级
  • 3.onTouch 和onTouchEvent 的区别
  • 4.ACTION_CANCEL什么时候触发
  • 5.事件是先到DecorView还是先到Window
  • 6.点击事件被拦截,但是想传到下面的View,如何操作
  • 7.如何解决View的事件冲突
  • 8.在 ViewGroup 中的 onTouchEvent 中消费 ACTION_DOWN 事件,ACTION_UP事件是怎么传递
  • 9.Activity ViewGroup和View都不消费ACTION_DOWN,那么ACTION_UP事件是怎么传递的
  • 10.同时对父 View 和子 View 设置点击方法,优先响应哪个
  • 11.requestDisallowInterceptTouchEvent的调用时机

8.RecycleView

  • 1.RecyclerView的多级缓存机制,每一级缓存具体作用是什么,分别在什么场景下会用到哪些缓存
  • 2.RecyclerView的滑动回收复用机制
  • 3.RecyclerView的刷新回收复用机制
  • 4.RecyclerView 为什么要预布局
  • 5.ListView 与 RecyclerView区别
  • 6.RecyclerView性能优化

9.Viewpager&Fragment

  • 1.Fragment的生命周期 & 结合Activity的生命周期
  • 2.Activity和Fragment的通信方式, Fragment之间如何进行通信
  • 3.为什么使用Fragment.setArguments(Bundle)传递参数
  • 4.FragmentPageAdapter和FragmentStatePageAdapter区别及使用场景
  • 5.Fragment懒加载
  • 6.ViewPager2与ViewPager区别
  • 7.Fragment嵌套问题

10.WebView

  • 1.如何提高WebView加载速度
  • 2.WebView与 js的交互
  • 3.WebView的漏洞
  • 4.JsBridge原理

11.动画

  • 1.动画的类型
  • 2.补间动画和属性动画的区别
  • 3.ObjectAnimator,ValueAnimator及其区别
  • 4.TimeInterpolator插值器,自定义插值器
  • 5.TypeEvaluator估值器

12.Bitmap

  • 1.Bitmap 内存占用的计算
  • 2.getByteCount() & getAllocationByteCount()的区别
  • 3.Bitmap的压缩方式
  • 4.LruCache & DiskLruCache原理
  • 5.如何设计一个图片加载库
  • 6.有一张非常大的图片,如何去加载这张大图片
  • 7.如果把drawable-xxhdpi下的图片移动到drawable-xhdpi下,图片内存是如何变的。
  • 8.如果在hdpi、xxhdpi下放置了图片,加载的优先级。如果是400800,10801920,加载的优先级。

13.mvc&mvp&mvvm

  • 1.MVC及其优缺点
  • 2.MVP及其优缺点
  • 3.MVVM及其优缺点
  • 4.MVP如何管理Presenter的生命周期,何时取消网络请求

     

14.Binder

  • 1.Android中进程和线程的关系,区别
  • 2.为何需要进行IPC,多进程通信可能会出现什么问题
  • 3.Android中IPC方式有几种、各种方式优缺点
  • 4.为何新增Binder来作为主要的IPC方式
  • 5.什么是Binder
  • 6.Binder的原理
    Binder Driver 如何在内核空间中做到一次拷贝的?
  • 7.使用Binder进行数据传输的具体过程
  • 8.Binder框架中ServiceManager的作用
  • 9.什么是AIDL
  • 10.AIDL使用的步骤
  • 11.AIDL支持哪些数据类型
  • 12.AIDL的关键类,方法和工作流程
  • 13.如何优化多模块都使用AIDL的情况
  • 14.使用 Binder 传输数据的最大限制是多少,被占满后会导致什么问题
  • 15.Binder 驱动加载过程中有哪些重要的步骤
  • 16.系统服务与bindService启动的服务的区别
  • 17.Activity的bindService流程
  • 18.不通过AIDL,手动编码来实现Binder的通信

15.内存泄漏&内存溢出

  • 1.什么是OOM & 什么是内存泄漏以及原因
  • 2.Thread是如何造成内存泄露的,如何解决?
  • 3.Handler导致的内存泄露的原因以及如何解决
  • 4.如何加载Bitmap防止内存溢出
  • 5.MVP中如何处理Presenter层以防止内存泄漏的

16.性能优化

  • 1.内存优化
  • 2.启动优化
  • 3.布局加载和绘制优化
  • 4.卡顿优化
  • 5.网络优化

17.Window&WindowManager

  • 1.什么是Window
  • 2.什么是WindowManager
  • 3.什么是ViewRootImpl
  • 4.什么是DecorView
  • 5.Activity,View,Window三者之间的关系
  • 6.DecorView什么时候被WindowManager添加到Window中

18.WMS

  • 1.什么是WMS
  • 2.WMS是如何管理Window的
  • 3.IWindowSession是什么,WindowSession的创建过程是怎样的
  • 4.WindowToken是什么
  • 5.WindowState是什么
  • 6.Android窗口大概分为几种?分组原理是什么
  • 7.Dialog的Context只能是Activity的Context,不能是Application的Context
  • 8.App应用程序如何与SurfaceFlinger通信的
    View 的绘制是如何把数据传递给 SurfaceFlinger 的
  • 9.共享内存的具体实现是什么
  • 10.relayout是如何向SurfaceFlinger申请Surface
  • 11.什么是Surface

19.AMS

  • 1.ActivityManagerService是什么?什么时候初始化的?有什么作用?
  • 2.ActivityThread是什么?ApplicationThread是什么?他们的区别
  • 3.Instrumentation是什么?和ActivityThread是什么关系?
  • 4.ActivityManagerService和zygote进程通信是如何实现的
  • 5.ActivityRecord ProcessRecord
  • 6.ActivityManager ,ActivityManagerProxy的关系
  • 7.手写实现简化版AMS

20.系统启动

  • 1.android系统启动流程
  • 2.SystemServer,ServiceManager,SystemServiceManager的关系
  • 3.孵化应用进程这种事为什么不交给SystemServer来做,而专门设计一个Zygote
  • 4.Zygote的IPC通信机制为什么使用socket而不采用binder

     

21.App启动&打包&安装

  • 1.应用启动流程
  • 2.apk组成和Android的打包流程
  • 3.Android的签名机制,签名如何实现的,v2相比于v1签名机制的改变
  • 4.APK的安装流程

22.序列化

  • 1.什么是序列化
  • 2.为什么需要使用序列化和反序列化
  • 3.序列化的有哪些好处
  • 4.Serializable 和 Parcelable 的区别
  • 5.什么是serialVersionUID
  • 6.为什么还要显示指定serialVersionUID的值?

23.Art & Dalvik 及其区别

  • 1.Art & Dalvik 及其区别

24.模块化&组件化

  • 1.什么是模块化
  • 2.什么是组件化
  • 3.组件化优点和方案
  • 4.组件独立调试
  • 5.组件间通信
  • 6.Aplication动态加载
  • 7.ARouter原理

25.热修复&插件化

  • 1.插件化的定义
  • 2.插件化的优势
  • 3.插件化框架对比
  • 4.插件化流程
  • 5.插件化类加载原理
  • 6.插件化资源加载原理
  • 7.插件化Activity加载原理
  • 8.热修复和插件化区别
  • 9.热修复原理

26.AOP

  • 1.AOP是什么
  • 2.AOP的优点
  • 3.AOP的实现方式,APT,AspectJ,ASM,epic,hook

27.jectpack

  • 1.Navigation
  • 2.DataBinding
  • 3.Viewmodel
  • 4.livedata
  • 5.liferecycle

28.开源框架

  • 1.Okhttp源码流程,线程池
  • 2.Okhttp拦截器,addInterceptor 和 addNetworkdInterceptor区别
  • 3.Okhttp责任链模式
  • 4.Okhttp缓存怎么处理
  • 5.Okhttp连接池和socket复用
  • 6.Glide怎么绑定生命周期
  • 7.Glide缓存机制,内存缓存,磁盘缓存
  • 8.Glide与Picasso的区别
  • 9.LruCache原理
  • 10.Retrofit源码流程,动态代理
  • 11.LeakCanary弱引用,源码流程
  • 12.Eventbus
  • 13.Rxjava

文末

以上部分题目也是自己在复习期间在网上找的一些大厂面试题。我自己也将这些面试题做了解析整理并归纳成了一个文档,由于篇幅原因就没在文章里做展示了。好记性不如烂笔头,永远抱着一个“我应该会”的心态去刷面试题,在自己脑子过了一篇,感觉回答的上来,但往往一真跟面试官对上线就会卡壳,还是建议把每个面试题都去写一遍,再去做延伸。当你能将每一道面试题都能富有逻辑性的写出来的时候,那在面试的时候就绝对没有问题了。

本人的刷题目录已打包:


项目地址:https://github.com/hunanmaniu/AndroidNotes

整理不易,祝所有正在面试的小伙伴们,都能拿到自己理想的offer!

以上是关于2022各大厂商护网面试题的主要内容,如果未能解决你的问题,请参考以下文章

2022年Java秋招面试,程序员求职必看的Dubbo面试题

2022Android面试题合集最新整理版,移动开发架构师筑基必备

2022Android面试题合集最新整理版,移动开发架构师筑基必备

2022最新版 Redis大厂面试题总结(附答案)

各大厂测试开发面试题,都是实战积累下的

护网面试题5.0