域名信息收集
获取域名的注册信息,包括该域名的DNS服务器信息和注册人的联系信息
可以whois查询(爱站,站长之家)
可以备案信息查询(天眼查,ICP备案查询网)
子域名攻工具:Layer子域名挖掘机
在线查询:站长之家
搜索引擎枚举 ,然后爬虫 site:xxx.com
第三方聚合应用枚举:在线DNS侦察和搜索的工具DNSdumpster
证书透明度公开日志枚举
网络信息收集
某些中大型厂商通过有可能使用的是自建的托管机房,他们的业务通常部署在同一个C类地址子网中,这就给了我们可以利用的空间了。
就好像我们家里的路由器一样,当我破解了一个邻居的wifi密码后,接收他的网络,这个时候我就能使用监听工具,对他所发出/接收的数据进行拦截监听,从中获取得相关的账号、密码及信息,当然也有其它的方法和思路可以获取目标服务器的数据或权限。例如:C段中的业务系统与目标服务器的业务系统有关联,使用的是同一个数据库,那么就有可能直接获取到目标服务器的信息了。
使用nmap扫描
namp 192.168.0.1/24
在线c段扫描
https://phpinfo.me/bing.php
2.旁站信息收集
旁站指的是同一服务器上的其他网站,很多时候,有些网站可能不是那么容易入侵。那么,可以查看该网站所在的服务器上是否还有其他网站。如果有其他网站的话,可以先拿下其他网站的webshell,然后再提权拿到服务器的权限,最后就自然可以拿下该网站了!
寻找真实IP
1.如何判断CDN是否存在?
多地ping
2.怎么绕过CDN
1.邮件服务查询
利用原理:邮件服务器 大部分不会做CDN 利用注册,找回密码等网站发送邮件进行验证,获取验证码,查看邮件代码获取IP地址
2.网站漏洞查找
1)目标敏感文件泄露,例如:phpinfo之类的探针、GitHub信息泄露等。
爬取的时候遇到WAF的cc攻击防范怎么办?
延时,白名单访问 ,ip代理池子
利用工具()
2)XSS盲打,命令执行反弹shell,SSRF等。
3)无论是用社工还是其他手段,拿到了目标网站管理员在CDN的账号,从而在从CDN的配置中找到网站的真实IP。
3.查询子域名
由于目标服务可能在主站上做好了相应的CDN,但是由于种种原因二级域名没有做,这时我们可以从这个方面入手进行查询
4.国外访问
只针对于中国地区进行cdn防护,没有部署国外访问的CDN的访问节点
代理网站App Synthetic Monitor(https://asm.ca.com/en/ping.php)
5.查询域名的解析记录:
查看 IP 与 域名绑定的历史记录,可能会存在使用 CDN 前的记录,相关查询网站有:
https://dnsdb.io/zh-cn/ ###DNS查询
https://x.threatbook.cn/ ###微步在线
http://toolbar.netcraft.com/site_report?url= ###在线域名信息查询
http://viewdns.info/ ###DNS、IP等查询
6.App
如果目标网络站有自己的App 可以尝试通过利用fiddler或Burp Suite抓取App的请求,从里面找到目标的真实ip
借助工具批量扫描对应ip段所有开了的80,443,8080端口的ip,
nmap
御剑
然后逐个尝试ip访问,观察相应是否为目标站点。
服务器信息
操作系统判断?
ping探测,Win,TTL值都是一般是128,Linux则是64。所以大于100的肯定是Windows,而几十的肯定是Linux。
Windows大小写不敏感,Linux大小写敏感
对服务器进行扫描: nmap -O xx.xx.xx.xx
主机信息以及端口信息?
NMAP,Masscan,Zmap,御剑高速TCP端口扫描
应用信息
CMS信息,中间件、Web容器、Web服务器指纹?
默认文件或路径、报错信息、HTTP Response信息、
Chrome Wappalyzer插件等其他指纹识别工具;
常见的CMS有:
Dedecms (织梦),Discuz,PHPWEB,PHPWind,PHPCMS,ECShop,
Dvbbs,SiteWeaver,ASPCMS,帝国,Z-Blog,WordPress等。
1. 扫描工具
御剑web指纹识别,whatweb,webRobo,椰树,轻量web指纹识别等
2. 在线查询CMS,
[BugScaner][http://whatweb.bugscaner.com/look/]
[云悉指纹][http://www.yunsee.cn/finger.html]
[whatweb][https://whatweb.net/]
收集敏感信息
收集数据库文件。配置信息,源代码泄露,未授权访问,Robots.txt,后台管理
site:可限制你搜索范围的域名
inurl:用于搜索网页上包含的URL,这个语法对寻找网页上的搜索,帮助之类的很有用
intext: 只搜索网页部分中包含的文字(也就是忽略了标题、URL等的文字)
filetype:搜索文件的后缀或者扩展名
intitle:限制你搜索的网页标题
link: 可以得到一个所有包含了某个指定URL的页面列表
举例:
查找后台地址:
site:域名 inurl:login|admin|manage|member|admin_login|login_admin|system|login|user|main|cms
查找文本内容:site:域名 intext:管理|后台|登陆|用户名|密码|验证码|系统|帐号|admin|login|sys|managetem|password|username
查找可注入点:site:域名 inurl:aspx|jsp|php|asp
查找上传漏洞:site:域名 inurl:file|load|editor|Files找eweb
编辑器:site:域名 inurl:ewebeditor|editor|uploadfile|eweb|edit
存在的数据库:site:域名 filetype:mdb|asp|#
查看脚本类型:site:域名 filetype:asp/aspx/php/jsp
迂回策略入侵:inurl:cms/data/templates/images/index/
例如:尝试搜索一些学校网站的后台,语法为:”site:edu.cn intext: 后台管理”
意思为搜索网页正文中包含有“后台管理” 并且域名后缀是edu.cn的网站,
利用该方法需要一定的经验积累,以下是针定特定目标的信息收集思路。例如:对于不同的业务系统,得想出不同的联想词,例如商城系统,联想词可以为商家系统,对于大型的企业,OA登录、CRM等等的联想词。
后台:site:xxx.xxx admin|login|system|管理|登录|内部|系统
钓鱼:site:xxx.xxx 邮件|email
社工:site:xxx.xxx qq|群|微信|腾讯
越权:site:xxx.xxx inurl:uid=1|userid=1
包含:site:xxx.xxx inurl:php?include=
使用扫描工具对目录进行扫描
DirBuster、御剑后台扫描珍藏版、wwwscan、Spinder.py、Sensitivefilescan、Weakfilescan
源码泄露
GitHub信息收集工具:https://github.com/MiSecurity/x-patrol
1.判断出网站的CMS对渗透有什么意义?
查找网上已曝光的程序漏洞。
如果开源,还能下载相对应的源码进行代码审计
2.一个成熟并且相对安全的CMS,渗透时扫目录的意义?
敏感文件、二级目录扫描
站长的误操作比如:网站备份的压缩文件、说明.txt、二级目录可能存放着其他站点
3. mysql注入点,用工具对目标站直接写入一句话,需要哪些条件?
root权限以及网站的绝对路径。
4.为何一个mysql数据库的站,只有一个80端口开放?
更改了端口,没有扫描出来。
站库分离。
3306端口不对外开放
5.目标站无防护,上传图片可以正常访问,上传脚本格式访问则403.什么原因?
原因很多,有可能web服务器配置把上传目录写死了不执行相应脚本,尝试改后缀名绕过
6.CSRF 和 XSS 和 XXE 有什么区别,以及修复方式?
XSS是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。修复方式:对字符实体进行转义、使用HTTP Only来禁止JavaScript读取Cookie值、输入时校验、浏览器与Web应用端采用相同的字符编码。
CSRF是跨站请求伪造攻击,XSS是实现CSRF的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。修复方式:筛选出需要防范CSRF的页面然后嵌入Token、再次输入密码、检验Referer
XXE是XML外部实体注入攻击,XML中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。修复方式:XML解析库在调用时严格禁止对外部实体的解析。
7.CSRF、SSRF和重放攻击有什么区别?
CSRF是跨站请求伪造攻击,由客户端发起
SSRF是服务器端请求伪造,由服务器发起
重放攻击是将截获的数据包进行重放,达到身份认证等目的
8.如何拿一个网站的webshell?
上传,后台编辑模板,
sql注入写文件,
命令执行,
代码执行,
一些已经爆出的cms漏洞,比如dedecms后台可以直接建立脚本文件,wordpress上传插件包含脚本文件zip压缩包等
9.awvs如何批量扫描?
AWVS应用本身没有批量扫描的功能,所以只能够通过脚本调用AWVS的API接口进行批量添加扫描网址
10.burpsuite如何爆破401、脱库
Tomcat-----401
使用base64编码进行认证信息传输,使用的是HTTP Basic认证方式。
intruder模块中的payload标签页的payload type
选择custome iterator,就可以进行我们的自定义拼接,position的位置就是我们的拼接方式,那么根据tomcat密码的格式,我们可以很轻松的联想出如何进行拼接
什么是WebShell?
WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的─种命令执行环境,也可以将其称做为─种网页后门。黑客在入侵了─个网站后,通常会将这些asp或php后门文件与网站服务器WEB目录下正常的网页文件混在─起,然后就可以使用浏览器来访问这些asp或者php后门,得到─个命令执行环境,以达到控制网站服务器的目的(可以上传下载文件,查看数据库,执行任意程序命令等)。国内常用的WebShell有海阳ASP木马,Phpspy,c99shell等。
静态网页:最常用的格式文件就是html格式文件,大部分网页的格式都是html格式,html格式又包含有.htm、dhtml.xhtml.shtm.shtml。这些都是指静态页面,里面不含有动态程序。
动态网页:页面级包括有ASP(基于JavaScript 或VbScript或C#)、JSP、PHP、ASPX、jspx、cgi。这些里面是包含服务器端执行的代码,也就是服务器在将这些网页发给客户端之前,会先执行里面的动态程序语言,并把执行后生成的html发送到客户端来的,所以我们在客户端看到的源代码也是html格式的(因为动态的代码直接在服务器上执行,而这些服务器代码是前台是不会显示出来。
一个系统登录页,通常有什么漏洞?
1、注入点及万能密码登录
2、登录时,不安全的用户提示:比如提示用户名不存在或者密码验证码错误
3、查看登录页面源代码,看是否存在敏感信息泄露
4、不安全的验证码
5、在注册账号的时候,是否存在不安全的提示
6、不安全的密码,在注册账号的时候密码没有限制复杂度
7、任意无限注册账号
8、在暴力破解的时候不会限制ip,锁定用户
9、一个账号可以在多地登录,没有安全提示
10、账户登录之后,没有具备超时功能
11、OA,邮件,默认账号等相关系统,在不是自己注册的情况下,应该在登录之后强制要求更改密码
12、逻辑漏洞,任意更改密码
13、越权漏洞,纵向、横向越权
14、数据包含有风险信息泄露,比如COOKIE
15、不安全的数字传输,密码为明文,未使用https证书
16、任意文件下载
登录页面渗透测试思路总结
访问域名时,浏览器做了什么
简单理解: 域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。
①. get多用于从服务器请求获取数据,post多用于向服务器发送数据。
②.get传递数据直接拼接在URL后面,值和后台协定好的字段对应,在URL中可以看到。post相对比较灵活,传递一个object,里面吧用于提交的表单数据放在里面。用户看不到这个过程,因此get安全性非常低,post安全性较高。
③. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
④.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
⑤. HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。根据 HTTP 规范,GET 用于信息获取,而且应该是 安全的和幂等的。所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。幂等的意味着对同一 URL 的多个请求应该返回同样的结果。完整的定义并不像看起来那样严格。从根本上讲,其目标是当用户打开一个链接时,她可以确信从自身的角度来看没有改变资源。 比如,新闻站点的头版不断更新。虽然第二次请求会返回不同的一批新闻,该操作仍然被认为是安全的和幂等的,因为它总是返回当前的新闻。反之亦然。POST 请求就不那么轻松了。POST 表示可能改变服务器上的资源的请求。仍然以新闻站点为例,读者对文章的注解应该通过 POST 请求实现,因为在注解提交之后站点已经不同了7 在FORM提交的时候,如果不指定Method,则默认为GET请求,Form中提交的数据将会附加在url之后。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中;GET方式提交的数据最多只能有1024字节,而POST则没有限制。
http请求方式

各种数据库默认端口汇集
Oracle 1521
SQL Server 1433
MySQL 3306
远程桌面 3389
什么是同源策略?
1.1.1 所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个 ip 地址,也非同源。同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 1995 年引入浏览器,它是浏览器最核心也最基本的安全功能,现在所有支持 JavaScript 的浏览器都会使用这个策略。如果缺少了同源策略,浏览器很容易受到 XSS、 CSFR 等攻击。
{1} 比如一个web应用,用户访问的页面,处理页面的请求的controller都是在同一个contextPath下的,无论在页面上请求AController还是BController,页面、A、B都是同源的,所处的空间位于同一个contextPath下。
{2} 同源策略是为了安全,确保一个应用中的资源只能被本应用的资源访问。否则,岂不是谁都能访问。
如何判断sql注入,有哪些方法
提交错误语句是否有异常,除此之外这些显示的错误可以通过sleep,修眠语句执行5秒等,除此之外通过DNSlog判断是还有传回值
介绍 SQL 注入漏洞成因,如何防范?注入方式有哪些?除了数据库数据,利用方式还有哪些?
select * from news where id = '$SQL';
当程序执行访问新闻等一些操作都会执行到sql语句进行调用,如果在此调用过程中,提交了不合法的数据,而数据库无法识别则会报错。也就是一切输入都是有害的。
注入类型有6种,可以参考SQLMAP,报错、盲注、联合、时间、内联、堆叠
注入提交方式:GET、POST、Cookies、文件头
利用方式:具体看什么数据库类型,像SQLSERVER可以命令执行,MYSQL写shell有些权限大也可以执行命令但是条件是在lINUX环境下。
防范:边界,CDN -> 脚本语言过滤 -> 数据库过滤最小权限 -> 主机
CRLF注入的原理
CRLF注入在OWASP 里面被称为HTTP拆分攻击(HTTP Splitting)CRLF是”回车 + 换行”(\r\n)的简称,在HTTP协议中,HTTP Header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP 内容并显示出来。所以,一旦我们能够控制HTTP 消息头中的字符,注入一些恶意的换行
1.注入转义,怎么绕过
%27---------单引号
%20----------空格
%23-----------#号
%5c------------/反斜杠
%25-----------%号
宽字节注入
以单引号’为例,它被转义为’,我们的目标是去掉反斜杠,将’逃逸出来。现在我们不输入’,而是输入%df’,被转义后它变成:%df’,也相当于%df%5c%27(%5c表示反斜杠\ ),之后在数据库查询前由于使用了GBK多字节编码,%df%5c会gbk编码转换成为汉字"運",从而使得%27,也就是单引号逃逸。

二次编码绕过

2.sqlmap,怎么对一个注入点注入?
1)如果是get型号,直接,sqlmap -u “注入点网址”.
2) 如果是post型诸如点,可以sqlmap -u "注入点网址” --data=“post的参数”
3)如果是cookie,X-Forwarded-For等,可以访问的时候,用burpsuite抓包,注入处用号替换,放到文件里,然后sqlmap -r “文件地址”
3.盲注和延时注入的共同点?
if(ascii(substr(“hello”, 1, 1))=104, sleep(5), 1)
都是一个字符一个字符的判断
4.sql注入写文件都有哪些函数?
select ‘一句话’ into outfile ‘路径’
select ‘一句话’ into dumpfile ‘路径’
select ‘’ into dumpfile ‘d:\wwwroot\baidu.com\nvhack.php’;
5.SQL注入防护方法?
1、使用安全的API
2、对输入的特殊字符进行Escape转义处理
3、使用白名单来规范化输入验证方法
4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除
6.SQL注入预编译?
通常我们发送一条SQL语句给MySQL服务器时,MySQL服务器每次都需要对这条SQL语句进行校验、解析等操作。
但是有很多情况下,我们的一条SQL语句可能需要反复的执行,而SQL语句也只可能传递的参数不一样,类似于这样的SQL语句如果每次都需要进行校验、解析等操作,未免太过于浪费性能了,因此我们提出了SQL语句的预编译。
所谓预编译就是将一些灵活的参数值以占位符?的形式给代替掉,我们把参数值给抽取出来,把SQL语句进行模板化。让MySQL服务器执行相同的SQL语句时,不需要在校验、解析SQL语句上面花费重复的时间
7.盲注是什么?怎么盲注?
盲注是在SQL注入攻击过程中,服务器关闭了错误回显,我们单纯通过服务器返回内容的变化来判断是否存在SQL注入和利用的方式。盲注的手段有两种,一个是通过页面的返回内容是否正确(boolean-based),来验证是否存在注入。一个是通过sql语句处理时间的不同来判断是否存在注入(time-based),在这里,可以用benchmark,sleep等造成延时效果的函数,也可以通过构造大笛卡儿积的联合查询表来达到延时的目的。
8.mysql的网站注入,5.0以上和5.0以下有什么区别?
mysql5.0以及5.0以上的版本都存在一个系统自带的系统数据库,叫做:information_schema,而5.0以下的版本不存。

schemata表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
tables表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema。是show tables from schema_name的结果取之此表。
columns表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
mysql的用户名密码是存放在那张表里面?mysql密码采用哪种加密方式?
mysql -> users
SHA1
sql注入order by怎么防御
sql二次注入
攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。

1.解决SQL注入最推荐的方法还是预处理+数据绑定。
2 另一个防御的点就是 对输入一视同仁,无论输入来自用户还是存储,在进入到 SQL 查询前都对其进行过滤、转义
sql注入过waf,
白盒,有源码,直接审计
黑盒
1.架构层绕WAF
(1)用户本身是进入waf后访问web页面的,只要我们找到web的真实IP,绕过waf就不在话下了。
(2)在同网段内,页面与页面之间,服务器与服务器之间,通过waf的保护,然后展示给我们,只要我们在内部服务之间进行访问,即可绕过waf
(3)边界漏洞,同样类似于同网段数据,我们可以利用已知服务器存在的ssrf漏洞,将数据直接发送给同网段的web2进行SQL注入
2.资源限制角度绕WAF
有的时候,由于数据太大,会导致waf无法将所有的数据都检测完,这个时候会忽略掉我们代入的sql注入语句,从而绕过waf,即:使用POST请求,对服务器请求很大资源逃逸sql注入语句
3.协议层面绕过WAF
(1)基于协议层,有的waf只过滤GET请求,而对POST请求没做别的限制,因此,可以将GET型换为POST型
(2)文件格式,页面仅对Content-Type为application/x-www-form-urlencoded数据格式进行过滤,因此我们只要将Content-Type格式修改为multipart/form-data,即可绕过waf
(3)参数污染:有的waf仅对部分内容进行过滤,例如:
index.php?id=1&id=2
这样的参数id=1,waf也许仅对前部分的id=1进行检测,而后面的参数并不做处理。这样我们就可以在id=2的后面写入sql注入语句进行sql注入
4.规则层面绕过
大小写
替换关键字(关键字重复)
编码
内联注释
等价函数替换:version()——> @@version @@datadir ——> datadir()
缓冲区溢出
sql过滤了infoermation关键词
在注入中,information_schema库的作用无非就是可以获取到table_schema,table_name,column_name这些数据库内的信息
sys.schema_auto_increment_columns这个库有些局限性,一般要超级管理员才可以访问sys。
类似可以利用的表还有:
mysql.innodb_table_stats、mysql.innodb_table_index同样存放有库名表名
但是没有列名
无列名注入
利用join-using注列名
通过系统关键词join可建立两个表之间的内连接。通过对想要查询列名所在的表与其自身内连接,会由于冗余的原因(相同列名存在),而发生错误。并且报错信息会存在重复的列名,可以使用 USING 表达式声明内连接(INNER JOIN)条件来避免报错
爆表名
?id=-1' union select 1,2,group_concat(table_name)from sys.schema_auto_increment_columns where table_schema=database()--+
?id=-1' union select 1,2,group_concat(table_name)from sys.schema_table_statistics_with_buffer where table_schema=database()--+
爆字段名
获取第一列的字段名及后面每一列字段名
?id=-1' union select*from (select * from users as a join users as b)as c--+
?id=-1' union select*from (select * from users as a join users b using(id,username))c--+
?id=-1' union select*from (select * from users as a join users b using(id,username,password))c--+
数据库中as作用是起别名,as是可以省略的,为了增加可读性,建议不省略。
sql注入substr函数被禁用,替换函数
substring mid
1.XSS原理
反射型
用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。需要诱使用户“点击”一个恶意链接,才能攻击成功
储存型
存储型XSS会把用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性。
DOM型
通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。
2.DOM型和反射型的区别
反射型XSS:通过诱导用户点击,我们构造好的恶意payload才会触发的XSS。反射型XSS的检测我们在每次请求带payload的链接时页面应该是会带有特定的畸形数据的。DOM型:通过修改页面的DOM节点形成的XSS。DOM-based XSS由于是通过js代码进行dom操作产生的XSS,所以在请求的响应中我们甚至不一定会得到相应的畸形数据。根本区别在我看来是输出点的不同。
xxe怎么造成,代码层面看?
XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击。由于程序在解析输入的XML数据时,解析了攻击者伪造的外部实体而产生的。例如PHP中的simplexml_load 默认情况下会解析外部实体,有XXE漏洞的标志性函数为simplexml_load_string()
DTD:Document Type Definition 即文档类型定义,用来为XML文档定义语义约束。可以嵌入在XML文档中(内部声明),也可以独立的放在另外一个单独的文件中(外部引用)。
实体分为一般实体和参数实体
1.CSRF原理
CSRF是跨站请求伪造攻击,由客户端发起,是由于没有在关键操作执行时进行是否由用户自愿发起的确认
2. 防御
验证Referer
添加token
3.token和referer做横向对比,谁安全等级高?
token安全等级更高,因为并不是任何服务器都可以取得referer,如果从HTTPS跳到HTTP,也不会发送referer。并且FLASH一些版本中可以自定义referer。但是token的话,要保证其足够随机且不可泄露。(不可预测性原则)
4.对referer的验证,从什么角度去做?如果做,怎么杜绝问题
对header中的referer的验证,一个是空referer,一个是referer过滤或者检测不完善。为了杜绝这种问题,在验证的白名单中,正则规则应当写完善。
5.针对token,对token测试会注意哪方面内容,会对token的哪方面进行测试?
针对token的攻击,一是对它本身的攻击,重放测试一次性、分析加密规则、校验方式是否正确等,二是结合信息泄露漏洞对它的获取,结合着发起组合攻击信息泄露有可能是缓存、日志、get,也有可能是利用跨站很多跳转登录的都依赖token,有一个跳转漏洞加反射型跨站就可以组合成登录劫持了另外也可以结合着其它业务来描述token的安全性及设计不好怎么被绕过比如抢红包业务之类的
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等
检测
SSRF漏洞的验证方法:
1)因为SSRF漏洞是让服务器发送请求的安全漏洞,所以我们就可以通过抓包分析发送的请求是否是由服务器的发送的,从而来判断是否存在SSRF漏洞
2)在页面源码中查找访问的资源地址 ,如果该资源地址类型为 www.baidu.com/xxx.php?image=(地址)的就可能存在SSRF漏洞 4[1]
SSRF漏洞的成因 防御 绕过
成因:模拟服务器对其他服务器资源进行请求,没有做合法性验证。利用:构造恶意内网IP做探测,或者使用其余所支持的协议对其余服务进行攻击。防御:禁止跳转,限制协议,内外网限制,URL限制。绕过:使用不同协议,针对IP,IP格式的绕过,针对URL,恶意URL增添其他字符,@之类的。301跳转+dns rebindding。
文件上传漏洞原理
由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件
常见的上传绕过方式
前端js验证:禁用js/burp改包
大小写
双重后缀名
过滤绕过 pphphp->php
防护
文件上传目录设置为不可执行
使用白名单判断文件上传类型
用随机数改写文件名和路径
审查上传点的元素有什么意义?
有些站点的上传文件类型的限制是在前端实现的,这时只要增加上传类型就能突破限制了。
原理
引入一段用户能控制的脚本或代码,并让服务器端执行 include()等函数通过动态变量的方式引入需要包含的文件;
用户能够控制该动态变量。
导致文件包含的函数
PHP:include(), include_once(), require(), re-quire_once(), fopen(), readfile(), … JSP/Servlet:ava.io.File(), java.io.Fil-eReader(), … ASP:include file, include virtual,
本地文件包含和远程文件包含涉及的php设置
能够打开并包含本地文件的漏洞,被称为本地文件包含漏洞
如果要用fopen打开远程文件,则此时最好检查一下php.ini中的配置选项allow_url_fopen,如果为on则可以打开,否则不能打开
如果要包含远程文件,则此时最好检查一下php.ini中的配置选项allow_url_include,如果为on则可以包含,否则不能包含
金融行业常见逻辑漏洞
单针对金融业务的 主要是数据的篡改(涉及金融数据,或部分业务的判断数据),由竞争条件或者设计不当引起的薅羊毛,交易/订单信息泄露,水平越权对别人的账户查看或恶意操作,交易或业务步骤绕过。
中间人攻击是一个(缺乏)相互认证的攻击;由于客户端与服务器之间在SSL握手的过程中缺乏相互认证而造成的漏洞
防御中间人攻击的方案通常基于一下几种技术
1.公钥基础建设PKI 使用PKI相互认证机制,客户端验证服务器,服务器验证客户端;上述两个例子中都是只验证服务器,这样就造成了SSL握手环节的漏洞,而如果使用相互认证的的话,基本可以更强力的相互认证
2.延迟测试
使用复杂加密哈希函数进行计算以造成数十秒的延迟;如果双方通常情况下都要花费20秒来计算,并且整个通讯花费了60秒计算才到达对方,这就能表明存在第三方中间人。
3.使用其他形式的密钥交换形式
原理
每台主机都有一个ARP缓存表,缓存表中记录了IP地址与MAC地址的对应关系,而局域网数据传输依靠的是MAC地址。在ARP缓存表机制存在一个缺陷,就是当请求主机收到ARP应答包后,不会去验证自己是否向对方主机发送过ARP请求包,就直接把这个返回包中的IP地址与MAC地址的对应关系保存进ARP缓存表中,如果原有相同IP对应关系,原有的则会被替换。这样攻击者就有了偷听主机传输的数据的可能
防护
1.在主机绑定网关MAC与IP地址为静态(默认为动态),命令:arp -s 网关IP 网关MAC
2.在网关绑定主机MAC与IP地址
3.使用ARP防火墙
mysql两种提权方式
udf提权,mof提权
Mysql_UDF提权
UDF(user defined function)用户自定义函数,。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。 通过udf创建能够执行系统命令的函数sys_exec、sys_eval,使得入侵者能够获得一般情况下无法获得的shell执行权限。
使用udf:
1.把含有自定义函数(如执行系统命令函数“sys_eval”)的dll(windows)文件放入特定文件夹下。
2.声明引入这个dll文件中的自定义函数。
3.使用自定义的函数
Mysql mof提权
就是利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd命令使其被带入执行
条件
mysql有读写 C:/Windows/system32/wbem/mof 的权限
secure-file-priv参数不为null
TCP三次握手的过程以及对应的状态转换
(1)客户端向服务器端发送一个SYN包,包含客户端使用的端口号和初始序列号x;
(2)服务器端收到客户端发送来的SYN包后,向客户端发送一个SYN和ACK都置位的TCP报文,包含确认号xx1和服务器端的初始序列号y;
(3)客户端收到服务器端返回的SYNSACK报文后,向服务器端返回一个确认号为yy1、序号为xx1的ACK报文,一个标准的TCP连接完成。
TCP和UDP协议区别
tcp面向连接,udp面向报文 tcp对系统资源的要求多 udp结构简单 tcp保证数据完整性和顺序,udp不保证
https的建立过程
a、客户端发送请求到服务器端
b、服务器端返回证书和公开密钥,公开密钥作为证书的一部分而存在
c、客户端验证证书和公开密钥的有效性,如果有效,则生成共享密钥并使用公开密钥加密发送到服务器端
d、服务器端使用私有密钥解密数据,并使用收到的共享密钥加密数据,发送到客户端
e、客户端使用共享密钥解密数据
f、SSL加密建立
php/java反序列化漏洞的原理?解决方案?
php中围绕着serialize(),unserialize()这两个函数
序列化就是把一个对象变成可以传输的字符串,如果服务器能够接收我们反序列化过的字符串、并且未经过滤的把其中的变量直接放进这些魔术方法里面的话,就容易造成很严重的漏洞了。
O:7:"chybeta":1:{s:4:"test";s:3:"123";}
这里的O代表存储的是对象(object),假如你给serialize()传入的是一个数组,那它会变成字母a。7表示对象的名称有7个字符。"chybeta"表示对象的名称。1表示有一个值。
{s:4:"test";s:3:"123";}中,s表示字符串,4表示该字符串的长度,"test"为字符串的名称,之后的类似。 当传给 unserialize() 的参数可控时,我们可以通过传入一个精心构造的序列化字符串,从而控制对象内部的变量甚至是函数。
JAVA
Java 序列化是指把 Java 对象转换为字节序列的过程便于保存在内存、文件、数据库中,ObjectOutputStream类的 writeObject() 方法可以实现序列化。 Java 反序列化是指把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的 readObject() 方法用于反序列化。
shiro 反序列化原理,利用链?
Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
那么,Payload产生的过程:
命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值
在整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了,Payload构造起来也是十分的简单。
fastjson反序列化
FastJson 是java库,可以把java对象转换为JSON格式,也可以把JSON字符串转换为对象。
fastjson有两种常见的处理JSON的方法:
JSON.toJSONString()方法:可将对象转换成JSON字符串
JSON.parseObject()方法:将JSON字符串转换成对象
php的%00截断的原理是什么?
因为在C语言中字符串的结束标识符%00是结束符号,而PHP就是C写的,所以继承了C的特性,所以判断为%00是结束符号不会继续往后执行
条件:PHP<5.3.29,且GPC关闭
php的LFI,本地包含漏洞原理是什么?写一段带有漏洞的代码。手工的话如何发掘?如果无报错回显,你是怎么遍历文件的?
if ($_GET['file']){
include $_GET['file'];
}
包含的文件设置为变量,并且无过滤导致可以调用恶意文件 还可以对远程文件包含,但需要开启allow_url_include = ON 通过测试参数的地方进行本地文件/etc/passwd等包含 如果存在漏洞而且没有回显,有可能没有显示在页面而是在网页源代码中,除些可以利用DNSlog进行获取包含的信息。从index.php文件一级级往读取 也可以利用PHP封装协议读取文件
php中命令执行涉及到的函数
eval()
assert()
system()
exec()
shell_exec()
php中三个等号和两个等号的区别?
用两个等号时,只要比较的两个变量的值相同,输出true,否则输出false。
用三个等号时,除了两个变量的值相同外,还必须这两个变量的类型相同,才能输出true,否则输出false。
php变量覆盖
变量覆盖指的是用我们自定义的参数值替换程序原有的变量值,一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。
1.extract() 函数覆盖
2.动态变量覆盖($$)
PHP动态变量是指一个变量的变量名可以动态的设置和使用,一个变量获取另一个变量的值作为这个变量的变量名。
3.parse_str()变量覆盖
4.import_request_variables变量覆盖
5.全局变量注册,register_globals用来注册全局变量
Python中的序列化操作是通过pickle和 cPickle 模块
反序列化
说说常见的中间件解析漏洞利用方式
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是从右往左判断后缀
冰蝎特点(总结)
“冰蝎”是一个动态二进制加密网站管理客户端,由于基于流量加密的webshell变得越来越多,"冰蝎"在此应运而生。
"冰蝎"客户端基于JAVA,所以可以跨平台使用,最新版本为v3.0 bate,兼容性较之前的版本有较大提升。
主要功能为:基本信息、命令执行、虚拟终端、文件管理、Socks代理、反弹shell、数据库管理、自定义代码等,功能非常强大
冰蝎的加密原理:"冰蝎"在服务端支持open_ssl时,使用AES加密算法,密钥长度16位,也可称为AES-16。此在软件及硬件(英特尔处理器的AES指令集包含六条指令)上都能快速地加解密,内存需求低,非常适合流量加密。
三大特点:
流量加密,难以被检测
webshell免杀性好
加密方式:AES加密
哥斯拉特点
哥斯拉全部类型的shell均过市面所有静态查杀
静态免杀这个问题,要客观;工具放出来之后可能会免杀一段时间,后来就不行了,但是,改改代码还能继续过狗。重点还是要看流量加密和一些自带的插件。
哥斯拉流量加密能过市面全部流量waf
哥斯拉的自带的插件是冰蝎、蚁剑不能比拟的
内存马?
sqlmap爆库名参数
- -dbs
nmap探测系统的参数是什么
OS识别
-O 启用操作系统检测,-A来同时启用操作系统检测和版本检测
其漏洞的产生在于render_template_string函数在渲染模板的时候使用了%s来动态的替换字符串,而且Flask模板中使用了Jinja2作为模板渲染引擎,{{}}在Jinja2中作为变量包裹标识符,在渲染的时候将{{}}包裹的内容作为变量解析替换。
flask的渲染方法有render_template和render_template_string两种。
render_template()是用来渲染一个指定的文件的。使用如下
return render_template(‘index.html’)
render_template_string则是用来渲染一个字符串的。SSTI与这个方法密不可分。
使用方法如下