自我介绍
有没有挖过src?
平时web渗透怎么学的,有实战吗?有过成功发现漏洞的经历吗?
做web渗透时接触过哪些工具
xxe漏洞是什么?ssrf是什么?
打ctf的时候负责什么方向的题
为什么要搞信息安全,对安全这一块有多大的兴趣,以后会不会转行,还是打算一直从事安全方面工作
自己平时怎么学安全的,如果让你做一个新的方向(app安全),会投入多少时间去学习,还是说有自己想做的方向
聊一聊代码审计的流程
平时是怎么做代码审计的
有没有审计过开源框架、CMS?
怎么判断一个数据库是mysql还是oracle的?
sql注入的种类,利用方式?
聊一聊sql注入的原理及防御思路
做开发的时候用的是什么语言
做java开发的时候用过什么框架,能不能做java安全开发
有没有做过安卓开发
有没有用python写过工具?
msf利用的是哪个漏洞,有没有成功反弹?
护网的时候主要做了些什么,聊一聊对安全产品的理解
公司现在需要做app安全的人,现在要你做的话,你会去学吗,或者说感兴趣吗,还是说有别的想做的,不想做app安全,能投入多少时间去学
内网渗透了解吗?聊一聊内网渗透的思路
面试题合集
1、大厂高频面试题汇总
这次花了三个月的时间整理各大安全厂商的网络安全服务职位(包括但不仅限于:安全服务工程师,安全运营工程师,安全运维工程师,安全攻防工程师“)的面试问题。
话不多说,让我们一起学习吧
目前来说还有非常多的不严谨和冗余,恳请小伙伴们指正修改!
1.1、SQL注入防护方法
失效的身份认证和会话管理
跨站脚本攻击XSS
直接引用不安全的对象
安全配置错误
敏感信息泄露
缺少功能级的访问控制
跨站请求伪造CSRF
使用含有已知漏洞的组件
未验证的重定向和转发
1.2、常见的Web安全漏洞
SQL注入
XSS
文件遍历、文件上传、文件下载
垂直越权、水平越权
逻辑漏洞
首先对于新人来说,大多数同学都是没有实战经验的,对应面试官提问聊聊你的渗透测试实战,但很多人却无从开口。
1.3、给你一个网站你是如何来渗透测试的?
在获取书面授权的前提下。
1)信息收集
获取域名的whois信息,获取注册者邮箱姓名电话等。
查询服务器旁站以及子域名站点,因为主站一般比较难,所以先看看旁站有没有通用性的cms或者其他漏洞。
查看服务器操作系统版本,web中间件,看看是否存在已知的漏洞,比如IIS,APACHE,NGINX的解析漏洞
查看IP,进行IP地址端口扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等
扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏,比如php探针
google hack 进一步探测网站的信息,后台,敏感文件
2)漏洞扫描
开始检测漏洞,如XSS,XSRF,sql注入,代码执行,命令执行,越权访问,目录读取,任意文件读取,下载,文件包含,
远程命令执行,弱口令,上传,编辑器漏洞,暴力破解等
3)漏洞利用
利用以上的方式拿到webshell,或者其他权限
4)权限提升
提权服务器,比如windows下mysql的udf提权,serv-u提权,windows低版本的漏洞,如iis6,pr,巴西烤肉,
linux藏牛漏洞,linux内核版本漏洞提权,linux下的mysql system提权以及oracle低权限提权
5) 日志清理
6)总结报告及修复方案
1.4、渗透测试流程
项目访谈
信息收集:whois、网站源IP、旁站、C段网站、服务器系统版本、容器版本、程序版本、数据库类型、二级域名、防火墙、维护者信息
漏洞扫描:Nessus, AWVS
手动挖掘:逻辑漏洞
验证漏洞
修复建议
(如果有)基线检查/复验漏洞
输出报告
概述
测试基本信息
测试范围
测试时间
测试任务
测试过程
信息安全风险综合分析
整体风险分析
风险影响分析
系统安全分析
安全漏洞列表
解决方案建议
复测报告
SQL面试题
1.5、SQL注入类型
基于报错注入
基于布尔的注入,根据返回页面判断条件真假的注入
基于时间的盲注,不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
宽字节注入
联合查询,可以使用 union 的情况下的注入。
堆查询注入,可以同时执行多条语句的执行时的注入。
7.6、SQL注入的原理
通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。通常未经检查或者未经充分检查的用户输入数据或代码编写问题,意外变成了代码被执行。
1.7、如何进行SQL注入的防御
关闭应用的错误提示
加waf
对输入进行过滤
限制输入长度
限制好数据库权限,drop/create/truncate等权限谨慎grant
预编译好sql语句,python和Php中一般使用?作为占位符。这种方法是从编程框架方面解决利用占位符参数的sql注入,只能说一定程度上防止注入。还有缓存溢出、终止字符等。
数据库信息加密安全(引导到密码学方面)。不采用md5因为有彩虹表,一般是一次md5后加盐再md5
清晰的编程规范,结对/自动化代码 review ,加大量现成的解决方案(PreparedStatement,ActiveRecord,歧义字符过滤, 只可访问存储过程 balabala)已经让 SQL 注入的风险变得非常低了。
具体的语言如何进行防注入,采用什么安全框架
1.8、sqlmap,怎么对一个注入点注入?
如果是get型号,直接,sqlmap -u “诸如点网址”.
如果是post型诸如点,可以sqlmap -u "注入点网址” --data=“post的参数”
如果是cookie,X-Forwarded-For等,可以访问的时候,用burpsuite抓包,注入处用*号替换,放到文件里,然后sqlmap -r “文件地址”
1.9、mysql的网站注入,5.0以上和5.0以下有什么区别?
10年前就出了5.0,现在都到5.7了,没啥意义的问题
5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。
5.0以下是多用户单操作,5.0以上是多用户多操做。
1.10、MySQL存储引擎?
1、InnoDB:主流的存储引擎。支持事务、支持行锁、支持非锁定读、支持外键约束
为MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在 SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至在同一个查询中也可以混合
InnoDB存储引擎为在主内存中缓存数据和索引而维持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原始磁盘文件)。这与MyISAM表不同,比如在MyISAM表中每个表被存放在分离的文件中。InnoDB表可以是任何尺寸,即使在文 件尺寸被限制为2GB的操作系统上
InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键
2、MyISAM:访问速度快,不支持事务,逐渐被淘汰
3、MEMORY:BTREE索引或者HASH索引。将表中数据放在内存中,并发性能差。
4、MERGE、Archive等等不常用的
1.11、什么是事务?
事务是一组原子性的SQL语句或者说是一个独立的工作单元,如果数据库引擎能够成功对数据库应用这组SQL语句,那么就执行,如果其中有任何一条语句因为崩溃或其它原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。
举个银行应用的典型例子:
假设银行的数据库有两张表:支票表和储蓄表,现在某个客户A要从其支票账户转移2000元到其储蓄账户,那么至少需求三个步骤:
a.检查A的支票账户余额高于2000元;
b.从A的支票账户余额中减去2000元;
c.在A的储蓄账户余额中增加2000元。
这三个步骤必须要打包在一个事务中,任何一个步骤失败,则必须要回滚所有的步骤,否则A作为银行的客户就可能要莫名损失2000元,就出问题了。这就是一个典型的事务,这个事务是不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,不可能只执行其中一部分,这也是事务的原子性特征。
1.12、读锁和写锁
读锁是共享的,即相互不阻塞的,多个客户在同一时刻可以读取同一资源,互不干扰。写锁是排他的,即一个写锁会阻塞其它的写锁和读锁,只有这样,才能确保给定时间内,只有一个用户能执行写入,防止其它用户读取正在写入的同一资源。写锁优先级高于读锁。
1.13、MySQL的索引
索引是帮助MySQL高效获取数据的数据结构。MYISAM和InnoDB存储引擎只支持BTree索引;MEMORY和HEAP储存引擎可以支持HASH和BTREE索引。
1.14、ORDER BY在注入的运用
order by后面可以加字段名,表达式和字段的位置,字段的位置需要是整数型。
1.15、GPC是什么?GPC之后怎么绕过?
如果magic_quotes_gpc=On,PHP解析器就会自动为post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符(认为是php的字符)引起的污染。
1.16、Mysql一个@和两个@什么区别
@为用户变量,使用SET @var1=1赋值
@@ 为系统变量 ,包括全局变量show global variables \G;和会话变量show session variables \G;
1.17、注入/绕过常用的函数
1、基于布尔SQL盲注
left(database(),1)>'s'
ascii(substr((select table_name information_schema.tables where tables_schema=database()limit 0,1),1,1))=101 --+
ascii(substr((select database()),1,1))=98
ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM security.users ORDER BY id LIMIT 0,1),1,1))>98%23
regexp正则注入 select user() regexp '^[a-z]';
select user() like 'ro%'