文章目录
- 前言
- 一、前情回顾
- 二、注入点寻找
- 三、黑名单发现
- 三、构造注入命令
- 四、复盘
- 总结
前言
本章节属于Tier 2 学院模块,但本文并没有直接给出答案(只有提示),符合HTB的内容分享及发布指南,如有侵权请联系博主删除。
本文章将记录HTB-CPTS学院路径的第二十二章:Command Injections的最终box的通关过程。
一、前情回顾
请先完成章节知识学习!请先完成章节知识学习!请先完成章节知识学习!
测验关卡最简单的一集!
命令注入其实在大部分场景都很罕见,因为很难存在将用户的直接输入当作命令执行的场合。但是,可以不用、不能不会吧,随便看看抓紧过。
二、注入点寻找
根本找不到注入点啊喂
注入点
寻找的方法就是到处点点、url的参数一个一个试试过去。
注入点位置在“Move”按钮:/index.php?to=&from=51459716.txt&finish=1&move=1
(之后会省略其余参数,只写“to=”之后的payload,并没有在url中删除只是省略!)
点击之后有回显命令,说明url中的“to”和“from”参数可能会直接当作命令行参数执行。
然后,使用/index.php?to=;ls测试,明显回显拒绝的信息,说明确实可以尝试注入
三、黑名单发现
首先需要确定哪些字符是不在黑名单里的。
我把这一章中出现过的命令中存在的字符全都列了一下,先都试一遍看看。
; %3b %0a ${LS_COLORS:10:1} \n %0a & %26 | %7c && %26%26 || %7c%7c `` %60%60 $() %24%28%29 - %09 ${IFS} {ls,-la} / ${PATH:0:1} <<< rev bash base64 $ ( )BP抓包,发送到intruder,在to参数的位置上枚举上述字符:
根据之前尝试的经验以及这一次枚举的返回内容,可以明显看到报错规律:页面存在“Malicious”文字就表明该字符被过滤了。
设置过滤规则:
最终得到没被黑名单过滤的字符:
三、构造注入命令
可以看到,没有被过滤的字符是非常非常多啊,空格方面有%09和${IFS}、斜杠方面有${PATH:0:1},base64、bash和rev三巨头也是说放就放,需要注意的是代表分号字符的%3b和%0a都被过滤了,可以考虑使用&(合运算符)的%26代替:
空格 -> %09 或 ${IFS} 斜杠 -> ${PATH:0:1} & -> %26前面忘说了,这是个linux系统,nmap扫一下就知道了
先简单试一手 &ls /,按照上述方法替代:
%26l\s${IFS}${PATH:0:1}哦,我们已经可以看到flag.txt了,居然就在根目录下。
直接cat /flag.txt,依旧按照上述方法替代:
%26c\at%09${PATH:0:1}flag.txt没错,结束了,就换了一个空格、换了一个左斜杠、加了一个右斜杠,easy?!
四、复盘
别急,我的base64、bash和rev三巨头还没玩够呢!这里还有编码绕过和反转绕过两种办法:
其中编码绕过我个人认为是最通用的,但需要不禁止base64、bash命令以及<<<符号,要求较高。
%26bash<<<$(base64${IFS}-d<<<Y2F0IC9mbGFnLnR4dA==)反转绕过需要rev命令以及<<<符号,也不简单啊,看情况使用吧。
%26c\at%09$(rev<<<"txt.galf${PATH:0:1}")这两个命令的具体构造方法详情参0章节内容。
总结
最难的部分还是找注入点啊!
现实可不会告诉你哪里有洞,也不会回显错误细节,更不会漏放这么多黑名单给你,多上手试多想办法绕,把所有可能的点都当作漏洞点去试,不要怕浪费时间。
(这话也是对自己说,我又没忍住去找wp偷看注入点了)