1.Bash注入1-[杂项]

本文阅读 8 分钟
首页 代码,C/C#/C++ 正文

0x08、RingZer0—CTF入门

一、Bash注入-[传送门]

img

二、解题过程

1.ssh登录的用户名密码:level1/level1
2.目标是:challenges.ringzer0team.com的10218端口
ssh level1@challenges.ringzer0team.com -p 10218
//第一次访问,需要输入yes
//输入密码:level1

img

1.“uid=1000,gid=1000,group=1000”,说明目标一定是一个linux系统,且是普通用户。
2.“Flag is located at /home/level1/flag.txt”,表明了flag的存储位置。
3.挑战的bash代码如下:
                    Challenge bash code:
                    -----------------------------

                    while :
                    do
                            echo "Your input:"
                            read input
                            output=`$input`
                    done

                    -----------------------------
4.分析以上的代码之前,首先要了解linux的基本命令:
(1)Linux read命令用于从标准输入读取数值,也就是读取用户从键盘输入的内容。
//注意:read会将输入进行转义
5.分析关键代码:
read input        //意思是:读取键盘输入的字符串,赋值给变量input
ouput=`$input`    //意思是:把input字符串变量当作变量执行,然后把结果赋值给ouput变量
6.综上所述,这段代码的流程:
 循环{read读取键盘输入的字符串->转义->字符串赋值给变量input->将变量input在shell中执行输出的标准输出stdout赋值给变量output->如果输出中存在stderr,则将stderr输出到/dev/pts/下对应的master side,即当前使用的”虚假“terminal/tty}。
 因此我们在通常情况下只能看到stderr的输出,看不到stdout输出(因为标准输出赋值给了变量)。
7.由此考虑以下两个大方向:
(1)将flag的内容作为非stdout流输出(把stdout重定向到stderr/stdin)
(2)绕过bash code中的赋值语句,手动将flag内容输出到当前控制tty中。(把stdout重定向到/dev/tty中)
1.键入:bash,尝试反弹shell
//成功反弹了shell
//发现报错信息,出现了类似flag的内容,猜测是flag: FLAG-U96l4k6m72a051GgE5EN0rA85499172K

2.尝试输入一些基本命令,发现没有任何的回显
ls
whoami
id
pwd

3.猜测标准输出1根本没有任何的东西,我们在此基础上,尝试把bash的结果重定向到其他位置比如2
键入:bash >&2
//首先,这条命令的意思是:把bash命令的结果的标准输出,全都重定向到标准错误中。(为什么,这样做呢?)
//解释1:既然bash之后的结果,什么都没有,那么我们就把bash的结果重定向到0或者2,就可能有内容了。
//解释2:bash命令用来反弹shell。
//解释3:bash中0,1,2三个数字分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出)。
//解释4:符号>是用来重定向的。
//解释5:符号&在此处的作用就是标识2不是文件,是标准错误2。

4.再次尝试键入命令:
ls
//回显内容:flag.txt和prompt.sh文件
cat flag.txt
//成功回显flag值,发现flag确实是FLAG-U96l4k6m72a051GgE5EN0rA85499172K

img img img

第一步:发现题目提示利用level1/level1账户ssh登录靶机challenges.ringzer0team.com的10218端口
第二步:登录成功后,提示了用户是普通用户、靶机是linux操作系统、flag的存储位置以及一段代码
第三步:分析代码,可知我们从键盘输入的字符串,会被系统当作linux命令来执行
第四步:通过分析代码的结果,我们键入bash,反弹shell,成功反弹后尝试输出命令,但是没有回显任何的结果
第五步:我们输出linux系统命令,但是不反弹结果。我们尝试把bash的输出结果重定向到基本错误或者是基本输出
第六步:在之前bash反弹的shell的基础上,键盘键入bash >&2或者是键入bash >&0,即可重定向基本输出到基本错误或者基本输入
第七步:此时,尝试linux的基础命令,发现返回结果,读取flag即可。

三、Terminal与shell的关系

1、简单来说:

terminal = tty = text input/output environment
console = physical terminal
shell = command line interpreter

​ 所以,我们在terminal里面执行bash,只能说是打开了一个subshell,而不能说是新开了一个terminal/tty。terminal是一个“设备”,shell是一个交互软件,用于和内核交流,我们的shell依托于terminal这个”设备“进行显示和接受输入。

四、bash >&2的解释

​ 符号“>&2”的意思:也就是把结果重定向到标准错误;之前如果有定义标准错误重定向到某file文件,那么标准输出也重定向到这个file文件。(要想明白这些内容,就要了解一些前置知识,如下所示!!!)

输入输出可以重定向,所谓重定向输入就是在命令中指定具体的输入来源,譬如 cat < test.c 将test.c重定向为cat命令的输入源。输出重定向是指定具体的输出目标以替换默认的标准输出,譬如ls > 1.txt将ls的结果从标准输出重定向为1.txt文本。有时候会看到如 ls >> 1.txt这类的写法,> 和 >> 的区别在于:> 用于新建而>>用于追加。即ls > 1.txt会新建一个1.txt文件并且将ls的内容输出到新建的1.txt中,而ls >> 1.txt则用在1.txt已经存在。
bash中0,1,2三个数字分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出)。
默认输入只有一个(0,STDIN_FILENO),而默认输出有两个(标准输出1 STDOUT_FILENO,标准错误2 STDERR_FILENO)。因此默认情况下,shell输出的错误信息会被输出到2,而普通输出信息会输出到1。但是某些情况下,我们希望在一个终端下看到所有的信息(包括标准输出信息和错误信息),要怎么办呢?
1)mkdir test && cd test                
//创建test文件夹并进入test目录

2)touch a.txt b.c c                 
//创建a.txt b.c c 三个文件

3)ls > 1                            
//按我们的猜测,这句应该是将ls的结果重定向到标准输出,因此效果和直接ls应该一样。但是实际这句执行后,标准输出中并没有任何信息。

4)ls                                
//执行3之后再次ls,则会看到test文件夹中多了一个文件1

5)cat 1                            
//查看文件1的内容,实际结果为:1 a.txt b.c c    
//可见步骤3中 ls > 1并不是将ls的结果重定向为标准输出,而是将结果重定向到了一个文件1中。即1在此处不被解释为STDOUT_FILENO,而是文件1。
//那么如何让1被系统理解为标准输出,而不是文件1呢?

5、提出问题:那么如何让1被系统理解为标准输出,而不是文件1呢?

bash >&2,此处2前面的&就是为了让bash将2解释成标准错误而不是文件2。因此符号&可以标识2不是文件名,而是标准错误。

五、参考链接1-[传送门]-[略]

六、参考链接2-[传送门]-[详细]

难搞!!!

2021.07.31

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/qq_45555226/article/details/119280313
-- 展开阅读全文 --
KillDefender 的 Beacon 对象文件 PoC 实现
« 上一篇 02-09
Web安全—逻辑越权漏洞(BAC)
下一篇 » 03-13

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复