应届生的面试题

网络协议

TCP和UDP有什么区别?

TCP是面向连接的,UDP无连接、不可靠

举例一些常见的协议以及对应的端口

tcp/ip协议有哪4层?

tcp/ip协议包括网络接口层、网络层(ARP、ICMP)、传输层(tcp、udp)、应用层

cookie和session的区别?

1
2
3
4
5
6
7
8
9
10
它们都是web服务器用来区别不同客户的。
cookie是一串小文本字符串存储在客户端,而session的形式和大小没有要求,存储在服务器端。

cookie的过期时间取决于程序的设计。
session依赖于名为JSESSIONID的cookie,而cookie JSESSIONID的过期时间默认为-1,只需关闭窗口该session就会失效,因而session不能达到长期有效的效果。

两种session的方式:
1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。

2、将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式。

工具类

1
2
3
4
5
1. nmap扫描参数
2. burp爆破弱口令修改线程
3. metasploit 
4. cobalt strike
5. sqlmap各种扫描方式使用的参数

xss与sql注入

xss有哪些类型

反射型、存储型、DOM类型

DOM类型XSS和其他类型的区别?

DOM类型是文档对象模型的意思,当用户输入参数可以修改文档对象模型,插入js代码,就可以叫做DOM XSS。

与其他XSS的区别是,DOM XSS并不需要服务器解析响应的直接参与,触发XSS靠的是浏览器端的DOM解析。

请简述下XSS和CSRF的区别?

XSS是跨站脚本伪造的意思,分为反射型xss,存储型xss,以及DOM类型。 当页面没有过滤用户输入的参数,就可以插入js脚本。如果是用户输入,页面马上输出的就叫做反射型xss。 如果用户输入保存到了数据库中,每个访问网页的用户都能访问,就是存储型xss。

csrf是客户端请求伪造的意思,攻击者需要伪造一个用户的身份来达到目的,例如利用管理员权限来新建用户之类。csrf需要登陆后操作,xss不需要。csrf的重点在于伪造用户的身份,而xss重点在于在web应用插入脚本语言。

xss的防御方式?

过滤标签

csrf漏洞的防御方式?

验证http referer;添加token验证

xss检查

一般意义上的XSS通常可以用简单的方法检测出来:当用户输入中某个参数的全部或其中一部分,原封不动地在源代码里出现时,我们就可以认为这个参数存在XSS漏洞。

SQL注入的无回显形式是怎样的?

SQL注入在网页前端无任何回显就是sql盲注。 sql盲注分为布尔型盲注,基于时间的盲注。

布尔型盲注:网页对于true或者false的sql查询语句,页面的响应不同,一般可以通过burp里页面长度参数可以观察到。

第二种是基于时间的盲注,无论sql语句是否正确,页面都没有不同。如果使用延时函数,如果网页确实延迟了响应,那么就说明有sql盲注。

sql注入有几种类型?

根据页面的响应方式,可以分为报错型注入、盲注、联合查询注入、堆查询注入。

mysql5.0以上和以下有什么区别?

小于mysql 5.0,没有information_schema这个表,需要暴力破解跑表名

mysql直接写入一句话需要的条件。

注入点是dba权限(最高权限),并且知道网站绝对路径。

Linux日志一般记录在哪里?

/var/log

php反序列化漏洞是什么?怎么防御?

当以序列化方式保存变量的时候,如果变量可以被用户恶意修改。那么当反序列化执行脚本的时候,就执行了攻击者的代码。

防御:对用户可控的参数,在反序列化后对参数进行严格的检查。

mysql有哪些函数,举个例子:

1
2
3
4
bin() 数字转为二进制
date() 提取时间的函数
ascii()
length()

渗透实战

  1. 为何一个mysql数据库的站,只有80端口开放? ```
  2. 开放了数据库端口,但是不是3306端口,修改到了不常用的端口。这时候需要65535个端口全部扫描一遍。
  3. 站库分离。数据库在内网中。
  4. 外网不允许连接3306端口。 ```

    遇到waf怎么办?

    waf处理请求可以分为三个阶段,针对不同的阶段,可以测试绕过waf。 首先在预处理阶段,waf判断是否要进行检查请求。

(决定是否对请求进行检查)绕过预处理阶段,就是让waf认为我们的请求不需要检查。也就是验证waf的规则是否全面。例如waf不会检查从内网请求的IP;或许waf只检查get和post请求,不坚持其他类型或者错误类型的请求,但是未正确配置的服务器也可以进行解析;使用大量恶意的请求,使waf过载,看waf是否会忽略其中的一些恶意请求。

(理解用户的输入)标准化阶段,waf开始解析我们的请求。绕过方法是让waf的解释与服务器端不同。例如,http参数碎片,将payload拆分为不同的段插入到不同的参数中,asp.net会将参数合并,于是waf没有检测到完整的payload,但是服务器仍然执行了payload。再比如各种payload编码绕过,服务器端会将url编码进行解码并执行payload。

(根据策略检查用户的输入)验证阶段,绕过方式是使用waf检测不到的载荷。使用payload暴力枚举,找到可以使用的payload;对waf进行逆向工程得知waf的规则再针对写payload。

如果给你一个机构的网站,你会怎么做渗透测试?

  1. 信息搜集
  2. 漏洞扫描 中间件漏洞;web漏洞;弱口令
  3. 提权 拿到webshell后,提权或通过reGeorg进行内网渗透。
  4. 内网渗透 端口转发、常规信息搜集(查找内网web应用、内网开放的端口)、漏洞扫描
  5. 痕迹擦除

你印象最深刻的一次渗透测试经历是怎样的?

扫描到一个网站,一开始只有8080 tomcat web server 和22 openssh开放,检查后没发现什么问题。 然后经过一段时间的全端口检查,发现60000端口开放了一个web应用。它可以用get参数获取其他web上的资源。于是可以尝试服务端请求伪造漏洞,经过测试http://localhost:888可以访问服务器本地的资源,用wfuzz找到了一个backup文件。

在备份文件中得到了用户名密码,登陆8080端口的tomcat服务器,msfvenom生成一个payload反弹webshell,上传war包。在web是访问一下war包即可获得webshell权限。

拿到webshell后,在家目录找到了ntds.dit文件。用python工具提取出其中的口令,即可得到一些用户的口令。在线网站破解后,得到了一个普通用户。

当时以为不能提权了,因为常规的检查用户权限,suid权限,linux内核版本都试过了。

然后就一直做信息搜集,发现内网有个机器每隔几分钟要下载一个我们服务器archive存档文件。

信息搜集显示这台机器是linux的。用nc -v IP 3389或者其他端口,如果22端口开放,那么就可能是linux机器;3389开放就可能是windows机器。

本地日志显示,机器的wget版本是小于1.18的,有任意文件上传漏洞,于是我找到exp上传到服务器并执行,修改exp的配置然后执行,就可以拿到内网那台机器器的/etc/passwd文件上传到攻击机。