mysql_real_escape_string

int型参数的SQL注入

牧云@^-^@ 提交于 2020-03-26 23:12:53
类似PHP语言的 mysql_real_escape_string() 的函数,在用来防范SQL注入的时候,可能会遇到int型注入成功的情况。 mysql_real_escape_string()用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。 下列字符受影响: \x00 \n \r \ ' " \x1a 如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。 使用案例 过滤String型参数的代码案例: <?php $con = mysql_connect("localhost", "hello", "321"); if (!$con){ die('Could not connect: ' . mysql_error()); } // 获得用户名和密码的代码 $user = $_POST("user"); $pwd = $_POST("pwd"); // 转义用户名和密码,以便在 SQL 中使用 $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd

Less(36)GET-Bypass MySQLreal escape_string

淺唱寂寞╮ 提交于 2020-03-05 09:08:14
1.查看一下php文件:         这里使用了mysql_real_escape_string()函数来进行过滤,对于mysql_real_escape_string函数而言,它会转义以下特殊字符:\x00 , \n , \r , \ , ' , " , \x1a   如果转义成功,那么该函数返回被转义的字符,如果失败,则返回false.   但是因为mysql并没有设置成GBK,所以mysql_real_escape_string()依旧可以突破。方法和之前所用的一样:   注:再使用mysql_real_escape_string()时,可以通过将mysql设置为gbk来防止这种注入。   设置代码:mysql_set_charset('gbk','$conn')   可以通过宽字节 %df ,%E6,%99或者utf-16 2.爆破:   (1)爆库:?id=-1%E6' union select 1,2,database()--+        (2)爆表: ?id=-1%E6' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=0x7365637572697479 --+        (3)爆列名:?id=-1%E6' union

sqli-宽字节注入

*爱你&永不变心* 提交于 2020-02-18 00:03:15
0x0 背景 当某字符的大小为一个字节时,称其字符为窄字节. 当某字符的大小为两个字节时,称其字符为宽字节. 所有英文默认占一个字节,汉字占两个字节 常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等等 0x1 宽字节注入原理 程序员为了防止sql注入,对用户输入中的单引号(’)进行处理,在单引号前加上斜杠(\)进行转义,这样被处理后的sql语句中,单引号不再具有‘作用’,仅仅是‘内容’而已,换句话说,这个单引号无法发挥和前后单引号闭合的作用,仅仅成为‘内容‘ 【再举个例子,要找某位名字里带单引号的用户,搜索的时候,就要让单引号成为内容去搜索,而不能起到其他作用】 而安全测试人员要绕过这个转义处理,使单引号发挥作用,有两个思路: 让斜杠(\)失去作用 让斜杠(\)消失 第一个思路就是借鉴程序员的防范思路,对斜杠(\)转义,使其失去转义单引号的作用,成为‘内容’ 第二个思路就是宽字节注入 当使用宽字节编码,如:GBK时,两个连在一起的字符会被认为是汉字,我们可以在单引号前加一个字符,使其和斜杠(\)组合被认为成汉字,从未达到让斜杠消失的目的,进而使单引号发挥作用 注意:前一个字符的Ascii要大于128,两个字符才能组合成汉字 0x2 注入方法 0x21 黑盒 可以看到,在发现单引号被转义后,当我们加了%df后,sql语句报错,说明单引号发挥了作用

htmlentities,mysql_real_escape_string,addslashes

淺唱寂寞╮ 提交于 2020-02-06 00:23:44
另外一个Web应用安全的基础是对输出进行转义或对特殊字符进行编码,以保证原意不变。例如,O'Reilly在传送给MySQL数据库前需要转义成O\'Reilly。单引号前的反斜杠代表单引号是数据本身的一部分,而不是并不是它的本义。 我所指的输出转义具体分为三步: l 识别输出 l 输出转义 l 区分已转义与未转义数据 只对已过滤数据进行转义是很有必要的。尽管转义能防止很多常见安全漏洞,但它不能替代输入过滤。被污染数据必须首先过滤然后转义。 在对输出进行转义时,你必须先识别输出。通常,这要比识别输入简单得多,因为它依赖于你所进行的动作。例如,识别到客户端的输出时,你可以在代码中查找下列语句: echo print printf <?= 作为一项应用的开发者,你必须知道每一个向外部系统输出的地方。它们构成了输出。 象过滤一样,转义过程在依情形的不同而不同。过滤对于不同类型的数据处理方法也是不同的,转义也是根据你传输信息到不同的系统而采用不同的方法。 对于一些常见的输出目标(包括客户端、数据库和URL)的转义,PHP中有内置函数可用。如果你要写一个自己算法,做到万无一失很重要。需要找到在外系统中特殊字符的可靠和完整的列表,以及它们的表示方式,这样数据是被保留下来而不是转译了。 最常见的输出目标是客户机,使用htmlentities( )在数据发出前进行转义是最好的方法。与其它字符串函数一样

mysql_real_escape_string()函数的作用

▼魔方 西西 提交于 2019-12-24 00:48:52
相关函数:get_magic_quotes_gpc()在PHP5.4中已被丢弃 mysql_real_escape_string() 说明这个函数在PHP5.5中不建议使用,在将来的版本中将会被丢弃,建议使用: mysqli_real_escape_string() PDO::quote() mysql_real_escape_string()函数的作用: 防止SQL Injection攻击,也就是你必须验证用户的输入 操作数据的时候避免不必要的字符导致错误 例子:攻击的例子[1] 例子 1 <?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // 获得用户名和密码的代码 // 转义用户名和密码,以便在 SQL 中使用 $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'" // 更多代码 mysql_close($con); ?> 例子

PHP mysql_real_escape_string() 函数

守給你的承諾、 提交于 2019-12-10 01:46:11
PHP MySQL 函数 定义和用法 mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。 下列字符受影响: \x00 \n \r \ ' " \x1a 如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。 语法 mysql_real_escape_string(string,connection) 参数 描述 string 必需。规定要转义的字符串。 connection 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。 说明 本函数将 string 中的特殊字符转义,并考虑到连接的当前字符集,因此可以安全用于 mysql_query() 。 提示和注释 提示:可使用本函数来预防数据库攻击。 例子 例子 1 <?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); }// 获得用户名和密码的代码// 转义用户名和密码,以便在 SQL 中使用$user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT *

dvwa-sql injection

强颜欢笑 提交于 2019-12-06 06:47:19
因为之前为了my,去教了ctf进阶(不是因为我学的多,只是因为我是大三的),总结了一份PPT,对sql手工注入的过程以及sql各种高级注入都了解了一些,个人感觉还是挺熟的 写的较为简略,给自己参考的 0x00、简介 sql注入,简单的来说就是对用户输入的数据没有进行查询,导致用户输入恶意语句,构造一些可以被执行的sql语句,导致数据库被拖等严重后果 0x01、dvwa实战 一、low 1、判断是否为注入点和注入点类型 输入:1' and '1' ='1'#:  (#表示注释掉后面的) 输入:1' and '1' ='2',无回显 可判断该点为注入点,且参数闭合方式为单引号闭合 2、跟据 order by 判断字段长度 order by n,若字段n不存在会报错,输入 1' order by 2 #: 输入1' order by 3 #: 说明查询语句所查的表个有两个字段 3、利用union select和sql内置函数得到当前数据库名称,版本信息等 union select 要求前后查询的字段一致,所以需要判断当前表的字段长度,输入 -1 ' union select 1,2#可判断回显位置(前面没查询到,显示的自然就是后面查询的了): 既然都回显,我们将内置函数放在任何一个字段都可以,-1' union select database(),2#,查询得到当前数据库名称 4