dvwa中

这段时间学了一点东西,打算做一下中等,并且结合OWASP的说明进行理解

暴力破解

初级最简单,查看发现代码里多了四行php代码

image-20210803142150293

issert 是判断是否为空的布尔类型
is_object 就是看是否为一个对象
mysql_real_escape_string() 转义 SQL 语句中使用的字符串中的特殊字符
trigger_error()  就是输入次数多哪个地方就会回显哪个指定显示的错误

使用'#发现会转义,其他的过滤也不行,直接暴力

发现使用hydra太麻烦,不如bp直接,hydra需要设置参数,并且把参数给用^来标记

image-20210803153000546

可以用PHP-Brute-Force-Attack 检测器来查看是否被WFuzz、OWASP DirBuster 等强力工具和 Nessus、Nikto、Acunetix 等漏洞扫描,也可以使用安全狗、云锁、等安全茶品进行防护。

命令注入

对代码的执行进行了防御

 $substitutions = array(
        '&&' => '',
        ';'  => '',
    );

把&&,;进行了空转义

str_replace 三个参数,第一个用来替换第二个参数给第三个参数23333
str_replace("world","Shanghai","Hello world!");
输出结果
Hello shanghai!

因为第一个条件是对ip进行的,如果成功,就ping 加dos命令

不成功就ping 4个包,既然过滤了&&

可以尝试|| 进行选择其一

image-20210803154519894

这一题就过滤了两个参数...

这样的还有在url中的filename,通过分号来执行其他语句

CSRF

这个学过,可以通过xss图片,放在留言下,等管理员看到,就会被记录cookie,在cookie生效的期间内,找到后台,并且插入cookie,从而获取管理权限

还可以通过自己创建链接或页面从而达到改密码、增加管理员等效果

 if( stripos( $_SERVER[ 'HTTP_REFERER' ] ,$_SERVER[ 'SERVER_NAME' ]) !== false )
 stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。
 $_SERVER  服务器和执行环境信息

多了一行这个

通过判断http的referer来确定是否进行修改,这个不太行,现在唯一的就是http—only来防御攻击好,但灵活性不好

通过伪造http的referer就行,也可以用modify来指定ip,也可bp修改

文件包含

PHP 函数allow_url_include未启用。

这个是在版本的php的ini里设置的,不是在dvwa的php.ini里设置的

这个也认识,通过上传文件,默认是php脚本,如果文件不行,就尝试在文件夹里包含文件

%00截断在url,从而忽略后面的默认脚本类型,通过不断地上翻到根目录,执行指定文件夹的查看

字节截断,超过文件名限制4096字节,从而忽略php拓展类型

在使用前,需要base64进行编码,在进行有效负载

$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );

添加了过滤规则

尝试用多个来过滤从而查看文件

http://127.0.0.1/vulnerabilities/fi/?page=....//....//php.ini

http同理就是httpttp

文件上传

尝试上传php一句话

只能上传JPEG or PNG

通过本地查看审核元素,没有发现实行本地js验证,无检测函数

而是在提交过程中

bp上传拦截

1

更改图片类型

上传成功

2

php版本小于5.4

php%00.jpg

3

php[空格].jpg

空格的十六进制代码为20,将其修改为 00。后端在判断文件后缀名的时候遇到%00字符丢弃后面的jpg

sql注入

1

通过sqlmap跑,发现注入点

image-20210803175707067

就是用id注入,然后联合查询

因为是post请求,不是get,所以就在bp里看数据,使用repeater模块进行不断尝试

确定列

order 2

联合查询看哪个数据有效

union select 1,2

image-20210803180713812

union select version(),database()

image-20210803180813474

然后爆表名

union select 1,group_concat(table_name) from information_schema tables where table_schema=dvwa

然后爆列名

union select 1,group_concat(column_name) from information_schema.columns where table_name=users

然后爆账户、密码

union select 1,group_concat(user,password) from users
2

用sqlmap

--current-db

image-20210803184007633

--tables -T dvwa

image-20210803184055373

--column -T users -D dvwa

image-20210803184204266

--dump -C user,password  -T users -D dvwa --batch

image-20210803184531179

sql盲注

1

同上

document.cookie
获取cookie
2

bp的利用

因为id直接就是数字,没有引号来过滤

1 and length(database())=4 #

image-20210803195631274

说明数据库为4个字符

之前一直在猜数据库,其实可以不用猜...

数据库字符
1 ascii(substr(database(),1,1))=100#

直接就是database()的引入

等等等

参考链接,二分法、时间延迟

https://www.cnblogs.com/aeolian/p/11063164.html

弱会话

时间戳转化利用cookie

https://tool.lu/timestamp

DOM的XSS

1

image-20210803210255006

url 中 # 后面的字符串是该位置的标识符 (可以是内容, id等)

#是用来指导浏览器动作的,对服务器端完全无用, 客户端提交请求的时候, 不会将#后面的内容考虑进去。所以,HTTP请求中不包括#

而且, 单单改变#后的部分,浏览器只会滚动到相应位置,不会重新加载网页

http://127.0.0.1/vulnerabilities/xss_d/?#default=<script>alert('/chenyouxiu/')</script>

image-20210803211121280

2

image-20210803211445228

随便闭合一个标签,得看条件闭合啥时候符合

懂得抖动

2333

反射性XSS

多了个

str_replace
还是对<sctipt>进行过滤,替换为空
<BODY ONLOAD=alert('XSS')>

在owasp里发现的

存储型XSS

strip_tags() 
函数剥去字符串中的HTML、XML以及PHP的标签,但允许使用<b>标签。
addslashes() 
函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。

image-20210803213555385

但name没有,对name的

<script>进行扩写
<scr<script>ipT>alert(/chenyouxiu/)</scripT>

image-20210803213756750

CSP

用于定义可以从何处加载或执行脚本和其他资源

image-20210803214434782

image-20210803215607129

nonce
一个值 ,并且以不可预测的方式变化
hash
允许执行的脚本代码的Hash值,页面内嵌脚本的哈希值只有吻合的情况下,才能执行

所以

<script nonce=TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=>alert(/chenyouxiu/)</script>

参考owasp

js

通过审核元素了解文本属性

发现js文件

function do_something(e)
{
for(var t="",n=e.length-1;n>=0;n--)
t+=e[n];
return t
}
setTimeout(function()
{
do_elsesomething("XX")},300);
function do_elsesomething(e)
{
document.getElementById("token").value=do_something(e+document.getElementById("phrase").value+"XX")
}

通过之前的初级,知道phrase就是一个例子,需要自己改

image-20210803221435318

结合功能函数do_something(e)

发现changme反过来了

直接bp改

image-20210803224741290

总结

再对owasp进行全面的学习

接下来开始vlb进攻

posted @ 2021-08-03 22:49  testadm1n  阅读(51)  评论(0编辑  收藏  举报