Navicat for MySQL导入XML数据
在对某一个站点进行渗透测试时发现该网站自动记录用户个人信息,生成log.txt文件,该文件已经超过700多M,使用Notepad打开已经比较费劲,通过浏览器查看,发现该文件明显是以XML语法进行记录的,如图1所示,给补天平台报告该漏洞,我是通过文件行数来进行计算,但从技术的角度,我还是想试试看能否转发成数据库文件,通过实际测试,发现完全可以通过Navicat for MySQL将该文集导入到数据库中,前提是需要将该log.txt文件重命名为xml文件。

图1查看文件内容及其格式
1.1.1选择编码方式
打开Navicat for MySQL,选择一个数据库并打开,然后选择“导入向导”,“导入类型”选择“xml文件”,然后再选择数据源也即需要导入的数据文件,如图2所示,同时选择UTF-8编码,这个非常重要,如果编码选择错误,则导入数据库可能会是乱码,还有可能在导入数据库过程中直接出错,导致数据导入失败。

图2选择编码格式
1.1.2选择表字段
如图3所示,可以从下拉箭头中选择一个值作为表行的标签,可以选择软件提供的值,也可以自行指定,其实我理解就是表里面的各个字典,然后单击“下一步”继续进行设置。

图3选择表字段
1.1.3设置数据行
如图4所示,如果第一个数据行是栏位名称,则第一个数据行则设置为2,否则设置为1,其它选择默认设置即可,栏位名称一般是数据的第一行。

图4设置数据第一行和栏位名称
1.1.4设置目标表名
源表表示从其中导入数据库,目标表则表示导入后的数据库中的表名称,软件会自动指定一个名称,在如图5所示,自动显示目标表为log,注意在有些情况下,目标表名如果为特殊字符比如含有“.”等将不会导入数据成功,因为这些名称是数据库禁止使用的,所以不会创建表失败。

图5设置表名称
1.1.5设定导入表的栏位名称
如图6所示,在Navicat会自动识别XML中的字段名称,将其转化为数据库能够接受的格式也即数据库栏位名称,一般选择默认即可,特殊情况下,需要自行修改为对应的数据库类型和长度。

图6设置栏位名称
1.1.6选择导入模式
在导入模式中,有五种模式可供选择,但在本例中一共有两种方式,一种是添加,一种是复制,默认选择“添加”即可,如图7所示,后续选择默认设置即可开始导入数据。

1.1.7导入数据库
如图8所示,开始导入数据库,在该窗口会显示数据导入进度,已经处理数据记录,错误信息,已经添加,以及耗费的时间等信息,100%表示导入成功。

图8导入数据
1.1.8后续处理
导入成功后,将一些无用的数据进行清理:
delete from log where toname ='0'
delete from log where toname ='1'
delete from log where appid isnull
最终整理的数据库表log打开后如图9所示,可以看到有手机号码,appid,短信发送内容等,算是比较严重的信息泄露了,本文仅仅研究技术,还原数据后将其数据全部清除。

图9数据整理后的效果