sql注入tips

转自http://www.wupco.cn/?p=3764

cuit

首先Web300 山水集团

第一步找到加密接口搭代理就不说了

接下来是注入,filter如下

这里主要的难点在于如何按字节拆解返回的值,以完成按字节爆破盲注,waf拦截了我们常用的substr,like,left等函数,这里我查了一下官方文档,找到position函数。

通过position((str1)IN(str2))绕过空格的拦截,至于=用!(<>)绕过,然后形成最终payload

(1)or(!(position((%27user_name§b§%27)IN(select(group_concat(COLUMN_NAME))from(information_schema.COLUMNS)))%3C%3E1))

其实这种方法并不是最优解,看了官方的wp后,get到一个tip:

where中用于判断的大于号,不仅仅是用于比较大小,对于字符串,也有比较的功能(按字节比较)

where中用于判断的大于号,不仅仅是用于比较大小,对于字符串,也有比较的功能(按字节比较)

于是这道题就简单了,完全不需要函数,直接利用这个来进行按字节的爆破即可

CST

感受俊杰师傅的恐怖吧!

这里我说一下其中一道题,有两个参数,一个是table,一个是id,然后在id里存在盲注,但是有waf,不过报错注入还是挺轻松的。

但是恐怖的事情来了,waf拦截了column这个字符串,也就是说我们无法拿到字段名(column_name,columns等都无法使用)

过了一会,我找俊杰师傅要了一下hint,table是可以注入的,而且没做任何waf

但是之前试过对table进行修改,改成除了flag和news的都提示表错误,结合hint是可以注入,又试了好多根本猜不透语句是怎么写的,后来找师傅要了语句。

这个desc真的没想到.......一直以为是和tctf那道CI框架的题一样,先select出表名,进行检测,然后再执行最终sql语句。

然后师傅又甩我个雨牛博客

http://www.yulegeyu.com/2017/04/16/%E5%BD%93%E8%A1%A8%E5%90%8D%E5%8F%AF%E6%8E%A7%E7%9A%84%E6%B3%A8%E5%85%A5%E9%81%87%E5%88%B0%E4%BA%86Describe%E6%97%B6%E7%9A%84%E5%87%A0%E7%A7%8D%E6%83%85%E5%86%B5%E3%80%82/

最终我的payload是

http://114.55.36.69:20680/index.php?table=flag`%20`i%&id=3

利用通配符%进行按字节爆破,搞出了字段名,最后用报错注入拿到flag。

但是俊杰师傅马上甩我一个更简单的payload,如下

http://192.168.20.133/index.php?table=flag`%23` where 0=extractvalue(1,(select group_concat(0x3a,column_name) from information_schema.columns where table_name=‘error_flag‘))%23`&id=1

这句在desc一句中变成

desc `error_flag`#` where 0=extractvalue(1,(select group_concat(0x3a,column_name) from information_schema.columns where table_name=‘error_flag‘))#``

#直接注释掉后面的内容,然后这句正常返回error_flag的所有字段。

放在下面的select语句中变成

select * from error_flag`#` where 0=extractvalue(1,(select group_concat(0x3a,column_name) from information_schema.columns where table_name=‘error_flag‘))#`

`#`刚好作为alias,后面直接报错注入出字段名

某校校赛/WCTF

这道题我只做了第一步,注入部分。

逻辑如下:

首先是注册,其中country字段在前端是option 用户进行选择的

然后是login登陆,到userinfo里有三个信息

这里我直接把最终payload放出来了,其实要收集信息,要踩以下几个坑:

  1. 通过不断改变country,发现第一个点:country第一个字符会进行判断,如果是大写,不做改变,如果是非大写英文字符,则ascii码-0x20再转换成字符存入库中;
  2. Date是根据设置的时区的当前时间
  3. waf很强大,先不说过滤了什么,能使用的只有‘,@,(,),还有一些没啥用的可见字符。

第一点,对于普通的英文字符没什么用,无非是字符的大写转化,但是对于符号就不一样了,这里通过观察可以发现,数据是经过addsalashes处理的,如果我们传入‘xxx,‘通过转义变成/‘,然后经过第一点的规则变成<‘,成功闭合了单引号。

但是后面的语句怎么注释掉呢?#和空格都被waf拦截。

这里雨牛的博客有个tip

http://www.yulegeyu.com/2017/04/11/%E4%B8%BA%E4%BB%80%E4%B9%88-backtick-%E8%83%BD%E5%81%9A%E6%B3%A8%E9%87%8A%E7%AC%A6/

`在php-mysql里可以被自动闭合,也就是我们可以找到一个使用alias或者使用列名的地方,利用这一个tip去注释掉后面的内容。

构造出来的最终payload是

country=‘and(1=2)and(1)[email protected]`

