开源程序安全剖析
0day攻击
一般是指没有公开,没有补丁的漏洞,也就是未公开的漏洞。
挖掘Oday的方式一般有两种:源代码审计(白盒测试)和模糊渗透测试(黑盒测试)。
一些常见的源代码审计工具有Source Navigator、Fortify SCA、CheckMarx、 CodeScan、Skavenger等,到目前为止并没有一款全自动的源码审计工具,全部都是半自动的,也就是必须要人工参与。工具做的只不过是查找些危险函 数等,需要根据危险列表加以分析,而这些危险列表的80%都是误报,得靠经验一一排除。
网站后台安全
导致后台脆弱原因
1.模板
2.文件管理
3.执行sql语句:使用SQL导出一句话木马,关键是看数据库,而与脚本无关。不同的数据库导出Shell 的语句也不同
(1)Access 导出Shell只能配合IIS 6的解析漏洞,如果导出ASP格式,将会提示“不能更新,数据库或对象为只读”。
(2) SQL Server 并没有提供直接导出数据的语句,但通过Xp_ _cmdShell 也能达到类似的功能,xp_ cmshell过程添加系統用户
(3)Oracle
4.网站备份
MD5
在保存密码到数据的时候不使用明文,一般会采用 MD5加密后再存储。
破解方法:(1)彩虹表破解
彩虹表(Rainbow Table)是一个庞大的、针对各种可能的字母组合预先计算好的哈希值的集合。彩虹表不仅针对MD5算法,主流的算法都有对应的彩虹表。利用它可以快速破解各类密码。越是复杂的密码,需要的彩虹表就越大,现在主流的彩虹表都是1TB以上的。
获取方法:(1)在网上下载已经有的彩虹表。网上有很多彩虹表,可根据破解的密文类型下载相应的彩虹表,大型的彩虹表都是以太字节(TB)为单位的; .
(2)使用工具生成彩虹表。使用工具可以生成对应加密算法的彩虹表,但生成速度较慢。常见的彩虹表生成工具有RainbowCrack、Cain 等。
配制信息:Hash:选择要生成彩虹表中的种类,也就是彩虹表的分类,Cain几乎支持所有主流的加密算法的彩虹表生成;MinLen: 最小位数,也就是明文密码的最低位数;MaxLen: 最大位数,也就是明文密码的最高位数。其他选项如Chain Len、Chain Count, N° of tables是控制所生成表破解成功的概率,软件下方将会显示当前生成模式的破解率。表分割得越细,成功率就越大,生成的体积也越大,所需要的时间也越长。
破解:Rainbowcrack、 Cain 等工具。使用Rainbowcrack破解MD5非常简单,只需要以下一条命令即可。rcrack.exe -h密文彩虹表目录
(2)专业的MD5破解站点
常见破解站点
拖库
支持外连接
ASP.NET的数据库配置信息一般保存在web.config文件中,一个网站可能会有多个confg文件,数据库配置信息可能就在其中一个文件内。
PHP数据库配置信息一般都会保存在inc、db、fun等目录的config.php、conn.php、 web.php源码文件中。而PHP源码通常是未加密的,可以通过与数据库交互的页面快速找到数据库连接信息。
JSP经常改动的信息一般都会 保存在文本文件中。这个文件主要分为两种类型: Properties 文件(属性文件, 一般以Properties为扩展名)与XML文件,其保存位置一般是在/WEB-INF/文件夹中。使用框架技术之后,其位置也可能随之变化,但一般数据库配置信息都保存在XML文件中。
Navicat 是-款强大的数据库操作软件,它分为很多版本,比如, Navicat for MySQL专门针对MySQL数据库进行操作; Navicat for Oracle专门针对Oracle数据库操作,更强大的是Navicat Premium版本,支持在MySQL、Oracle、PostgreSQL. sQLite及SQLServer之间传输数据,是各种版本的集合。
Navicat适用于三种平台: Microsoft Windows. Mac OS X和Linux。它可以让用户连接到本机或远程服务器,提供一些实用的数据库工具(如数据模型、数据传输、数据同步、结构同步、导入、导出、备份、还原、报表创建工具及计划)来协助管理数据。
单击“连接”→“SQL Server”。在“常规"选项卡中,填写数据库的基本信息,连接名任意填写,在主机名/IP地址文本框内输入IP地址,并在用户名和密码文本框内填写相应的信息。
在“高级”选项卡中可以设置连接超时时间,SSH选项卡则是使用SSH通道连接,这两个选项卡- -般默认即可。
单击“确定”按钮后在左侧将会显示“atack”数据库连接名称,双击“atack”即可连接数据库。
使用Navicat转存数据可分为两种方式:一种是导出表结构,包括约束、验证以及插入数据的SQL语句(表中的数据将以Insert 语句的方式展现),可以说是把整个表完全复制下来;另-种则是导出表中的数据,不需要表结构信息,是纯数据。
1.导出表结构及数据
选中要导出的表,并单击鼠标右键,选择“转储SQL文件”,这时,Navicat 将会提示你的文件导出后的保存位置,设置好导出文件的保存位置后,单击“保存”按钮,即可导出表结构及数据。
2.导出表数据
选择要导出数据的表(可多选),并单击鼠标右键,选择“导出向导”,将弹出“导出向导”对话框。选择要导出的格式,Navicat 提供了很多格式,最常用的有以下几种。
TXT文本文件:不包含任何表结构,只是纯文本内容:
HTML网页文件:把数据以网页形式展现:
Excel表格:把数据以表格的形式展现;
XML文件:把数据以XML形式展现;
SQL文件:这个比较特殊,把数据以Insert的形式展现。
不支持外连接
一.SQL注射
sqlmap
--dump转存数据
--csv-del: 导出CSV格式时,列与列之间的间隔字符,默认为空格:
--output-dir: 导出文件夹:
--dump-format: 导出格式,默认为CSV格式,可选择的导出格式有CSV. HTML和SQLITE三种。
--sql-query:执行SQL语句,要执行的SQL语句必须用双引号引起来,以保证命令的完整性。
burpsuite
在使用Burp Suite导出数据之前,首先要确定1.表结构;
2.导出数据条数:
3.构造好导出的SQL语句。
导出数据时,一般都以ID为导出标准,因为在一个数据表中,一般会有[*id]作为表的唯一列标识(主键),这是数据库的三大范式之一.
导出数据
1.将URL载入到Burp Suite Intruder 模块,并将uid的值设置为变量
2.设置PayLoads,把PayLoads类型设置为Numbers,并且从0开始,到数据条数最大值结束,每次增长为l。也就是说,将遍历所有的数据,包括已经删除的数据
3.选择抓取的数据,在“Option"→“Grep Extract” 模块中单击“add"按钮,然后在弹出的新界面中选择“Fetch Response”获取返回信息。获取返回信息后,选取你要抓取的内容,Burp Suite会根据选取的内容自动生成正则表达式。
4.选择“Intruder”→“Start attack",开始导出抓取数据
在抓取数据完毕后,选择“Save”→“Results Table",保存导出数据的界面
保存数据时选择“All Rows",表示保存所有的行,“Delimiter” 代表列与列之间的分隔符,默认为“Tab” 制表符,如果想自定义分隔符,可以使用“Custom”。
“IneludeColumns"是重要的选项,可以勾选要保存的列,选择好相应的信息后,单击“Save”按钮就可以保存提取出的数据。
取消空白行
主流数据库常用的分页语句如下(其中,I代表起始位置,N代表结束位置):
1.Postgre SQL
select * from table limit I offset N;
2.Oracle
select t2.* from (select rownum r,t1.* from table t1 where rownum<N ) t2 where t2.r>I;
3.MySQL
select * from table limit I ,N;
4.SQL Server
select * from (select top I+N * from table) a where id not in(select top I id fromtable)
SQL Server分页的写法有很多,这是其中最简单的一种,效率较低,适用于小数据。
二.越权访问
三.本地导入
已有网站权限,攻击者就可以向Web 服务器上传类似于“PHPMyAdmin"在线数据库管理的“拖库脚本”。这类脚本非常小巧,是专门针对数据导出而写的脚本。
第一步:连接数据库信息。
导出数据时首先应该确定数据库信息,包括数据库的库名、账号、密码及端口信息,填写好相关数据库的配置信息后,单击“submit" 按钮连接数据库。如果数据库连接信息正确,将会读取出|指定数据库的表数据条数及表结构信息。
第二步:填写导出信息。
在得知表结构之后,就可以填写要导出的表、列、每次导出行数,以及导出数据的保存路径。在填写完信息后,单击“开始导出”按钮,即可导出数据。
Navicat
在Navicat安装目录下有三个PHP文件,分别是: ntunnel mysql.php、ntunnel_ pgsql.php和ntunnel_ sqlite.php。 这三个文件分别支持对MySQL、PostgreSQL、 SQLite数据库使用HTTP通道连接。HTTP通道经常用于以下情况:网站空间服务商不允许远程连接MySQL,也就无法利用Navicat客户端通过填写服务器地址来远程连接MySQL。这时可以通过HTTP通道方式连接服务器的MySQL数据库。
将ntunel mysql.php上传到网站根目录,然后打开Navicat,单击“新建连接”→“MySQL",选择“HTTP”选项卡,勾选“使用HTTP通道”,在“通道地址”栏写入ntunel mysql.php的URL,填写完HTTP通道地址后,返回“常规”选项卡,填写连接名、用户名及密码。这里需要注意的是,要连接的主机IP地址应该为“Localhost"或“127.0.0.1",代表本地连接。填写完后,即可远程连接MySQL数据库