数据库和SQL注入科普

数据库?

数据库是一种数据结构的存储解决方案,可分为关系型数据库(MySQL、SQLite等)和非关系型数据库(MogonDB、Redis等)。关系型数据库基于关系模型,即二维表格模型,在传统的CURD操作中可以提供快速的解决方案;而非关系型数据库源于NoSQL(Not Only SQL)的思想,更适用于分布式存储和海量数据处理。数据库注入涉及SQL语句,因此在这里以关系型数据库MySQL为例。

参考:关系型与非关系型数据库的优缺点 | CSDN

MySQL/SQL基础

MySQL的安装和基本使用都可以在参考链接中找到,这里仅贴上MySQL_Secure_Installation的安装流程。

MySQL_Secure_Installation

[root@myserver ~]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL

SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current

password for the root user. If you've just installed MySQL, and

you haven't set the root password yet, the password will be blank,

so you should just press enter here.

Enter current password for root (enter for none):<–初次运行直接回车

OK, successfully used password, moving on…

Setting the root password ensures that nobody can log into the MySQL

root user without the proper authorisation.

Set root password? [Y/n]         <– 是否设置root用户密码,输入y并回车或直接回车

New password:                       <– 设置root用户的密码

Re-enter new password:         <– 再输入一次你设置的密码

Password updated successfully!

Reloading privilege tables..

… Success!

By default, a MySQL installation has an anonymous user, allowing anyone

to log into MySQL without having to have a user account created for

them. This is intended only for testing, and to make the installation

go a bit smoother. You should remove them before moving into a

production environment.

Remove anonymous users? [Y/n]           <– 是否删除匿名用户,生产环境建议删除,所以直接回车

… Success!

Normally, root should only be allowed to connect from 'localhost'. This

ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]           <–是否禁止root远程登录,根据自己的需求选择Y/n并回车,建议禁止

… Success!

By default, MySQL comes with a database named 'test' that anyone can

access. This is also intended only for testing, and should be removed

before moving into a production environment.

Remove test database and access to it? [Y/n] <– 是否删除test数据库,直接回车

- Dropping test database…

… Success!

- Removing privileges on test database…

… Success!

Reloading the privilege tables will ensure that all changes made so far

will take effect immediately.

Reload privilege tables now? [Y/n]       <– 是否重新加载权限表,直接回车

… Success!

Cleaning up…

All done! If you've completed all of the above steps, your MySQL

installation should now be secure.

Thanks for using MySQL!

[root@myserver ~]#

参考:MySQL教程 SQL教程

什么是注入?

注入(inject)攻击产生的本质原因是输入过滤机制的不完善,导致攻击者可以利用输入数据构造执行代码,从而造成信息泄露、数据损坏、服务宕机等一系列问题。由于注入(inject)攻击常常导致严重后果,进一步催生了一切输入有害的重要安全思想。

注入如何产生?

注入攻击产生的本质是:当一段输入数据需要添加到另一端执行指令或代码中时,攻击者可以根据指令或代码的语法刻意构造一段输入数据,造成的输入数据作为指令执行的错误。

例如在PHP + MySQL平台下:

<?php 
$name = $_POST['name']; 
$con = mysqli_connect("127.0.0.1","root","","test") or die("error");

$query = "SELECT * FROM person WHERE name='$name';";
$result = mysqli_query($con,$query);
while($row=mysqli_fetch_assoc($result))
    echo $row['age'];

这是一个用户通过输入name从person表查询对应age的场景,但是代码中没有对输入变量name进行任何检测和过滤,如果我们构造name为1'or'1'='1,那么查询语句$query就会变成:"SELECT * FROM person WHERE name='1' or '1'='1';",然而该查询语句恒成立,意味着这样的输入将会爆出数据库person表中所有人的age,造成信息泄露。

在上面这个案例中,如果我们对name或者query进行过滤,比如将'"转义,或者字符处理掉=,那么上面构造的输入数据不会被执行。这只是一个最简单的案例,想了解和实践更多可以部署DVWA进行测试(推荐版本1.9)。

SQL注入

根据是否有直接反馈信息分为 普通注入 和 盲注,盲注往往通过时间盲注和布尔盲注来反馈信息。

一个SQL注入的大概流程是这样的:
1.注入POC
2.猜字段数
3.猜字段顺序
4.爆数据库名
5.爆表名
6.爆字段
7.脱裤

有些步骤根据实际情况可有可无的,MySQL爆库过程中需要用到information_schema,具体参考:
DVWA-1.9全级别教程之SQL Injection
DVWA-1.9全级别教程之SQL Injection(Blind)

后续

注入的精髓在于根据不同过滤机制进行绕过,绕过的方法五花八门,各种神仙操作,下一次关于注入的科普会涉及SQL注入中常见的绕过手段和注入姿势。挂了一大堆链接就请见谅了XD

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343