面试


前言:在此记录平时看到的一些面试问题,为以后面试做准备,也巩固一下基础。

编程语言与操作系统:

  • Python 3与Python 2的区别,进行了哪些优化,增加了什么新特性
    • print,在python3中是一个函数,在python2中是一个语句。编码问题,在python2中默认用ascii编码,经常遇见编码问题,常在文件头加上# -*- coding: utf-8 -*-来声明使用UTF-8的类型,而在python3中默认就是使用utf-8。还有对bytes和原生unicode字符串的支持, 删除了unicode对象, str为原生unicode 字符串, bytes替代了之前的str等等。
  • 线程、协程的原理与区别
    • 线程对多任务经行同时处理,开辟的资源较大。协程对一个任务进行分时处理,开辟的资源较小。
  • 线程池与多线程的区别
    • 多线程解决多任务同时执行的需求,合理使用CPU资源。线程池开辟一段内存空间,里面含有很多的线程,当需要使用线程时可以从线程池中选取一个线程使用,这样避免了多次创建线程对象带来的资源消耗。
  • 并行与并发的区别
    • 并发: 任务数大于cpu的核数,多个任务轮流执行,因为cpu切换速度特别快,感觉同时执行,其实不然。并行: 任务数小于或者等于cpu的核数,这个时候多个任务是真正一起执行。
  • 进程间通信方式
    • IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等
    • 1.管道:速度慢,容量有限,只有父子进程能通讯
      2.FIFO:任何进程间都能通讯,但速度慢
      3.消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题
      4.信号量:不能传递复杂消息,只能用来同步
      5.共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存
      6.Socket,Socket位于应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用,从而实现进程在网络中通信。
      7.Streams,命名的 STREAMS 管道机制通过一种途径,使得进程可以给予管道一个文件系统中的名字,使其能够实现双向通信,避免了 FIFO 管道的单向通信。

协议:

  • TCP三次握手
    • tcp属于传输层,三次握手,首先A向B发SYN(同步请求),然后B回复SYN+ACK(同步请求应答),最后A回复ACK确认,SYN(synchronous建立联机),ACK(acknowledgement确认),PSH(push传送),FIN(finish结束),RST(reset重置),URG(urgent紧急),Sequence number(顺序号码),Acknowledge number(确认号码)
  • TCP与UDP的区别

    • TCP是面向连接的,可靠性高;UDP是基于非连接的,可靠性低
    • 由于TCP是连接的通信,需要有三次握手、重新确认等连接过程,会有延时,实时性差,同时过程复杂,也使其易于攻击;UDP没有建立连接的过程,因而实时性较强,也稍安全
    • 在传输相同大小的数据时,TCP首部开销20字节;UDP首部开销8字节,TCP报头比UDP复杂,故实际包含的用户数据较少。TCP在IP协议的基础上添加了序号机制、确认机制、超时重传机制等,保证了传输的可靠性,不会出现丢包或乱序,而UDP有丢包,故TCP开销大,UDP开销较小
    • 每条TCP连接只能时点到点的;UDP支持一对一、一对多、多对一、多对多的交互通信
    • 应用场景选择
      udp一般用于视频电话传输。对实时性要求高和高速传输的场合下使用UDP;在可靠性要求低,追求效率的情况下使用
      tcp一般要求数据完整性,准确性的传输。需要传输大量数据且对可靠性要求高的情况下使用。
  • HTTP协议的组成部分,常见的HTTP头的含义

    • Http协议分为三部分,Http状态行、Http请求头,Http响应

      请求头
      Accept:可接受响应类型(application/json、text/plain等)
      Accept-Charest:可接收的字符集(utf-8等)
      Accept-Encoding:可接受的相应内容的编码方式(gzip、deflate等)
      Accept-Language:可接受的响应内容语言列表(en-US、zh-CN等)
      Authorization:http认证信息(oauth认证)
      Cache-Control:缓存机制控制(on-cache、on-store、max-age、public、private)
      Connection:客户端优先使用的链接类型(keep-alive、upgrade)
      User-Agent:浏览器的身份标识字符串
      Origin:发起一个针对跨域资源共享的请求
      If-Modified-Since:上一次响应的Last-Modified的值回当做If-Modified-Since的值发送给服务器
      If-None-Match:上一次响应的ETag的值会当做If-None-Match的值发送给服务器
      Referer:表示跳转到当期那页面的之前页面
      响应头
      Cache-Control:no-store no-cache max-age等等
      Date:响应时间
      Content-Length:响应内容大小
      Content-Type:响应类型
  • 浏览器打开网站的工作流程

    • 搜索本地Dns > 本地host > 向宽带运营商服务器发起Dns解析请求 > 建立TCP连接(三次握手) > 数据传输 > TCP连接断开
  • 域名解析的原理

    • 通过DNS服务器,把域名解析为对应ip进行访问。
  • HTTPS的密钥交换过程

    • 客服端接收服务端传输的CA证书,从中提取公钥,加密数据传输到服务端,然后服务端通过自己的私钥解密获取数据。
  • HTTP状态码的含义

    • 1xx 信息处理状态码

    • 2xx 成功状态码

      200: 请求已成功,请求所希望的响应头或数据体将随此响应返回。出现此状态码是表示正常状态。
    • 3xx 重定向状态码

      302:临时性重定向
      301:永久重定向,与302的区别是对于SEO更加友好,搜索引擎到页面后爬虫会记录重定向的地址
      304:重定向到本地缓存,浏览器中存在访问页面时会用到
    • 4xx 客服端错误

      400:服务器不理解请求的语法
      403:服务端收到了请求,但拒绝访问
      404:找不到该路径对应的资源
    • 5xx 服务端错误

      500:服务器端执行请求时发生错误
      503:服务器处于超负载或者正在停机维护,现在无法处理请求

