SQL注入中的WAF绕过技术

作者:bystander 博客:http://leaver.me 论坛:法克论坛 目录 1.大小写绕过 2.简单编码绕过 3.注释绕过 4.分隔重写绕过 5.Http参数污染(HPP) 6.使用逻辑运算符 or /and绕过 7.比较操作符替换 8.同功能函数替换 9.盲注无需or和and 10.加括号 11.缓冲区溢出绕过 1. 大小写绕过 这个大家都很熟悉,对于一些太垃圾的WAF效果显著,比如拦截了union,那就使用Union UnIoN等等。绕过 2. 简单编码绕过 比如WAF检测关键字,那么我们让他检测不到就可以了。比如检测union,那么我们就用%55 也就是U的16进制编码来代替U, union写成 %55nION,结合大小写也可以绕过一些WAF,你可以随意替换一个或几个都可以。。 也还有大家在Mysql注入中比如表名或是load文件的时候,会把文件名或是表明用16进制编码来绕过WAF都是属于这类。 3. 注释绕过 这种情况比较少,适用于WAF只是过滤了一次危险的语句,而没有阻断我们的整个查询 > /?id=1+union+select+1,2,3/* 比如对于上面这条查询,WAF过滤了一次union和select,那么我们在之前在写一个注释的语句,让他把注释里面的过滤掉,,并不影响我们的查询。。 所以绕过语句就是: > /?id=1/*union*/union/*select*/select+1,2,3/* 还有一种和注释有关的绕过: 比如 > index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3,4…. 可以看到,只要我们把敏感词放到注释里面,注意,前面要加一个! 4. 分隔重写绕过 还是上面的例子,适用于那种WAF采用了正则表达式的情况,会检测所有的敏感字,而不在乎你写在哪里,有几个就过滤几个。。 我们可以通过注释分开敏感字,这样WAF的正则不起作用了,而带入查询的时候并不影响我们的结果 > /?id=1+un/**/ion+sel/**/ect+1,2,3-- 至于重写绕过,适用于WAF过滤了一次的情况,和我们上传aaspsp马的原理一样,我们可以写出类似Ununionion这样的。过滤一次union后就会执行我们的查询了 > ?id=1 ununionion select 1,2,3-- 5. Http参数污染(HPP) 比如我们有这样的语句: > /?id=1 union select+1,2,3+from+users+where+id=1-- 我们可以重复一次前面的id值添加我们的值来绕过,&id=会在查询时变成逗号 > /?id=1 union select+1&id=2,3+from+users+where+id=1-- 这种情况成功的条件比较多,取决于具体的WAF实现。。 再给出一个例子说明用法 > /?id=1/**/union/*&id=*/select/*&id=*/pwd/*&id=*/from/*&id=*/users-- 具体分析的话就涉及到查询语句的后台代码的编写了。 比如服务器是这样写的: > select * from table where a=".$_GET['a']." and b=".$_GET['b']." limit ".$_GET['c']; 那我们可以构造这样的注入语句: > /?a=1+union/*&b=*/select+1,pass/*&c=*/from+users-- 最终解析为: > select * from table where a=1 union/* and b=*/select 1,pass/*limit */from users-- 可以看到,这种方式其实比较适合白盒测试,而对于黑盒渗透的话,用起来比较麻烦。但是也可以一试。 6. 使用逻辑运算符 or /and绕过 > /?id=1+OR+0x50=0x50 > /?id=1+and+ascii(lower(mid((select+pwd+from+users+limit+1,1),1,1)))=74 顺便解释一下第二句话,从最里面的括号开始分析,select+pwd+from+users+limit+1,1 这句是从users表里查询pwd字段的第一条记录,比如是admin, 然后mid(上一句),1,1就是取admin的第一个字符,也就是a, lower(上一句)就是把字符转换为小写, 然后ascii就是把a转换成ascii码,看等不等于74. 7. 比较操作符替换 包括!= 不等于,<>不等于,< 小于,>大于,这些都可以用来替换=来绕过, 比如上一个例子,要判断是不是74,假设=被过滤,那么我们可以判断是不是大于73,是不是小于75,然后就知道是74了。。很多WAF都会忘了这个。 8. 同功能函数替换 Substring()可以用mid(),substr()这些函数来替换,都是用来取字符串的某一位字符的。 Ascii()编码可以用hex(),bin(),也就是16进制和二进制编码替换 Benchmark() 可以用sleep()来替换,这两个使用在基于延时的盲注中,有机会给大家介绍 如果连这些都屏蔽了,还有一种新的方法 ...

