Web渗透经典流程
判断脚本系统,判断数据库类型——>寻找注入点——>猜解数据库表名——>猜解字段名——>猜解用户名和密码——>寻找后台地址登录,获得网站管理权限(webshell)
URL为:asp?id=
asp?newsid=
asp?page=
asp?Atricle=
SQL注入漏洞:strSQL="select * from users where username=(name='"+userName + "')and(pw='"+passWord+"');"
攻击方式:'or1='1'
'or1=1--
a'or'1==1--
'or'a'='a
三种不同数据库(ACCESS,SQL Server,MySQL)有不同的注入方法,由于现在php与My SQL使用更多,asp逐渐被淘汰,我只实践了php与My SQL组合。
1. 要想最快地找到网站的系统漏洞就要用扫描,要想最快地找到脚本方面的漏洞就应该用google了,使用google hack寻找网( inurl:php?id=)类型为 http://www.xx.com/php?id=xx,那么如何寻找在某个网址中含有php?id=的页面呢?就要用到如下的语句,php?id= site:sina.com.cn,这句话的意思是在sina.com.cn 中找寻链接有 php?id=这样的信息,因为 php 注入的特性(php 默认将传递的参数中的'等字符做了转换,所以对于字符类型的变量默认情况下很难注入),所以我们主要找 id=这样的地方,很有可能就是传递整型数字变量的地方
2. 在URL加上 and 1=1 提交,返回如果与提交 and 1=2 页面不同则存在注入漏洞,但是真正影响我们注入的确不是这个 PHP 网站,而是其后台的数据库。所以接下来我们就来判断其后台数据库了。在目前的数据库系统中,只有 MySQL 数据库支持/*注释的,所以我们可以利用它来判断后台是否是 MySQL,如果不是那它就不支持这种注释了,自然就会出现错误。我们输入 http://www.xx.com/php?id=xx/*查看返回结果,如果没有出错,说明后台数据库就是 MySQL 了。
3.在URL后提交and ord(mid(version(),1,1))>51/*判断数据库版本,如果正常返回,那么这个数据库版本是大于 4.0 的,因为Ascii 码 51 代表的是 3,这里大于 3 的当然就是 4.0 以上版本!
4.暴任意表名,在URL后提交:and(select top 1 name from(select top N id,name from sysobjects where xtype=char(85)) T roder by id desc)>1,N代表数据库中第N个表,可得到第1个表的表名。
5.暴任意表任意列的列名:and(sel ect top 1 co 1_name(object_id('表名'),N) from sysobjects)>1,N为第N列。(错误中显示的FORUM_TOPICS是表名,TOPI(_ID)为列名)
6.有表,列名后,可以暴出数据库中数据,语句为:"and(select top 1 列名 from 表名 where id=N) " N代表第N条数据。
7.一般提交:and(select top 1 username(password) from admin where id=1)>1 可以得到第一条数据/密码。
在url中添加%5c或inc等符号让系统调用数据库时出现错误,返回数据中会提示调用错误,在错误中一般含有数据库的绝对路径。(把url的最后一个/改为%5c)。
原理:这和编码和 IIS 有很大的关系,%5c 就是 16 进制代码中的“\”。可是我们为什么不直接把最后一个“/”改成“\”呢?这是因为如果我们直接在浏览器中提交“\”的话,浏览器会自动把“\”转换成“/”,而我们提交“%5c”是不会被浏览器转换的,最后“%5c”给编译表示成了“\”。可为什么被编译成“\”,是由于绝对路径出错了而引起的暴库。当IIS遇到%5c时以为遇到虚拟目录,便停止向上解析而找不到文件报错。
通过直接访问数据库连接文件conn.asp使服务器产生报错,错误中有DB的绝对地址。
原理:主要是服务器调用文件的相对路径产生错误。
现在很多系统为了方便我们访问网站,都使用了一个叫 cookie 的技术来避免我们多次输入用户名和密码等信息,而且这个 cookie 是一个文本文件,是存储在我们本地机器上的。Cookies 是一小段的文本信息,它伴随着用户请求和页面在 Web 服务器与浏览器之间传递。
用户每次访问网站的时候,Web 应用程序都可以读取 cookies 包含的信息。使用 cookies 能够达到网站认识你的目的。
我们自己可以去查看自己电脑上的 cookie 文件,使用 windows 操作系统使用 IE浏览器通常可以在 C:\Documents and Settings\用户名\Cookies 目录中找到。如果不是这个目录可以利用 windows 自带的搜索功能搜索关键字 cookies 也可找到。既然是文本文件,那么我们当然可以修改上面的内容了。所以如果我们对里面的内容进行修改,比如把自己的信息改成别人的,那么我们访问的时候不就成了别人了,那样我们就冒充了别人进入了。这样就达到了欺骗的目的了,这就是非常著名的 cookies 欺骗漏洞。
原理:对于 cookies 欺骗漏洞形成的原因一般是对 cookies 验证不足而造成的。
远程文件包含漏洞就是因为 PHP文件中的变量过滤不严,没有判断提交的参数是本地的还是远程主机上的,因此我们可以指定远程主机上的文件作为参数来提交给变量执行,而如果提交的这个文件中存在恶意代码甚至干脆就是一个 php 木马的话,文件中的代码或 php 木马就会以 WEB 权限被成功执行。因为这个漏洞是 PHP 文件中的变量过滤,所以这个漏洞也只有 PHP 系统中存在。
说起旁注,其实也就是看同一台服务器上是否绑有多个站点。因为现在大部分网站都是使用的虚拟主机。如果绑有多个站点,那么就算其中一个站点的脚本做得很安全,我们也可以从另一个网站进行突破。我们说的旁注一般指的是绑了不同域名的不同站点上的旁注,这里我称为广义上的旁注。其实,还有一种由于同一站点内使用了多套不同程序,其中一套也许比较安全,但另一套却是有漏洞的。这里称之为狭义的旁注。
定义:webshell 其实就是 web 入侵的一种脚本攻击工具。简单的说来,webshell 就是一个 asp、php 或 jsp 木马后门,我们在入侵了一个网站后,常常在将这些 asp、php 或 jsp 木马后门文件放置在网站服务器的 web 目录中,与正常的网页文件混在一起。然后黑客就可以用 web 的方式,通过这些木马后门控制网站服务器,包括上传下载文件、看数据库、执行任意程序命令等。webshell最大的优点就是可以穿越防火墙,由于与被控制的服务器或远程主机交换的数据都是通过80 端口传递的,因此不会被防火墙拦截。并且使用 webshell 一般不会在系统日志中留下记录,只会在网站的 web 日志中留下一些数据提交记录,如果不查看 web 日志是不可能发现我们入侵的痕迹的。
如何获取webshell?
利用webshell提权:利用本地溢出程序进行提权。在得到 webshell 后,我们先查看服务器上哪些目录是可执行的,然后在查找操作系统的版本以及在服务器上安装了哪些软件。在确定了这些信息后,我们就查找这些软件存在的相应的一些溢出程序,并上传到服务器的可执行目录中,接着溢出,成功的话,一下就可以得到管理员的权限。不管它是那种操作系统,我们只要确定其操作系统或安装的软件中有存在溢出漏洞,那么使用溢出程序溢出是最快得到管理员权限的方法。