2021-02-03dvaw与杂记

2021-02-03

1. dvaw配置环境

列了一些出现的问题

1.1. 无法创建数据库

仔细看看readme

To set up the database, simply click on the Setup DVWA button in the main menu, then click on the Create / Reset Database button. This will create / reset the database for you with some data in.

If you receive an error while trying to create your database, make sure your database credentials are correct within ./config/config.inc.php. This differs from config.inc.php.dist, which is an example file.

The variables are set to the following by default:

$_DVWA[ 'db_user' ] = 'dvwa';
$_DVWA[ 'db_password' ] = 'p@ssw0rd';
$_DVWA[ 'db_database' ] = 'dvwa';

Note, if you are using MariaDB rather than MySQL (MariaDB is default in Kali), then you can’t use the database root user, you must create a new database user. To do this, connect to the database as the root user then use the following commands:

mysql> create database dvwa;
Query OK, 1 row affected (0.00 sec)

mysql> create user dvwa@localhost identified by 'p@ssw0rd';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on dvwa.* to dvwa@localhost;
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

简单的说,就是如果想要用mysql创建,不能使用最开始的root账号,需要新建一个
照着来就行了,所以最开始一定得看看Read Me

1.2. 登录

账号:admin
密码:password

1.3. File Inclusion

打开File Inclusion,发现红色报错内容
The PHP function allow_url_include is not enabled.(PHP函数allow_url_include未启用)。
找到php.ini,将

‘‘allow_url_include=Off’’ 改为 ‘‘allow_url_include=On’’
‘‘display_errors=Off’’ 改为 ‘‘display_errors=On’’

注意要区分大小写

1.4. Vulnerability: Insecure CAPTCHA

dvwa不能正常显示,需要在配置文件中加入谷歌的密钥:

$_DVWA[ 'recaptcha_public_key' ] = '6LfX8tQUAAAAAOqhpvS7-b4RQ_9GVQIh48dRMGsD';
$_DVWA[ 'recaptcha_private_key' ] = '6LfX8tQUAAAAAIR5ddYvRf3zNqM-k__Ux73oZzb_';

2.文件伤处啊不能(upload)

2.0.预备知识
  • WebShell:webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。
  • 一句话木马<?php @eval($_GET['cmd'];) ?>
2.1.最简单的文件上传功能

upload.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>UPLOAD</title>
</head>
<body>

<form action="upload_file.php" method="post" enctype="multipart/form-data">
	<label for="file">文件名:</label>
	<input type="file" name="file" id="file"><br>
	<input type="submit" name="submit" value="提交">
</form>

</body>
</html>

upload_file.php

<html>
<head>
	<meta charset="utf-8">
	<title>上传文件</title>
</head>
<body>
<?php
if ($_FILES["file"]["error"] > 0)
{
	echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
	echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
	echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
	echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
	echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
	if (file_exists("upload/" . $_FILES["file"]["name"]))
	{
		echo $_FILES["file"]["name"] . " 文件已经存在。 ";
	}
	else
	{
		move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
		echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
	}
}
?>
</body>
</html>

2.2. files的变量的用法

$_FILES超级全局变量很特殊,他是预定义超级全局数组中唯一的二维数组。其作用是存储各种与上传文件有关的信息,这些信息对于通过PHP脚本上传到服务器的文件至关重要。此函数中总共有5项:

1.$_FILES["userfile"]["error"]

提供了与上传尝试结果有关的重要信息。总共有5个不同的返回值,其中一个表示成功的结果,另外4个表示在尝试中出现的特殊错误。每个返回值的名字和将在后面介绍。

2.$_FILES["userfile"]["name"]

指定客户端机器上声明的文件最初的名字,包括扩展名。因此,如果浏览器一个名为vacation.jpg的文件,并通过表单上传,则此变量的值将是vacation.png。

3.$_FILES["userfile"]["size"]

指定从客户端上传的文件的大小,以字节为单位。因此,在vacation.jpg文件的例子中,此函数可能赋值为5253,大约为5kb.

