渗透测试-第5天学习整理
网络渗透学习总结
1.sql注入环境搭建
phpstudy下载安装
sqli-labs下载解压,将解压后文件放在www文件下
关于mysql命令在win10命令框中无法使用
配置环境变量可使系统在任何路径下都能找到mysql命令。需找到MySQL的安装目录,一般安装目录下会有bin文件夹,如我配置文件中basedir为E:/phpstudy_pro/phpstudy_pro/Extensions/MySQL5.7.26/,则bin目录为E:/phpstudy_pro/phpstudy_pro/Extensions/MySQL5.7.26/bin。右键点击“此电脑”,选择“属性”,在左侧面板中点击“高级系统设置”,在弹出的“系统属性”窗口中,点击“环境变量”。在“系统变量”列表中,找到“Path”变量,点击“编辑”,点击“新建”,将MySQL的bin目录路径添加进去,然后点击“确定”保存设置。
接着在管理员权限的命令框中,切换到bin目录下
cd E:/phpstudy_pro/phpstudy_pro/Extensions/MySQL5.7.26/bin
执行
mysqld --install
将mysql安装为服务,此后就可以在命令框中使用mysql命令
2.sql注入靶场使用
启动phpstudy,在首页启动nginx服务,启动mysql服务
本人将靶场文件导入www/下时重命名为了sqli,在浏览器地址栏中输入“localhost/sqli”即可访问该sqli注入靶场。
常用mysql函数:
mysql的五个截断函数:substr、substring、left、right、mid
subtr:字符串截断1型,图例为“截断从root中第一位字符开始截断,截断一个字符”
substring:字符串截断2型,与1型功能相同
left:从左截断,从左往右截断root,截断一位字符
right:从右截断,从右往左截断root,截断一位字符
mid:与第一种相同
ascii:ASCII码转换
length:求长度
简单mysql语句:select if(now()=sysdate(),database(),user());
如果当前时间=当前时间,显示databases,否则显示user
mysql库中几个重要内容
information_schema:mysql安装时系统自动创建的一种索引,在其下有以下几个重要的表
SCHEMATA:记录数据库的名称
TABLES:记录所有表名,包含数据库名
COLUMNS记录所有列名,可以查询到数据库名和表名
mysql联表查询:union、join、
union:将表与表联在一起,要求列数相同,渗透未知列数的时候,用order by(排序)函数,使用时默认倒序排序,
当查到不存在的列数时可以侧面得知表单列数
join:查询两张表中的内容联在一起
3.sql注入的三种方式
例1:Less-1
<!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/sqli-connect.php");
//此处include包含sql-connections.php、sqli-connect.php两个文件,相当于将两个文件复制过来贴在这里
error_reporting(0);
// take the variables
if(isset($_GET['id']))
//isset,检测参数是否被声明,此处检测参数是否为真(被输入)
{
$id=$_GET['id'];
//get传参id
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
//打开result.txt文件,以‘a’追加的形式打开
fwrite($fp,'ID:'.$id."\n");
//写入输入的id
fclose($fp);
//关闭文档
// connectivity
// SELECT * FROM users WHERE id='1' #' LIMIT 0,1
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
//连接数据库成功后查询user表中id为输入传参的一行数据
//此处我们要让写入的id逃出该语句的单引号,可以通过注释的方式
//将后面的语句注释掉来使得传入的内容逃逸出单引号
//注释方法1-- ,2#,3/**/,
//因为有限制WHERE id=..所以限制了查询内容
// $sql="SELECT * FROM users WHERE id='0' union select 1,2,3 -- ' LIMIT 0,1";
// $sql="SELECT * FROM users WHERE id='0' union select 1,2,3 # ' LIMIT 0,1";
$result=mysqli_query($con1, $sql);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
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(mysqli_error($con1));
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>
select * from users union select user(),database(),version();
//这是我们要让数据库执行的语句
//为此我们从地址栏传入的语句应为如下语句
?id=-1’ union select user(),database(),vaersion()
//id为-1是因为代码限制了查询内容为传入id的内容,联表查询出的
//结果无法显示,故只要穿入一个不存在的id即可
//该语句中user()可以省略,因为前端代码不展示该数据
更多推荐
所有评论(0)