暑期实习面试总结

简单总结下这两天的面试,也算给自己留个底,面试了之后才知道自己有多菜,赶紧照着补补。

字节是在牛客网面试,面试官都很准时,说几点就是几点来,要开摄像头,上面有个 ide 可以换语言,在上面写代码面试官那边可以看到。

长亭和奇安信的面试都是电话面,简单跟你聊一聊就没了。

字节一面

面试时长大约30分钟

  • 简单介绍你自己
  • 你说到 CTF 经历,讲讲印象深刻的 CTF 题目吧
  • 你刚才说的反序列化,原理简单讲一下
    • 魔术方法、反序列化逃逸、变形绕 waf 之类的
  • Java 的反序列化接触过吗
    • 调过 CC 链和 fastjson
  • 简单讲讲 CC 链原理
  • fastjson 反序列化原理
  • fastjson 是怎么修复的,如果让你来修复,你会怎么办
  • 聊聊 SSRF
  • 刚刚说到 redis,讲讲 redis 的利用方式
    • 未授权和主从复制
  • 前端了解多少
    • 我直接说不怎么了解
  • 跨域,条件有哪些
    • 这个我愣是没想起来,后来查是域名、端口、协议相同
    • 后来他问 a.baidu.com 和 b.baidu.com 是不是同源的(不是 域名不同)
  • 如果有个 post 请求的 csrf,但是服务器接受的是 json 格式,怎么整
    • 直接不会,他说可以在data段强行弄成json格式,如果服务器没有校验 content-type 就可以打,咱也不懂
  • 惯例反问
    • 我问了他们平时干啥 他说就是渗透之类的

字节二面

一面之后他让我等着,然后五分钟之后第二个面试官就来了

面试时长大约40分钟

  • 来写段代码,有个 get 请求的 api,返回一个 json,把 json 中的 url 给提取出来
    • 我写的:
import requests as r
import json

def parseJson(url):
	try:
        resp = r.get(url).text
		dictJson = json.dumps(resp)
		return dictJson['url']
	except Exception as e:
		print(e)
		exit()

if __name__ == '__main__':
	url = 'http://baidu.com'
	resultUrl = parseJson(url)
	print(resultUrl)
  • 你看看你刚写的代码有没有问题
    • 我想他可能是说异常处理那块,一问还真是
  • 你这个异常处理捕获的是哪个异常
    • 我说 try 这里每一行应该都单独写一个 try,不过我为了赶时间就写一起了,然后跟他说了怎么弄
  • 好,如果我们不想让他抛出异常,有哪些写法
    • get 那里可能会网络超时 加 timeout = 3
    • dumps 可能不是 json 格式,这个没想好怎么检测,就直接跟他说了
    • 最后 return 哪行,可能 json 里没有 url 这个 key
    • 最后改成了下面这样:
import requests as r
import json

def parseJson(url):
	print("[+] Request start.")
	try:
		resp = r.get(url, timeout = 3)
		if resp.status_code == 200:
			try:
				dictJson = json.dumps(resp)
				if 'url' in dictJson:
					return dictJson['url']
				else:
					print("[-] Key 'url' not found.")
					exit()
			except Exception as e:
				print("[-] Json parse failed because of {}.".format(e))
				exit()
		else:
			print("[-] Request for api {} failed because of it returned {}.".format(url, resp.status_code))
			exit()

	except Exception as e:
		print("[-] Request for api {} failed because of {}.".format(url, e))
		exit()
	

if __name__ == '__main__':
	url = 'http://baidu.com'
	resultUrl = parseJson(url)
	print(resultUrl)
  • if 'url' in dictJson: 哪里可不可以换种写法
    • 我说了先把 dictJson.keys() 拿出来遍历一下看看有没有 url 这 key,他说这不是一样嘛,我一想也是,然后就说我想不出来了
  • SQL 注入熟悉吗,讲一下原理
  • 写一下手工注入的 payload
  • 你写的这个 payload,为什么用 group_concat(),不用 concat(),这俩有啥区别
    • 我说的一个按列拼接,一个直接拼,后来一查蒙对了
  • 报错注入熟悉吗,讲讲原理,写个 payload
  • 怎么防御 sql 注入
    • PDO,安全编码啥的
  • 使用 PDO 还能注入吗
  • 还接触过哪些数据库,oracle 和 mssql 怎么注入
    • 我不会,就把话题扯到 redis 上了
  • 那你说说 redis 怎么利用
    • 跟一面一样
  • redis 怎么防御
  • 怎么防御 SSRF
    • 危险协议、危险端口、危险字符(黑名单)
    • 只能访问固定域名的资源(白名单)
  • 惯例反问
    • 我问了他们组业务,是做黑盒扫描器的,怪不得这么多代码问题

字节三面

二面刚面完就约了三面时间,在二面的第三天下午

面试官感觉是个领导,不苟言笑的感觉

