美文网首页
ctf-web总结

ctf-web总结

作者: 摘月亮的人 | 来源:发表于2018-05-07 01:40 被阅读0次

    web代码审计
    这里参照大佬的文章
    https://www.cnblogs.com/Hg-Yyq/p/8641992.html

    1.md5

    常见形式:

    (1)
    if($_POST['param1']!=$_['param2'] && md5($_POST['param1'])==md5($_POST['param2'])){
      die("success");
    }
    

    看上去是不可能的,但是这里利用了一个php哈希比较缺陷,就是在处理0e开头的md5哈希字符串时,会将它看成0
    ,所以两个以0e开头的哈希值会被php认为是相同的。

    常见payload

        QNKCDZO
        240610708
        s878926199a
        s155964671a
        s214587387a
        s214587387a
         sha1(str)
        sha1('aaroZmOk')  
        sha1('aaK1STfY')
        sha1('aaO8zKZF')
        sha1('aa3OFF9m')
    

    (2)

    if($_POST['param1']!=$_['param2'] && md5($_POST['param1'])===md5($_POST['param2'])){
      die("success");
    }
    

    ”==“变成了“===”
    在php中md5(string,raw)函数是这样定义的md5(string,raw),当我们输入的不是string的时候会发生什么呢?
    假如我们输入的是"param1[]=1&param2[]=;"
    这时还是可以绕过的”===“比较的

    (3)

    如果限定了是string类型怎么办呢?
    例如:

    if((string)$_POST['param1']!=(string)$_['param2'] )
    md5($_POST['param1'])===md5($_POST['param2'])){
      die("success");
    }
    

    那么上面的方法就不能用了
    因为md5算法是一种摘要算法,也就是说它会把输入的数据压缩,那么就有可能存在两个不同的字符串经过md5加密后,会有两个MD5值相同。
    这里用到了一个工具fastcoll_v1.0.0.5
    先创建1.txt 和 2.txt
    然后用fastcoll_v1.0.0.5 -i 1.txt 2.txt -o 3.txt 4.txt这条命令就可产生两个md5值相同的文件了。
    上传用url编码。也就将文件以二进制的方式读入,然后编码成url编码。再提交param1=...,和param2=...
    工具链接https://pan.baidu.com/s/1_bDnTy8_jMXGzpzJvl1g0A

    2.

    相关文章

      网友评论

          本文标题:ctf-web总结

          本文链接:https://www.haomeiwen.com/subject/qxzecftx.html