可以直接把下面的代码复制到sqlilabs第一关的php中,里面的东西是能用的
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Less-1 **Error Based- String**</title>
</head>
<body bgcolor="#000000">
<div style=" margin-top:70px;color:#FFF; font-size:23px; text-align:center">Welcome <font color="#FF0000"> Dhakkan </font><br>
<font size="3" color="#FFFF00">
<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))//isset()函数用于检测变量是否已设置并且非NULL。如果已经使用unset()释放了一个变量之后,再通过isset()判断将返回FALSE。(验证id有没有值传入)
{
$id=$_GET['id'];
//id的值用get取出,当然还有很多其他的方式取出。例如:$_POST
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
//文件打开,a是写入功能(还有a+,w等功能,具体看下面链接)
//fopen() 函数打开文件或者 URL。如果打开失败,本函数返回 FALSE。
//参考链接https://www.w3school.com.cn/php/func_filesystem_fopen.asp
fwrite($fp,'ID:'.$id."\n");
//文件进行写入
//参考链接https://www.w3school.com.cn/php/func_filesystem_fwrite.asp
fclose($fp);//文件保存关闭
//参考链接https://www.w3school.com.cn/php/func_filesystem_fclose.asp
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
//这句qsl的意思就是,select查询所有from来自users中的where条件的信息
//limit(第几行,第几列)查询数据
//id也是需要数据库中有的(具体看sqlilabs的security数据库中user的字段id)
//--+是注释后面的东西,注意“database();--+”是有;的,详情看这个链接(https://blog.csdn.net/qq_44159028/article/details/114820256)
//
//union介绍↓
//union相当于一个连接,
//union 用来合并两个或多个 SELECT 语句的结果集,union 只能链接查询两个表中共同都有的字段的相关命令,如果一个字段在另外一个表中没有,就会报错
//union 注意php前端只显示34。1,2有数据也不显示(所以起步就必须是union select 1,2,3)
//
//解析http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select (us前面没有直接弄后面)(前端只显示34)(有几列就有几个,4列即1,2,3,4)1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
//为什么要union这个命令?
//如果我们直接输入查询字段进行查询,语句会非常冗长,而且很可能还需要做很多次测试,这时候我们利用一个简单的select 1,2,3,根据显示在页面上的数字就可以知道哪个数字是这个“通道”,那么我们只需要把这个数字改成我们想查询的内容(如id,password),当数据爆破成功后,就会在窗口显示我们想要的结果。(实验通道,看哪个能进去)// ="SELECT * FROM users WHERE id='-1' union (注意分开,union的实际意思)select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+'LIMIT 0,1";
//
//我们可能还会用到order by
//ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照升序对记录进行排序。例如:order by 4的意思是,4是字段数(四个字段),查询时根据4这个字段的大小来进行降序查询
//
//其他可能遇到的常用命令:
//group_concat 可以将所有的tables 提取出来
//information_schema是mysql特有的库,存储各种数据库的信息
//table_name:表名
//column_name:列明
//information_schema.tables:存储表明信息的表
//information_schema.columns:存储列明信息的表
//table_schema:数据库名
//mysql中符号“.”代表下一级例如:information_schema.tables:数据库infor…下的tables表
//group_concat(table_name)把这个里面所有信息显示出来(如果没有这个的话就只会显示一个表明)
// and table_schema=’’可以使所求列名更精准,例如:如果一个表有id和name但是用没有and table_schema=’’查出来的可能是id,name,http,ID等so…一定要加
//User()查询数据库用户
//Database()查询数据库库名
//Version()查询数据库版本
//@@compile_version_os查询操作系统
$result=mysql_query($sql);//结果返回页面
$row = mysql_fetch_array($result);//返回根据从结果集取得的行生成的数组,如果没有更多行则返回 false。
//下面就是一些错误提示
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
else { echo "Please input the ID as parameter with numeric value";}
?>
</font> </div></br></br></br><center>
<img src="../images/Less-1.jpg" /></center>
</body>
</html>