我叫树新风wei
- 关注
从这篇开始由最低安全级别逐个模块开始细分,一直讲到高安全级别,即使您是一位零基础对网络安全感兴趣或者已经刚刚步入工作,都能很好的理解里面所讲的知识点,不光是看,请跟着一起做,动手是学习的主要方式。
一. DVWA每个模块的详细解释和漏洞介绍
1.1.1 Datebase Setup 数据库设置模块
可对DVWA数据库进行重置,在每次实验后,大家写完笔记之后记得重置。
1.1.2 Brute Force 脆弱性模块
可以对设置的用户名/密码进行登录操作,关于登录DVWA的问题,即使不知道密码也可以破解,后面会和大家详细讲解。
代码
<?php if( isset( $_GET['Login'] ) ) { $user = $_GET['username']; $pass = $_GET['password']; $pass = md5($pass); $qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';"; $result = mysql_query( $qry ) or die( '<pre>' . mysql_error() . '</pre>' ); if( $result && mysql_num_rows( $result ) == 1 ) { // Get users details $i=0; // Bug fix. $avatar = mysql_result( $result, $i, "avatar" ); // Login Successful echo "<p>Welcome to the password protected area " . $user . "</p>"; echo '<img src="' . $avatar . '" />'; } else { //Login failed echo "<pre><br>Username and/or password incorrect.</pre>"; } mysql_close(); } ?>
1.1.3 Command Execution命令执行模块
大家从这块可以很好的看出这个是一个ICMP的漏洞尝试
代码
<?php if( isset( $_POST[ 'submit' ] ) ) { $target = $_REQUEST[ 'ip' ]; // Determine OS and execute the ping command. if (stristr(php_uname('s'), 'Windows NT')) { $cmd = shell_exec( 'ping ' . $target ); echo '<pre>'.$cmd.'</pre>'; } else { $cmd = shell_exec( 'ping -c 3 ' . $target ); echo '<pre>'.$cmd.'</pre>'; } } ?>
1.1.4 CSRF跨站请求伪造模块
通过这个大家可以看出这个是修改密码的地方
源码
<?php if (isset($_GET['Change'])) { // Turn requests into variables $pass_new = $_GET['password_new']; $pass_conf = $_GET['password_conf']; if (($pass_new == $pass_conf)){ $pass_new = mysql_real_escape_string($pass_new); $pass_new = md5($pass_new); $insert="UPDATE `users` SET password = '$pass_new' WHERE user = 'admin';"; $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' ); echo "<pre> Password Changed </pre>"; mysql_close(); } else{ echo "<pre> Passwords did not match. </pre>"; } } ?>
1.1.5 Insecure CAPTCHA不安全验证码模块
大家可以发现这个和跨站请求伪造是不是很相像,但是不是用同一种攻击方式
源码
Insecure CAPTCHA Source <?php if( isset( $_POST['Change'] ) && ( $_POST['step'] == '1' ) ) { $hide_form = true; $user = $_POST['username']; $pass_new = $_POST['password_new']; $pass_conf = $_POST['password_conf']; $resp = recaptcha_check_answer ($_DVWA['recaptcha_private_key'], $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if (!$resp->is_valid) { // What happens when the CAPTCHA was entered incorrectly echo "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>"; $hide_form = false; return; } else { if (($pass_new == $pass_conf)){ echo "<pre><br />You passed the CAPTCHA! Click the button to confirm your changes. <br /></pre>"; echo " <form action=\"#\" method=\"POST\"> <input type=\"hidden\" name=\"step\" value=\"2\" /> <input type=\"hidden\" name=\"password_new\" value=\"" . $pass_new . "\" /> <input type=\"hidden\" name=\"password_conf\" value=\"" . $pass_conf . "\" /> <input type=\"submit\" name=\"Change\" value=\"Change\" /> </form>"; } else{ echo "<pre> Both passwords must match </pre>"; $hide_form = false; } } } if( isset( $_POST['Change'] ) && ( $_POST['step'] == '2' ) ) { $hide_form = true; if ($pass_new != $pass_conf) { echo "<pre><br />Both passwords must match</pre>"; $hide_form = false; return; } $pass = md5($pass_new); if (($pass_new == $pass_conf)){ $pass_new = mysql_real_escape_string($pass_new); $pass_new = md5($pass_new); $insert="UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';"; $result=mysql_query($insert) or die('<pre>' . mysql_error() . '</pre>' ); echo "<pre> Password Changed </pre>"; mysql_close(); } else{ echo "<pre> Passwords did not match. </pre>"; } } ?>
1.1.6 File Inclusion文件包含模块
源码
<?php $file = $_GET['page']; //The page we wish to display ?>
1.7 SQL Injection SQL注入模块
源码
<?php if(isset($_GET['Submit'])){ // Retrieve data $id = $_GET['id']; $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' ); $num = mysql_numrows($result); $i = 0; while ($i < $num) { $first = mysql_result($result,$i,"first_name"); $last = mysql_result($result,$i,"last_name"); echo '<pre>'; echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; echo '</pre>'; $i++; } } ?>
1.1.8 SQL Injection (Blind) SQL注入盲注模块
源码
<?php if (isset($_GET['Submit'])) { // Retrieve data $id = $_GET['id']; $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; $result = mysql_query($getid); // Removed 'or die' to suppres mysql errors $num = @mysql_numrows($result); // The '@' character suppresses errors making the injection 'blind' $i = 0; while ($i < $num) { $first = mysql_result($result,$i,"first_name"); $last = mysql_result($result,$i,"last_name"); echo '<pre>'; echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; echo '</pre>'; $i++; } } ?>
1.1.9 File Upload 文件上传模块
源码
<?php if (isset($_POST['Upload'])) { $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/"; $target_path = $target_path . basename( $_FILES['uploaded']['name']); if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) { echo '<pre>'; echo 'Your image was not uploaded.'; echo '</pre>'; } else { echo '<pre>'; echo $target_path . ' succesfully uploaded!'; echo '</pre>'; } } ?>
1.1.10 Reflected Cross Site Scripting (XSS)跨站脚本攻击模块
源码
<?php if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){ $isempty = true; } else { echo '<pre>'; echo 'Hello ' . $_GET['name']; echo '</pre>'; } ?>
1.1.11 Stored Cross Site Scripting (XSS)跨站脚本攻击模块
代码
<?php if(isset($_POST['btnSign'])) { $message = trim($_POST['mtxMessage']); $name = trim($_POST['txtName']); // Sanitize message input $message = stripslashes($message); $message = mysql_real_escape_string($message); // Sanitize name input $name = mysql_real_escape_string($name); $query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');"; $result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' ); } ?>
2.1.1 DVWA Security安全等级调整
可以在这里修改安全等级
2.1.2 PHPINFO 查看PHP版本
PS:从下节开始将从上至下模块来进行教学,安全级别从低到高都会在后续更新,并且还有更多靶场教学,不妨关注防止走丢。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)