面试时长大约25分钟

  • 介绍自己
  • 讲讲去年护网的经理
  • 你刚刚提到 shiro,讲讲原理
  • CC 链是怎么一回事儿
  • Weblogic 有了解吗
    • 无,直接去世
  • 有关注过比较新颖的攻击方式吗
    • 我说了black hat 那个 when https hack you
  • 好,简单讲一下
  • 问一下 https 的原理
  • 沙箱有了解过吗
  • 怎么判断你现在在沙箱里
  • 就比如牛客网这个在线的 py 解释器,你试试能不能拿 shell
    • 肯定不能啊
  • 你怎么绕过这种限制
    • 当时没想到多少,就说了个 execve 这个系统调用可以执行命令
    • 或者写到其他目录下有执行和写权限的文件中上车执行命令
    • 写计划任务(公钥当然也是可以写的,但是肯定没法 ssh 连上,所以要反弹 shell 需要计划任务)
  • 后来就是聊有的没的,就比如你最近在干嘛呀,职业规划呀,为什么要来字节实习呀 blabla
  • 惯例反问

字节四面

三面之后第五天才给我打电话告诉我过了,约了下礼拜四面

面试时长大约 35 分钟

这次面试官很和蔼,就是邻居大叔的感觉,笑眯眯的。写代码的时候我写的有问题,没法输出结果,他说没关系,领会精神就行了。

  • 介绍自己
  • 讲讲你的 CTF 经历
  • 印象最深的一道题
  • 你从 CTF 中学到了什么
  • 你刚刚说到你在学 java,为什么要学 java
    • 我说因为 java 的资产多
  • 那为什么 java 的资产多呢?
  • 简单说说你的 hw 经历
  • 你 hw 的时候对方的网络架构是什么样的
  • 代码题,问怎么把一个 int 逆序,我跟他边聊边写边改,写了四版:
# coding=utf-8
import sys

def demo1(num):
    tmpStr = str(num)
    return tmpStr[::-1]
# 问:你这个负数情况下怎么办呢

def demo2(num):
    # negtive num
    tmpStr = str(num)
    if num < 0:
        tmpRes = "-" + tmpStr[::-1][:-1]
    else:
        tmpRes = tmpStr[::-1]
    return tmpRes
# 问:这个时间复杂度是多少呢,怎么降低

def demo3(num):
    # multy
    tmpNum = num
    index = 0
    tmpList = []
    while tmpNum > 9:
        # tmpN 取最低位
        tmpN = tmpNum % 10
        tmpList.append(tmpN)
        tmpNum = tmpNum // 10
    tmpList.append(tmpNum)
    index = len(tmpList)
    tmpRes = 0
    for i in range(index):
        tmpIndex = index - 1 - i
        tmpRes = tmpRes + (tmpList[tmpIndex] * 10 ** tmpIndex )
    return tmpRes
# 问:这个时间复杂度是多少,空间复杂度是多少,怎么算的,还能不能在优化

def demo4(num):
    # multy
    tmpNum = num
    tmpRes = 0
    while tmpNum > 9:
        # tmpN 取最低位
        tmpN = tmpNum % 10
        tmpRes = tmpRes + tmpN
        tmpRes = tmpRes * 10
        tmpNum = tmpNum // 10
    tmpRes = tmpRes + tmpNum
    return tmpRes

print(demo4(123))
  • 你写完了这个代码,该使用什么测试用例去测试呢
  • 你有没有职业规划,想做什么呢
  • 实习主要想来学习什么东西
  • 反问

这次面完之后就是 hr 面了,hr 面也就问问你为啥对这个感兴趣呀,你们学校有没有社团啥的呀,社团有多少人呀,有没有愿意来一起实习的呀这种问题,hr 面完大概一礼拜就给 offer 了。

QAX 护网

面试时长大约15分钟

  • 简单介绍下自己
  • 护网拿 shell 的基本流程
  • 你刚刚说的 shiro,原理懂吗
  • 用户序列号之后放在哪
  • CC 链怎么回事
  • 还有别的反序列化吗
    • 我说了个 thinkphp
  • 别说 php。。。我给你举个例子,fastjson 利用方式
  • weblogic 你了解的多不,都有啥
    • 文件上传,越权和命令执行那个 combo,还有 ssrf 和弱口令
  • 哪个中间件了解的比较多
  • 注入拿 shell ,两个条件
    • web 根目录和写权限
    • secure_file_priv
  • 怎么找 web 跟目录
  • 有 shell,不出网怎么利用
  • 正向代理了解不,介绍几个工具
    • reGeorg
  • 冰蝎,内存马了解吗
  • 给你一个内存马,能编译出一个可以利用他的冰蝎不

长亭实习

面试时长大约15分钟,第三天给了 offer

  • 简单介绍你自己
  • 护网拿的 shell,介绍一下怎么拿的
  • shiro 反序列化原理
  • 内存马用过吗
    • 用过 php 的
  • 简单讲一下原理,怎么写
  • 除了 shiro 还对什么比较熟
  • 讲讲 redis
  • 除了 shiro 反序列化,还懂什么反序列化呢
  • fastjson 简单讲一下
  • 代码审计你懂多少
    • 只会 php
  • php 审计,怎么审计出 sql 注入
  • sqlserver 了解不 oracle了解不
    • 都不了解,惨惨
  • sql 注入绕 waf,怎么绕
  • 内网渗透你了解不
    • 不熟,强行说了几个 cs 操作
  • 了解 PDH 不
    • 完全不了解

Imagin 丨 京ICP备18018700号-1


Your sidebar area is currently empty. Hurry up and add some widgets.