2019届秋招
笔试分为选择题和问答题,问答题如下:
一、加密分类、优缺点
1、常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。
2、对称加密:指加密和解密使用相同密钥的加密算法。常见的对称加密算法:DES、3DES、RC4、RC5、RC6和AES
优缺点:密钥较短,加密处理简单,加解密速度快。
适用于加密大量数据的场合。
3、非对称加密: 指加密和解密使用不同密钥的加密算法,也称为公私钥加密。常见的非对称加密算法:RSA、ECC
优缺点:密钥尺寸大,加解密速度慢。一般用来加密少量数据,比如DES的密钥。
一般用来加密少量数据,比如DES的密钥。
4、Hash算法:Hash算法特别的地方在于它是一种单向算法,用户可以通过Hash算法对目标信息生成一段特定长度的唯一的Hash值,却不能通过这个Hash值重新获得目标信息。常见的Hash算法:MD5、SHA、SHA-1
优缺点:将任意大小的数据映射到一个较小的、固定长度的唯一值。通过散列结果,无法推出任何部分的原始信息。
一般用来计算摘要,校验安装文件的完整性,存储和校验用户口令,校验重复提交的消息,作为数据库乐观锁的条件,作为数据库表分区的分区条件
二、渗透测试思路、流程
1 前期交互阶段
对他的网络或者服务器产生的影响有足够的了解。确定渗透测试的范围、目标以及代表客户进行测试时的特殊需求。商讨渗透测试的范围、目标、规定。
2 情报搜集阶段
通过google hacking、baidu进行搜集,whois查询域名ip,通过host命令来查询dns服务器,域名枚举,反向地址解析,DNS区域传送漏洞,服务指纹识别,nmap扫描端口服务,社会工程学。
3 威胁建模阶段
使用在情报搜集阶段所获取到的信息,来标识出目标系统上可能存在的安全漏洞与弱点。确定最为高效的攻击方法。
4 漏洞分析阶段
分析端口,使用nessus、owasp zap、sqlmap等进行漏洞扫描。对一些常见漏洞进行手工检测。
5 渗透攻击阶段
根据相应漏洞在漏洞库中寻找相应利用方式。传递载荷,启动运行。获取目标访问权限。在目标建立堡垒,远程控制和植入。
6 后渗透攻击阶段
以特定的业务系统作为目标,识别出关键的基础设施,并寻找目标最具价值和尝试进行安全保护的信息和资产,当你从一个系统攻入另一个系统时,你需要演示出能够对目标造成最重要业务影响的攻击途径。
7 报告阶段
使用报告文档来交流在渗透测试过程中做了哪些,如何做的,以及最为重要的----如何修复所发现的安全漏洞和弱点。
三、sql注入机制 诸如效果分类 以及修复方法
注入机制:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
分类:
1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行来判断。
3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4、联合查询注入,可以使用union的情况下的注入。
5、堆查询注入,可以同时执行多条语句的执行时的注入。
修复方法:
1、检查变量数据类型和格式。只要是有固定格式的变量,在SQL语句执行前,应该严格按照固定格式去检查,确保变量是我们预想的格式。
2、过滤特殊符号,addslashes函数过滤转义
3、绑定变量,使用预编译语句
四、dll注入常见方法和过程
方法:
1、利用 CreateRemoteThread 2、采用CreateProcess
3、利用注册表 4、利用Windows Hooks
5、利用特洛伊DLL 6、无DLL注入
7、利用DLL劫持内存补丁技术 8、利用未公开函数InitializeLpkHooks
9、利用输入法注入 10、利用NtResumeThread 实现全局挂钩
过程:
注入Dll:
1,OpenProcess获得要注入进程的句柄
2,VirtualAllocEx在远程进程中开辟出一段内存,长度为strlen(dllname)+1;
3,WriteProcessMemory将Dll的名字写入第二步开辟出的内存中。
4,CreateRemoteThread将LoadLibraryA作为线程函数,参数为Dll的名称,创建新线程
5,CloseHandle关闭线程句柄
卸载Dll:
1,CreateRemoteThread将GetModuleHandle注入到远程进程中,参数为被注入的Dll名
2,GetExitCodeThread将线程退出的退出码作为Dll模块的句柄值。
3,CloseHandle关闭线程句柄
3,CreateRemoteThread将FreeLibraryA注入到远程进程中,参数为第二步获得的句柄值。
4,WaitForSingleObject等待对象句柄返回
5,CloseHandle关闭线程及进程句柄。