常见漏洞:

  • CSRF相关的内容(域的概念、跨域的方法、CSRF防御的各种方法对比、Same-site Cookie)

    • 跨站请求伪造,攻击者盗用了你的身份,以你的名义发送恶意请求。后面的内容等我学javascript再来补充。
  • 各种Java反序列化原理(RMI、Fastjson、Weblogic)

    • 附个链接吧,等我回来补,这方面不了解。。。 链接
  • SSRF漏洞原理与常见绕过方法

    • 服务端请求伪造,通过控制服务端请求来探测外网达不到的内网,可以通过file协议,gopher协议等进行攻击。

    • 绕过方法

      1.http://baidu.com@www.baidu.com/与http://www.baidu.com/请求时是相同的
      2.各种IP地址的进制转换
      3.URL跳转绕过:http://www.hackersb.cn/redirect.php?url=http://192.168.0.1/
      4.短网址绕过 http://t.cn/RwbLKDx
      5.xip.io来绕过:http://xxx.192.168.0.1.xip.io/ == 192.168.0.1 (xxx 任意)
      指向任意ip的域名:xip.io(37signals开发实现的定制DNS服务)
      6.限制了子网段,可以加 :80 端口绕过。http://tieba.baidu.com/f/commit/share/openShareApi?url=http://10.42.7.78:80
      7.探测内网域名,或者将自己的域名解析到内网ip
      8.例如 http://10.153.138.81/ts.php , 修复时容易出现的获取host时以/分割来确定host,
      但这样可以用 http://abc@10.153.138.81/ 绕过
      //来源先知
  • XXE漏洞原理与常见利用方法

    • XML外部实体注入漏洞,可以用来读文件,探测内网,在特殊清况还可以命令执行。有回显直接构造xml读敏感文件,无回显可以把内容带出来。
  • SQL注入原理与常见利用方法(包括报错注入、BOOL盲注、时间盲注、宽字节注入等等原理)

    • 用户的输入语句带到数据库进行执行,利用方法联合查询,报错注入很快,但是要有回显,盲注原理就是判断查询的正误,并且正确和错误的区别很明显,宽字节注入原理采用gbk编码,可以将\闭合。

经验相关:

  • 挖过的漏洞
    • 目前暂无,有会补充
  • 印象深刻的渗透经历
    • 目前暂无,有会补充

php中命令执行涉及到的函数:

  • 代码执行

    eval(),assert(),popen(),system(),exec(),shell_exec(),passthru(),pcntl_exec(),call_user_func_array(),create_function()
  • 文件读取:

    file_get_contents(),highlight_file(),fopen(),readfile(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()
  • 命令执行:

    system(),exec(),shell_exec(),passthru(),pcntl_exec(),popen(),proc_open()

Author: LiM
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source LiM !
 Previous
高校战疫网络安全分享赛部分wp 高校战疫网络安全分享赛部分wp
前言,现在看了nepnep的writeup,有很多当时有想法没完成的,现在补一下。 web 1.hackme打开页面,随便翻了一下,admin可以登录,有个框随便测了下,没什么发现,扫了一下目录有www.zip,找到了网站源码,看了一下,在
2020-03-07 LiM
Next 
2020安恒二月抗疫练习赛web-crypto writeup 2020安恒二月抗疫练习赛web-crypto writeup
Web web1考flask,ssti,加/2后有会显2,测试过滤了下划线,点,当时没有做出来。这里给出网上收集的一些payload,记录一下。具体可以看这里 传送门 {{""["\x5f\x5fclass\x5f\x5f"]["\x5f\
2020-02-25 LiM
  TOC