4 . $_FILES["userfile"]["tmp_name"]

指定上传到服务器后为文件赋予的临时名。这是存储在临时目录(由PHP指令upload_tmp_dir指定)中时所指定的文件名。

5 . $_FILES["userfile"]["type"]

指定从客户端上传的文件的mime类型。因此,在vacation.jpg文件的例子中,此变量会赋值为image/jpeg。如果上传的是PDF,则赋值为application/pdf。因为这个变量有时会得到意外的结果,所以应当在脚本中显示地进行验证。

[‘error’] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)

UPLOAD_ERR_OK

值:0; 没有错误发生,文件上传成功。

UPLOAD_ERR_INI_SIZE

值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。

UPLOAD_ERR_FORM_SIZE

值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。

UPLOAD_ERR_PARTIAL

值:3; 文件只有部分被上传。

UPLOAD_ERR_NO_FILE

值:4; 没有文件被上传。

值:5; 上传文件大小为0.

2.3文件上传代码审计
2.3.2. low

直接传,真就啥都不管。
上传文件,直接保存,保存路径hackable/uploads/,文件上传成功后,返回successfully。
函数move_upload_file(string $filename, string $destination):将文件移动到指定位置。

<?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
		$html .= '<pre>Your image was not uploaded.</pre>';
	}
	else {
		// Yes!
		$html .= "<pre>{$target_path} succesfully uploaded!</pre>";
	}
}

?>

2.3.3.medium

代码分析

当有提交上传文件时,少量先用变量从$_POST[‘uploaded’]取出文件路径,文件名,文件类型,文件大小;然后对文件MIME类型进行判断,如果文件类型为image/jpeg或者和image/png文件大小小于100000byte,则将临时文件移动到指定目录,上传成功,则回显文件路径

这种防御措施主要是设置MIME类型白名单过滤规则,同时限制文件大小

如果不进行修改,则上传html文件类型会报错。

通过使用抓包工具Burp抓包,修改报文形式实现上传。
把报文拷贝到Intercept下的Raw中,修改Content-Type字段中的内容为image/png。

注:Content-Type是客户机设置的标准HTTP头文件,用于向服务器说明它接收的数据类型。很多开发人员通过判断content-type过滤危险文件。但是这种保护措施的脆弱的。拦截和修改请求包时web应用渗透测试的一个非常重要的技能。不仅可以绕过一些客户端验证,还可以研究发送的信息,并且尝试理解应用程序的内部工作方式。有时候,需要添加、删除或替换一些值。

单击【Forward】(放包),则发送成功,看到上传成功。

<?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' ] );

	// File information
	$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
	$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];
	$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];

	// Is it an image?
	if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
		( $uploaded_size < 100000 ) ) {

		// Can we move the file to the upload folder?
		if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
			// No
			$html .= '<pre>Your image was not uploaded.</pre>';
		}
		else {
			// Yes!
			$html .= "<pre>{$target_path} succesfully uploaded!</pre>";
		}
	}
	else {
		// Invalid file
		$html .= '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
	}
}

?>

3.杂记

3.1.burpsuite只拦截特定网站数据包

在配置burpsuite代理截包时经常会遇到这样的情况:

浏览器经常自己发一些包,干挠对目标网站的检测;

或者想要在过程中搜一些东西,还要禁用拦截。

启动burpsuite–切换到“Proxy”选项卡–选择“Options”菜单–往下看到“Intercept Client Requests”节区
在这里插入图片描述
点击添加,按照上图中And ,IP address,输入IP地址
再开启拦截,就只会拦截目标ip的数据包
另外注意上边只配置了Request,如果要配置Respone的过滤,要到再下边一点的“Intercept Server Respones”节区进行配置。

3.2. PHP basename() 函数

basename() 函数返回路径中的文件名部分。

例子

<?php
$path = "/testweb/home.php";

//显示带有文件扩展名的文件名
echo basename($path);

//显示不带有文件扩展名的文件名
echo basename($path,".php");
?> 

输出

home.php
home

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值