country=‘or(1)or(1)[email protected]`

是bool型注入,但是有哪里不一样呢???

这就要考验眼力了,注意到date里面,如果是使用or(1),采用是时区就是默认时区,最后的时间和中国的时间保持同步,如果是and(1=2),则采用不知道是哪国的时区,和现在时间差距很大。

这里我猜测中间有一条sql语句专门来判断选择时区的。

所以通过这个,一个二次注入(bool盲注)就达成了,注意不能使用空格,用括号来绕过就ok了

时间: 2024-11-07 08:32:23

sql注入tips的相关文章

使用SQLMAP对网站和数据库进行SQL注入攻击

from:http://www.blackmoreops.com/2014/05/07/use-sqlmap-sql-injection-hack-website-database/ 0x00 背景介绍 1. 什么是SQL注入? SQL注入是一种代码注入技术,过去常常用于攻击数据驱动性的应用,比如将恶意的SQL代码注入到特定字段用于实施拖库攻击等.SQL注入的成功必须借助应用程序的安全漏洞,例如用户输入没有经过正确地过滤(针对某些特定字符串)或者没有特别强调类型的时候,都容易造成异常地执行SQL

代码审计之SQL注入

0x00概况说明 0x01报错注入及利用 环境说明 kali LAMP 0x0a 核心代码 现在注入的主要原因是程序员在写sql语句的时候还是通过最原始的语句拼接来完成,另外SQL语句有Select.Insert.Update和Delete四种类型,注入也是对这四种基本操作的拼接产生的.接下来笔者将以Select为例引导新手初步了解SQL注入.Select是数据库的查询操作,所以常常出现在像文章查看和搜索这些地方,缺陷代码如下: <?php$conn = mysql_connect('local

深入了解SQL注入绕过waf和过滤机制

知己知彼百战不殆 --孙子兵法 [目录] 0x00 前言 0x01 WAF的常见特征 0x02 绕过WAF的方法 0x03 SQLi Filter的实现及Evasion 0x04 延伸及测试向量示例 0x05 本文小结 0x06 参考资料 0x00 前言 笔者前几天在做测试时输入攻击向量后页面发生了重定向甚至异常输入也是重定向怀疑其中有WAF在作怪.之前对WAF接触比较少纯粹是新手趁此科普了一下并查阅了一些绕过WAF的方法.所找到的资料中主要分为两类SQL注入和XSS绕过笔者SQL注入同样是新手

SQL注入测试平台 SQLol -2.SELECT注入测试

前面,我们已经安装好了SQLol,打开http://localhost/sql/,首先跳转到http://localhost/sql/select.php,我们先从select模块进行测试. slect模块,有输入处理和输出处理,可以配置不同的sql注入情况,这里先以最简单的,不做任何输入处理的情况进行测试,慢慢进行深入,sql配置如下图: 1.输入测试语句 2.显示完整sql语句,方便构造 3.选择注射位置(分别8中不同的注射位置,下面我们以注射位置进行分类测试) 一.WHERE 子句里的字符

【web安全】第六弹:手工SQL注入详解

前一段时间,在对SQL注入有了新的理解之后,写了这篇文章.本来准备投稿,因为内容过于基础被打回来了,想想屯着也没意思,发出来发出来~~本来有好多图的,但是博客园发图很麻烦,word文档的链接会贴在文章最后面,有兴趣的可以下载下来看. 注:本文目标读者是对SQL注入有一定了解,能使用一些工具(SQLMAP.pangolin等)进行自动化SQL注入测试,又想了解工具原理和SQL注入原理的童鞋. 0x00 基础理论篇 0x01 注入技巧&基本模式: 首先,要对下面的一些函数和基本语句有一定的了解. 1

【转】深入理解SQL注入绕过WAF和过滤机制

原文 http://www.cnblogs.com/r00tgrok/p/SQL_Injection_Bypassing_WAF_And_Evasion_Of_Filter.html [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 本文小结 0x6 参考资料 0x0 前言 促使本文产生最初的动机是前些天在做测试时一些攻击向量被WAF挡掉了,而且遇到异常输入直接发生重定向.之前对W

渗透学习笔记--基础篇--sql注入(字符型)

环境:dvwa1.7数据库:mysql前置知识:sql语句(Click me)      在进行sql注入前,我们先熟悉熟悉select语句.一.打开我们的sql终端 二.进入之后可以看到有mysql>我们输入sql语句,即可返回我们想要的结果,注意分号哟!我们使用的dvwa,在我们前几章设置的时候,会在数据库中生成一个dvwa的database:这里我们使用它来进行我们的select 语句:(1)使用dvwa数据库use dvwa;(2)在users表里查询用户名为'admin'的所有信息se

关于防止sql注入的几个知识点

1.PDO预处理是首选. 你可以把他看成是要运行的sql的已经编译过的模板,它可以用变量参数进行定制 它有两个显著优点: 1.1:查询仅需解析一次,但可以用相同或者不同参数执行多次.换句话说如果要以不同的参数执行同样的语句执行多次,利用PDO可以大大降低应用程序的速度. 1.2:提供给预处理的语句不需要携带引号,所以可以有效防止sql的注入.但是如果查询的其他部分是由未转义的输入来构建的,则仍存在sql注入的风险. 1.3:另外pdo预处理无效的地方: 1.3.1:limit语句 1.3.2 :

SQL注入原理小结

今天,一基友问我一个问题说:为什么SQL注入要加单引号,这个当时我一时也回答不上,怪就怪自己理论太菜,不过回去仔细思考了一下,觉得这个问题也是蛮简单的. 首先大家应该明白的一点就是SQL注入的目的:加单引号是为了让后台SQL语句执行的时候报错,这样,我们就可以初步判断单引号被放在SQL语句中执行了,只是执行的语句因为有单引号而出错了,这里我都有点啰嗦了,笑. 要防御这种单引号攻击,服务器有3种办法: 1.  将单引号过滤或者替换 – 一般程序都是这样做的 2.  将单引号转义 – 所谓转义就是让