深信服的安全测试岗面经

深信服的面试应该是我所有面试里边面试的次数最多的了,一共面了两个岗位,面了6次。第一次报的安全测试岗,到三面部门负责的大佬的时候发现他们想要的是那种渗透工程师,就是能挖漏洞能搞ctf的人才,大佬很仁慈的劝我换个岗位,然后就换到了测试开发岗,然后又是面到了部门负责人的时候挂掉了。下面附上凉经,提供给以后有需要的人吧

安全测试岗:

1 中间人攻击的流程以及防御方法

中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。所谓的MITM攻击就是通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情
如SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击
信息篡改
当主机A、和主机B通信时,都由主机C来为其“转发”,如图一,而A、B之间并没有真正意思上的直接通信,他们之间的信息传递同C作为中介来完成,但是A、B却不会意识到,而以为它们之间是在直接通信。这样攻击主机在中间成为了一个转发器,C可以不仅窃听A、B的通信还可以对信息进行篡改再传给对方,C便可以将恶意信息传递给A、B以达到自己的目的。
信息窃取
当A、B通信时,C不主动去为其“转发”,只是把他们的传输的数据备份,以获取用户网络的活动,包括账户、密码等敏感信息,这是被动攻击也是非常难被发现的。
DNS欺骗
攻击者通过入侵DNS服务器、控制路由器等方法把受害者要访问的目标机器域名对应的IP解析为攻击者所控制的机器,这样受害者原本要发送给目标机器的数据就发到了攻击者的机器上,这时攻击者就可以监听甚至修改数据,从而收集到大量的信息。
如此说来,这种攻击理应是最强大最危险的,然而实际上它却很少派上大用场,为什么,因为DNS欺骗的攻击模型太理想了。在实际生活中,大部分用户的DNS解析请求均是通过自己的ISP服务器进行的,换句话说,就是系统在连接网络时会获取到ISP服务器提供的DNS服务器地址,所有解析请求都是直接发往这个DNS服务器的,攻击者根本无处入手,除非他能入侵更改ISP服务器上DNS服务的解析指向。所以这种手法在广域网上成功的几率不大

防范DNS劫持
应该注意不点击不明的连接、不去来历不明的网站、不要在小网站进行网上交易,最重要的一点是记清你想去网站的域名,当然,你还可以把你常去的一些涉及到机密信息提交的网站的IP地址记下来,需要时直接输入IP地址登录

2 渗透测试了解吗?二进制逆向是什么?

3 有过python写测试脚本或者攻击脚本的经历吗?

4 对机器学习方法的攻击有哪些

(这地方没懂面试官想问啥,直接回答的是如何采用机器学习方法来进行攻击,貌似不是人家想问的)

5 内网渗透的方法有哪些?

6 sql注入的方法有哪些?如何分类?

检测和如何绕过
https://blog.csdn.net/zzkkoo8/article/details/78812566
sql注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法
1).加入单引号 ’提交,
结果:如果出现错误提示,则该网站可能就存在注入漏洞。
2).数字型判断是否有注入;
语句:and 1=1 ;and 1=2 (经典)、’ and ‘1’=1(字符型)
结果:分别返回不同的页面,说明存在注入漏洞.
分析:and 的意思是“和”如果没有过滤我们的语句,and 1=1就会被代入SQL查询语句进行查询,
如果and前后的两条语句都是真的话就不会出错,但如果前后语句有一个为假的话,程序就会暴错。
也就表明程序有注入漏洞
防注入解决办法:
1>使用or 2>1 ; or 1>2来进行判断
结果:分别返回不同的页面,说明存在注入漏洞.
分析:or注入只要求前后两个语句只要有一个正确就为真,如果前后两个语句都是正确的,反而为
假。
记住:or注入时,or后面的语句如果是正确的,则返回错误页面!如果是错误,则返回正确页面
,说明存在注入点。
2> 使用xor 1=1; xor 1=2
结果:分别返回不同的页面,说明存在注入漏洞.
分析:xor 代表着异或,意思即连接的表达式仅有一个为真的时候才为真。
记住:xor注入时,xor后面的语句如果是正确的,则返回错误页面积,如果是错误,则返回正确
页面,说明存在注入点。
3>把and 1=1转换成URL编码形式后在提交
and 1=1 URL编码:%41%4E%44%20%%31%3D%31
4>使用-1;-0
分析:如果返回的页面和前面不同,是另一则新闻,则表示有注入漏洞,是数字型的注入漏洞;在
URL地址后面加上 -0,URL变成 news.asp?id=123-0,返回的页面和前面的
页面相同,加上-1,返回错误页面,则也表示存在注入漏洞.
3).字符型判断是否有注入:
语句:’ and ‘1’=1;’ and ‘1=2(经典)
结果:结果:分别返回不同的页面,说明存在注入漏洞.
分析:加入’ and ‘1’=1返回正确页面,加入’ and '1=2返回错误页面,说明有注入漏同。
sql注入是如何产生的?
1.web开发人员无法保证所有的输入都已经过滤
   2.攻击者利用发送给sql服务器的输入数据构造可执行代码
3.数据库未作相应的安全配置(对web应用设置特定的数据库账号,而不使用root或管理员账号,特定数据库账号给予一些简单操作的权限,回收一些类似drop的操作权限)

防御sql注入方法:
 遵循编程规范,首先执行预编译,随后再填写参数,这样参数会替换掉编译好的语句中的?占位符,最后执行完整的sql语句
 严格检查输入变量的类型和格式
 对字符串类型的参数的校验 (正则校验)
 使用存储过程。