2013-01-06 · 1 min · bystander

php的一些知识点

一.php中单双引号的区别 "" 双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。 ’’ 单引号里面的不进行解释,直接输出。 从字面意思上就可以看出,单引号比双引号要快了。单引号支持'和\的转义,但其他一些转义字符就必须是在双引号里了。 例如: $name='my name is bystander'; echo $name //结果是:my name is bystander echo '$name' //结果是:$name echo "$name" //结果是:my name is bystander 二.require和include的区别 在于,出现错误时,require是error,也就是说脚本会停止执行,而include是warning。也就说说代码会继续执行,另外,无论require的位置如何。即使是放在一个if代码块里面。他也会将指定文件包含进来。。即使该if部分不执行。顺带说下include 和include_once。其实类似于c里面的ifdef。。就是只包含一次。不重复包含。 三。php类 php类的构造函数命名为_construct.析构函数为_destruct,需要调用父类的构造函数时,使用parent::_construct()来调用 四。pear包 PEAR是"PHP Extension and Application Repository"的缩写,也就是一个PHP扩展和应用的管理工具, 具体可参考:http://www.berlinix.com/php_pear.html 五。PDO PDO(PHP Data Objects)扩展为PHP访问数据库定义了一个轻量级的、一致性的接口,它提供了一个数据访问抽象层,这样,无论使用什么数据库,都可以通过一致的函数执行查询和获取数据。PDO随PHP5.1发行,在PHP5.0的PECL扩展中也可以使用。其实就是一个访问数据库的一个类,连数据库的时候实例一个。调用方法就这样。前提是这个装好了。 linux下具体可以参考:LINUX下手动安装PDO_MYSQL window下和例子(例子也可以在linux下使用)参考此文:PHP5中PDO的简单使用 六。Zend 准确地讲 Zend 框架究竟是什么呢?Zend 框架具有以下特征: 是基于 PHP 建立的。 是面向对象的。 使用 MVC 范例。 具有开放源码贡献者。 有贡献者负责保证他们的代码不是他人的知识产权。 通过建立 MVC 模式,Zend 框架的目标是使编程生活更加轻松,这不仅体现在通用领域,而且对您始终想要做的具体的事情也是如此,比如访问数据库或输出 PDF 文件。 具体可参考:理解 Zend 框架,第 1 部分: 基础 七。GD库 百科上的解释: GD库,是php处理图形的扩展库,GD库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站数据生成报表等。在PHP处理图像,可使用GD库, 如何检测Lamp是否已经有了GD库呢。将下面的代码<?php phpinfo(); ?> 保存为phpinfo.php,然后传到服务器的网站目录下,在浏览器访问这个文件,如: localhost/phpinfo.php,然后找到一行为GD Support,后面如果是enabled,那就说明系统已经有了GD库 使用的例子可以参见官方一个例子,在指定的图片上添加文字。 例子参见:http://www.php.net/manual/en/image.examples-png.php 八。Smarty引擎 Smarty主要就是分离了前台和后台的实现。使得多人合作开发程序更加方便。因为前后台在代码上基本完全分离,一般实现就是一个模板文件,以tpl结尾,一个php文件。在tpl文件里面用变量来指示内容。而在php文件中将内容传递过去。来完成页面显示。 参考:smarty安装及初级使用只看第一部分的例子即可。

2012-04-17 · 1 min · bystander

