Brute Force
1.
这道题是爆破用户名,以及密码,其实就是通过burp软件来爆破
抓包成功!
接下来爆破
修改这两个值,进行爆破,正确导入字典后,开始爆破.
因为已经知道了答案,我们可以让爆破的数量少一点,
找到数量不一致的,得到结果
2.
第二种,主要区别在于我们必须休眠两秒,才能继续.所以
让它休眠2000ms就欧克了
为了方便,我就将正确答案置于了顶端,可以发现,我们的爆破可以保证全为200的状态码
3.
第三题,通过查询得到,主要增加了token值,这个东西
从源代码中,可以得知,我们每次登陆一次就会产生一个token值,在开头会有一个检查的过程,所以要绕过这个东西就需要变换爆破方式:
其实就是需要每一个密码都找到对应的token值
添加密码和token值为载荷:
选择pitchfork爆破
上面是分辨特征模块
选择递归搜索,输入第一次的token值,开始爆破,注意只能单线程而且时间需要在3000ms左右
得到答案
Command Injection
1.这个题,需要我们输入一个ip地址
当我们输入127.0.0.1时,我们可以发现:
获得了这样一个ping命令的结果,所以,我们现在将它绕过,通过逻辑运算符
& :前面一个命令无论是否执行,后面的命令都能执行,两个命令都执行
&&:前面一个命令执行成功后,才能执行后面一个命令,两个命令都执行
|:前面一个命令无论是否执行,后面的命令都能执行且只执行后面一个
||:前面一个命令不能正常执行后,才能执行后面一个命令
这里我们使用 | 就可以了.
任意命令都可以输入了!
2题和3题都是一样,只是添加了几个黑名单:
但是,|加了一个空格,所以,一样的都可以直接使用|
Cross Site Request Forgery (CSRF)
1.
这个题的目的是不通过本身题目给出的地方更改密码,而是通过了解更改密码的步骤,从其他地方进入更改密码的阶段.
我们可以看到,我们需要更改密码,顶上的url就会变化:
所以我们如果新建一个空页面,以这个格式来进行更改密码:
首先我们先做一个诱导的网站按钮
burp上抓包后可以直接复制简易代码
点击后,就可以更改密码了
2....
File Inclusion
1.
首先,我们可以看见此题是通过get传参来完成访问文件的,同时,经过实验发现,后缀不是php的会原封不动的打开文件,而php结尾的文件会正常执行.我们首先创建一个文件,让其访问这个文件如果可以打开,就说明可以执行我们需要的代码
执行成功!
2.
通过观察源代码,我们可以发现,他过滤了http://", "https://,../", "..\\的过滤
但是我们的文件中没有,所以无影响.
3.
现在发现找不到了,返回看源代码.
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}
这段代码告诉我们,必须以file开头,所以,我们可以使用file协议
file
协议是一种用于访问本地文件系统资源的URL协议。它允许通过URL来引用计算机上的本地文件
file:///path/to/your/file.txt
于是,我们只需要在我们文件路径以前加上file://就可以了
File Upload
1.首先准备一个PHP文件(可以承载一句话木马),里面任意来一句php代码就可以了
直接就成功上传了.
2.
要求我们上传一个jpeg或png格式的文件,我们可以做一张图片马,因为dvwa靶场中有文件包含的题,满足条件,
然后我们上传一下:
乱码加上执行phpinfo()函数说明成功了,但是注意,源代码中的图片不允许超过10000字节,否则上传不成功!
3.
3题看了源代码后发现同样可以这样做出来,同样是上传一个图片马,与二题解题过程完全一致!
Vulnerability: SQL Injection
1.
可以看见,输入1 and 1=2 不会报错,确定是字符型,需要闭合,
输入1",不会报错,而输入1'报错了,确定闭合类型为单引号.
order by run出列数.
跑到第3列报错了,说明只有3列
database()跑出数据库名.
.....
Vulnerability: SQL Injection (Blind)
1.
没有特别的回显,观察源代码只出现exists和missing,确定需要盲注
首先确定数据库的长度:
1' and length(database())>10 #----------MISSING
1' and length(database())>5 #----------MISSING
1' and length(database())>3 #----------exists
1' and length(database())>4 #----------MISSING
确定数据库长度为4.
输入语句(SUBSTR(string, start, length)),分别找到每一个字符
1' and ascii(substr(database(),1,1))>97#
exits
库名的第一个字符大于a
1' and ascii(substr(database(),1,1))<122#
exits
库名的第一个字符小于z
1' and ascii(substr(database(),1,1))<104#
exits
库名的第一个字符小于h
1' and ascii(substr(database(),1,1))<100#
MISSING
库名的第一个字符不小于d
1' and ascii(substr(database(),1,1))<101#
exits
库名的第一个字符小于f
1' and ascii(substr(database(),1,1))=100#
exits
库名的第一个字符等于d.
最后得到数据库名为dvwa
获得表的个数:
1' and (select count(table_name) from information_schema.tables where table_schema='dvwa')=2#
获得两个表的长度
1' and length((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1))=9#
1' and length((select table_name from information_schema.tables where table_schema='dvwa' limit 1,1))=5#
然后判断字段个数
1' and (select count(column_name) from information_schema.columns where table_schema='dvwa' and table_name= 'users') =8#
.......
这时候可以猜测字段名为"username","password"啥的,也可以继续通过limit,substr判断长度和字符
综上所述,实际上简单的盲注就是在简单的sql注入中,通过先猜长度,再通过ascll码判断每一个字母
2.
2题禁止了我们输入
但是我们可以通过burp抓包,然后更改,过程与1题一致.
3.
这里跳出来一个窗口进行验证,观察源码可以知道有一个LIMIT 1限制一次查询的限制,但是我们不用管,因为我们每次输入都会加上#,所以不影响,同时我们还可以看见有一个sleep(),在出现MISSING后,也没关系,我们上面的还是可以用,只是错了会延迟小几秒.
|
Vulnerability: Weak Session IDs
1.
这里是cookie值是弱保密
我们直接抓包
发现phpsessid没变,dvwasession递增,从而得知规律,于是我们直接复制cookie,退出登录,无密码登陆
2.
通过源代码可以发现,通过时间来生产dvwaSession
用这个工具转化一下,其余步骤一致,
3.
源代码与1题类似,但是多出来了一步md5加密,我们也将dvwaSession md5加密了就OK
Vulnerability: DOM Based Cross Site Scripting (XSS)
1.
先看源码,啥也没有,再看url
出现default的参数,我们直接将其改为出现一个弹窗<script>alert(1)</script>
2.
由于代码过滤掉了 <script ,所以我们尝试输入</select><img src=x οnerrοr=alert(1)>
(onerror 事件在加载外部文件(文档或图像)发生错误时触发,所以当图片的src属性值不存在时,会触发alert()警告消息框)前提需要闭合select
3.
看源代码,通过switch函数将不是选项外的所有全过滤了,
但是它只检查了default参数,只需要用&,上传两个参数上去就欧克
English&<script>alert(1)</script>.
Vulnerability: Reflected Cross Site Scripting (XSS)
1.
我们随便输入一个数字,直接就输出了
所以我直接输入<script>alert(1)</script>
直接就跑出来了.
2.
源代码出现:
str_replace( '<script>', '', $_GET[ 'name' ] );
我们可以大写绕过
3.
preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] )
通过正则表达式匹配,将<script>中出现的全替换为' '.
所以,,我们用刚刚使用过的<img src="#" οnerrοr=alert(1)> onerror事件就可以了.
Vulnerability: Stored Cross Site Scripting (XSS)
1.
trim() 函数移除字符串两侧的空白字符或其他预定义字符。返回已修改的字符串。
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。
mysqli_real_escape_string() 函数转义在 SQL 语句中使用的字符串中的特殊字符。
输入数据储存,没有过滤和检查
所以直接输入 <script>alert(1)</script> 尝试
2.
注意name有长度限制,message的过滤太严格,我们从name角度出发,只需要大写绕过就可以了
3.
name的过滤,全是针对<script>标签的,所以我们直接用其它标签就可以了
比如onerror事件<img src="#" οnerrοr=alert(1)> .
Vulnerability: Content Security Policy (CSP) Bypass
1.
从源代码可以找到可以执行的外部站点
https://pastebin.com/raw/R570EE00 https://www.toptal.com/developers/hastebin/raw/cezaruzeka
访问过后,pastebin是一个可以将js代码包裹进去的文本编译器,
编辑
在这上面可以携带我们的代码,跑出链接,然后返回靶场包裹即可.
2.
unsafe-inline:当csp有Unsafe-inline时, 并且受限于csp无法直接引入外部js, 不过当frame-src为self, 或者能引入当前域的资源的时候, 即有一定可能能够引入外部js。nonce-source,仅允许特定的内联脚本块。
所以我们直接输入源码中注释的内容就可以了 <script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(1)</script>。
编辑
3......
Vulnerability: JavaScript Attacks
1.
通过输入不同的内容抓包两次,发现token值都是一致的.
编辑
编辑
通过观察源代码,可以发现
编辑 经过了两次加密,但是token值不变,说明是前端生成的,所以,我们打开控制台,先在输入框输入success,再在控制台运行函数,提交成功!
编辑
2.
生成token的函数放在单独的js文件中,生成的方式是将XX+phrase+XX字符串反过来作为token
我们通过抓包success
编辑
还是changeme,说明还是前端,于是我们输入success,控制台运行函数,成功!
编辑
3.
看到js是乱码,需要使用还原工具得到还原后的关键代码如下
function do_something(e) { for (var t = "", n = e.length - 1; n >= 0; n--) t += e[n]; return t } function token_part_3(t, y = "ZZ") { document.getElementById("token").value = sha256(document.getElementById("token").value + y) } function token_part_2(e = "YY") { document.getElementById("token").value = sha256(e + document.getElementById("token").value) } function token_part_1(a, b) { document.getElementById("token").value = do_something(document.getElementById("phrase").value) } document.getElementById("phrase").value = ""; setTimeout(function() { token_part_2("XX") }, 300); document.getElementById("send").addEventListener("click", token_part_3); token_part_1("ABCD", 44);
方法:
输入框输入success,控制台依次执行 token_part_1("ABCD", 44) 和 token_part_2("XX"),最后点击提交执行token_part_3()
成功.
Vulnerability: Authorisation Bypass
1.
登陆他给的账号发现没有了刚刚的页面
没有任何过滤,也就是,只要输入url,谁都可以访问页面.
直接接上vulnerabilities/authbypass/
可以看见,旁边没有选项,但是页面出现了.
2.
可以看见源代码有过滤,必须用户名是admin
尝试直接访问/vulnerabilities/authbypass/get_user_data.php以浏览返回的用户数据.
3.
.......
Open HTTP Redirect
1.
源代码就是一个简单的判断get传参的redirect是否存在,存在就会重定向的指定网站
可以看到,源代码的路径
只需要输入这个路径,再给redirect传参即可
2.
源代码 加入了对路径是否为绝对路径的判断
代码阻止我使用绝对 URL 将用户带离网站,因此可以使用相对 URL 将他们带到同一网站上的其他页面,也可以使用相对于协议的 URL。
输入url浏览http://dvwa2/vulnerabilities/open_redirect/source/medium.php?redirect=//digi.ninja
3.
源代码只检查了,参数里面是否有字符串info.php
因为百度是一个搜索引擎,我们可以直接在百度搜索info.php,也就是我们所需要的字符串给输进去
出现一串url https://www.baidu.com/s?wd=info.php
因为没有对绝对路径的剥离,所以满足条件只需要?redirect=https://www.baidu.com/s?wd=info.php即可!!!!(真是太nb了)
run出来了!!!!