存储过程(Stored Procedure)是一组完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过调用存储过程并给定参数(如果该存储过程带有参数)就可以执行它,也可以避免SQL注入攻击
过滤和转义特殊字符:1.单引号(’) 2.双引号(") 3.反斜杠(\)
其他回答:
(1)数据有效性校验。如果一个输入框只可能包括数字,那么要通过校验确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符,最好的方法是增加字符复杂度自动验证功能。确保应用程序要检查以下字符:分号、等号、破折号、括号以及SQL关键字。另外限制表单数据输入和查询字符串输入的长度也是一个好方法。如果用户的登录名最多只有10个字符,那么不要认可表单中输入10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。
(2)封装数据信息。对客户端提交的数据进行封装,不要将数据直接存入cookie中,方法就是在编程的代码中,插入session、if、try、else,这样可以有效地防止攻击者获取cookie中的重要信息
(3)去除代码中的敏感信息。将在代码中存在的用户名、口令信息等敏感字段删除,替换成输入框

SQL=" select from users where username = ’admin’and password= ’1234567’ "

如:这样显然会暴露管理员的用户名、口令信息。可以将其修改成:

SQL= " select * from users where username='" +Txtuser.Text + "' and userpwd='" + Textpwd.Text + "'"

这样就安全了很多,入侵者也是不会轻易的就获取到用户名、口令信息
(4)替换或删除单引号。使用双引号替换掉所有用户输入的单引号,这个简单的预防措施将在很大程度上预防SQL注入漏洞攻击,单引号时常会无法约束插入数据的Value,可能给予输入者不必要的权限。用双引号替换掉单引号可以使大部分SQL注入漏洞攻击失败
(5)指定错误返回页面。攻击者有时从客户端尝试提交有害代码和攻击字符串,根据Web Service给出的错误提示信息来收集程序及服务器的信息,从而获取想得到的资料。应在Web Service中指定一个不包含任何信息的错误提示页面。
(6)限制SQL字符串连接的配置文件。使用SQL变量,因为变量不是可以执行的脚本,即在Web页面中将连接数据库的SQL字符串替换成指定的Value,然后将Web.config文件进行加密,拒绝访问。
(7)设置Web目录的访问权限。将虚拟站点的文件目录禁止游客用户(如:Guest用户等)访问,将User用户权限修改成只读权限,切勿将管理权限的用户添加到访问列表。
(8)最小服务原则。Web服务器应以最小权限进行配置,只提供Web服务,这样可以有效地阻止系统的危险命令,如ftp、cmd、vbscript等。
(9)鉴别信息加密存储。将保存在数据库users表中的用户名、口令信息以密文形式保存,也可以对users表进行加密处理,这样可以大大增加对鉴别信息访问的安全级别。
(10)用户权限分离。应尽可能的禁止或删除数据库中sa权限用户的访问,对不同的数据库划分不同的用户权限,这样不同的用户只能对授权给自己的数据库执行查询、插入、更新、删除操作,就可以防止不同用户对非授权的数据库进行访问

测试开发岗:

hadoop切分文件的最大长度是多少?
128M
块 是HDFS存储系统当中的最小单位,HDFS默认定义一个块的大小为64MB

三面:

1 python装饰器

这个在另外一篇

2 协程怎么实现、与线程的区别

协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。子程序是由栈实现的。协程看上去也是子程序,但执行过程中,在子程序内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。注意,在一个子程序中中断,去执行其他子程序,不是函数调用,有点类似CPU的中断
协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈
并发编程中,协程与 线程类似,每个协程表示一个执行单元,有自己的本地数据,与其他协程共享全局数据及资源池。协程的特点在于是一个线程执行
协程需要操作员单独写调度逻辑,对CPU来说,协程也就是单线程,因此CPU 不需要考虑怎么调度、切换上下文,省去了CPU开销,所以,协程又在一定程度上好于多线程
协程与多线程相比优势
最大的优势就是协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。
第二大优势就是不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需要判断状态就好了,所以执行效率比多线程高很多。
因为协程是一个线程执行,那怎么利用多核CPU呢?最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。
协程与多线程进行比较

  1. 一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。
  2. 线程进程都是同步机制,而协程则是异步
  3. 协程能保留上一次调用时的状态,每次过程重入时,就相当于进入上一次调用的状态
    对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保持状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序
    实现的例子:
    传统的生产者-消费者模型是一个线程写消息,一个线程取消息,通过锁机制控制队列和等待,但一不小心就可能死锁。
    如果改用协程,生产者生产消息后,直接通过yield跳转到消费者开始执行,待消费者执行完毕后,切换回生产者继续生产,效率极高:
    代码实现
    Python对协程的支持还非常有限,用在generator中的yield可以一定程度上实现协程。虽然支持不完全,但已经可以发挥相当大的威力了
    geve 是基于协程的python网络函数库,使用greenlet 在libev事件循环顶部提供一个有高级别并发性的API。

3 代码:寻找一个字符串中最长的重复子串

def longest_substring(str):
    if str == None or len(str)==0:
        return 0
    maxlen = 0 #最大的字串长度
    position = {}#保存非重复字符最后的位置
    start = 0#保存非重复字串开始的位置
    s =""
    for i in range(len(str)):
        if (str[i] in position) and (position[str[i]] >= start) :  #发现重复字符
            start = position[str[i]] +1   #将开始的下标更新
            position[str[i]] = i   
        position[str[i]] = i
        current_len = i-start+1 #当前非重复字串的长度
        if current_len>maxlen:
            maxlen=current_len
            s = str[start:i+1]
        #maxlen = max(maxlen, current_len)
    return s

if __name__ == '__main__':
    print 'longest substring:'
    str = 'abcabcbb'
    print longest_substring(str)
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值