《PHP和MySQL程序设计》& 《细说PHP》

 今天从早上到下午一使劲把PHP和MySQL程序设计 这本书读完了。因为昨天读完了head first的那本php书。所以看这本书难度也不是很大。先对这本书整体评价一下。 这本书我其实之前并没有在豆瓣上看看评论。豆瓣也不适合看这类专业书的评论。只是看到是第三版。说明这本书还是不错的。一般国内的专业书很少看到出过第二版的。。因为质量实在是太差了。选好书的一个方法就是看版本。。能出到第N版的都是有其可圈可点之处的。于是把这本书拿来就看。 书从头看到尾。我只能说大叔把代码贴的太多了。但是好事情就是代码给出了执行结果。这基本上方便了我直接看代码。文字部分跳过一些。但是,大叔,我也是人啊。 你把代码贴这么多。。函数给这么全。这也记不住啊。而且书也并不是有个循序渐进的过程。对比昨天看的head first的书。深深体会到一本好的入门书是多么重要啊。这本书并不如它的宣传那样适合新手读。很多地方都用了结果还没解释。到后面又开始解释。完全无条理。。最最重要的是错误太多了。。 不过。对我还是有很大收获的。因为看了这本书就发现head first的书确实是入门书。讲的比较浅。(但非常重要),一些框架。模板。类在这里面都有讨论。需要花些时间搞清楚。我已经记下来了。稍后准备阅读一下这些主题, 中午还用了一个多小时看完了《细说PHP》,不便于多说什么。。和《PHP和MySQL程序设计》的区别就是代码没有执行结果。讲的倒还算清楚。因为我看这本书不仔细。只是捡自己不会的去看。所以对本书评价不是太高。相比前一本书。这本书列的函数没那么多。都是比较实用的。。这点很好。但是看豆瓣和亚马逊到评分倒还挺高的。。令我情何以堪啊。 一会把一点知识点贴上来。记录一下今日的收获吧。。

2012-04-16 · 1 min · bystander

lamp开发环境简单搭建

 因为一些事情,要去学习php开发。所以呢。今天就先搭建一下php开发环境,其实windows下搭建相对比较简单,也有一键安装包。比如AppServ,但是因为考虑到以后的一些事情,于是还是采用LAMP开发环境。 我是用Ubuntu来做,本地刚好有Ubuntu的镜像。。虚拟里面来测试。首先就是在虚拟机里安装Ubuntu。这个不多说。大家都会。安装好以后。登陆进来。命令行或是图形界面都可以。 新版本的Ubuntu貌似是没了新立得管理器。所以使用命令来安装更简单。打开终端。切换到root。如果不能切换到root。参考此文。切换到root后。输入 apt-get install apache2 mysql-server mysql-client php5 php5-gd php5-mysql 回车后就开始自动下载了。大概几分钟后就会出现MySql的安装设置界面 输入你想设置的mysql的登录密码。然后需要再输入一遍 ok。等会就安装完成了。。就这么简单。。 然后进行一些后续的设置 默认网站的目录在/usr/www.这个目录的权限如下图。 为了以后方便。设置为777会更好一些。。执行如下命令: sudo chmod 777 /var/www 然后是启用 apache的 mod_rewrite 模块 输入如下命令: sudo a2enmod rewrite 然后继续输入如下命令来重启 Apache服务器: sudo /etc/init.d/apache2 restart Apache重启后我们可以测试一下,在 /var/www目录下新建文件 test.php,写入代码: <?php phpinfo(); ?> 保存,在地址栏输入 http://127.0.0.1/test.php 或 http://localhost/test.php ,如果正确出现了如下 php 配置信息则表明 LAMP Apache已经正常工作了 还可以测试一下mysql是否正常。这个直接在终端下输入 mysql -u root -p 然后根据提示输入密码就出现如下的图 表示已经登录到mysql了。说明mysql可以了。可以继续输入 show databases;来显示所有的数据库。 参考文章:http://blog.csdn.net/xiaojianpitt/article/details/6326834

2012-04-15 · 1 min · bystander