昨个介绍的那四位导致宽字节注入的屌丝,不知兄弟们是不是还记得。
啥?忘了?我感觉有必要把昨天的再温馨一边,发射------->
PHP代码审计之SQL注入-第二回
兄弟们都看不下去了,码的教程既然是mysql开头函数的教程,这难道是在说1995年的技术吗,别介,吾觉得是能够做参考的,至于2017年的技术,别急,咱必定要码全了码仔细了,先回顾下之前mysql开头的哪些函数的辉煌时代。
----------------------------------华丽的分割线--------------------你是体会不到我到底有多美
----------------------------------------
addslashes这个函数昨天已然干掉了,今的闯关任务便是搞定mysql_real_escape_string,而后就能够成功晋级了哈。
mysql_real_escape_string他会去转义sql语句中的特殊字符,并要去思虑当前的字符集(这句话要晓得,他会去思虑咱们设置的字符编码了)
,这么厉害吗?官方说了,能够安全用于mysql_query查找。呦呵,碾压addslashes了,好,翠花,上例子:
和昨天的那个例子比较,只是把addslashes函数替换成为了mysql_real_escape_string,那结果呢,翠花,上结果:
根据昨天的老办法为何注入成功了,难道官方骗了咱们,接着看:
代码中运用了set name设置了字符集,但官方说了举荐咱们用mysql_set_charset。因此咱们首要要明白的是她们之间区别在哪?set name功效是什么,它会告诉服务器我用的字符编码是谁谁谁,我期盼你返回我的结果字符编码和我一致。那样,mysql_set_charset呢,他是设置我连接数据库时的编码(便是说mysql_set_charset没设置,mysql_real_escape_string是没生效的),且他不仅持有set name的能力,还多出来一个功能,多出来的那个功能是什么?往下看:
上文中所了,mysql_set_charset会去思虑咱们设置的字符集,没错,这便是多出来的一个功能,他会按照咱们的字符集采用区别的策略。瞬间高挑上了有木有。
说这么多,代码怎么改,好,让翠花给咱们展示一下修改后的代码:
so easy了,只加个mysq_set_charset就可,第1个参数是字符集,第二个参数是链接。
翠花的下一道菜,相信大众都晓得了,请看:
查找成功了。那宽字节注入第1个防御办法就诞生了:运用mysql_set_charset(gbk)设置编码,而后运用mysql_real_escape_string()函数进行参数过滤。
但,还有一个广泛的问题。
在很久很久以前,大众写的cms有非常多都有用到addslashes这个函数,那岂不是来一个什么%df%27就容易拿下了吗,是的,但咱们要修复是不可能把addslashes都修改成mysql_real_escape_string,有人说所有搜索替换呗,这个办法不可能一帆风顺的,那怎样处理?
很简单:将character_set_client设置为binary二进制就可。
咱们只需要做一个动作,便是在sql语句前指定一下连接的形式是二进制:mysql_query("SET character_set_connection=gbk,character_set_results=gbk,character_set_client=binary",$conn);
这个动作什么意思?一句话:mysql接受到客户端数据后,会认为其编码是character_set_client,而后会将其转化为character_set_connection的编码,查找结果后会以character_set_results的编码返回客户端。
ok,宽字节第二个防御办法诞生了:character_set_client设置成binary,所有数据以二进制形式传递,都是0101那种了,敢问还会存在宽字节注入问题吗。
码字好累,先来装个逼休憩下:
四大屌丝(并非天王)搞定两个了,mysql_real_escape_string是不是有实力,咱们还要看mysql_set_charset有无设置,无的话就直接ko了。
代码审计办法请参考上篇的结尾处。
相信到这兄弟们都基本认识宽字节注入了,下回了再一起唠唠pdo和其他两个天王。
-----------------------------------------你敢说我的这个分割线不美?
------------------------------------------------------------------------
ok,倘若大众爱好网络三毛,欢迎wx关注网络三毛,不定时发布关于审计、攻防、安全、渗透方面的知识。
--------------回见!