前言
分析某金属交易平台后台管理软件,利用SQL注入达到提权目的(演示敏感内容将会打码处理)。
工具
1..net framework
2. ExeinfoPe
3..Net Reflector
漏洞分析
首先我们登录软件查看软件有哪些功能(这里我有一个权限不足的帐号)。
登录成功后我们会看到如下菜单内容,随便点开几个界面看看,查看有数据并且操作正常。
接着我们打开安装好的软件目录,查看一下目录下有什么内容,发现目录比较简单,而且使用了DevExpress控件库(你问我为什么知道,我把这个名字百度上一搜索就出来了),https://baike.baidu.com/item/DevExpress/8754446?fr=aladdin
我们使用Exeinfo工具查看Launcher是什么语言开发的,是否带壳
看到这个信息我们发现是.net开发的程序,我们可以使用Net Reflector 来查看程序源码。
Program是.net程序的入口点,我们可以从Program下手查看Main里面调用哪些内容
发现这里有一个主界面函数MainForm,通过分析代码找到合适的断点,可以多下几个断点。比如:“MessageBox.Show”、"TextBox.Text"、"DataGridview.DataSouce"、“Enable”。多尝试一些然后根据堆栈回溯,找到你需要程序逻辑的位置。
我们随便挑选一个功能查看,看看里面代码。发现里面有SQL语句,通过这个语句我们发现这个程序有SQL注入漏洞。通过修改如何SQL可以查询更多数据,比如将时间条件移除这样可以查询出更多数据。
通过SQL语句中使用IFNULL函数这里猜测使用mysql数据库。那么我们就采用mysql脚本攻击。
1.查询库中所有表
select * from sysobjects where xtype='U'; --xtype='U':表示所有用户表, --xtype='S':表示所有系统表。
2.查询表中所有列
select name from syscolumns where id=Object_Id('表名');
3.查询表中所有列名和字段类型
select sc.name,st.name from syscolumns sc,systypes st where sc.xtype=st.xtype and sc.id in(select id from sysobjects where xtype='U' and name='table_name');
这三条语句用于查看远程数据库中有哪些表结构关系,可以用于将远程数据库下载到本地使用(俗称“拖裤”),可以自己写一个软件也可以使用我提供的工具,工具将会在下一篇文章中发布出来。
攻击步骤:
1.找到select和insert、update、delete地方个一处,方便后面提权操作
2.执行sql查询语句查询库中有哪些表结构
3.找到类似管理员或者,用户数据表结构
4.查看用户或者管理员表数据,找到自己ID对应的数据行
5.通过执行sql语句进行修改对应的数据达到篡改数据的结果
漏洞总结
通过静态程序,找到程序中使用Sql语句的地方,静态修改后动态运行,从而执行我们想要修改的数据,这个修改过程需要多次尝试。通过服务器返回的对应的错误信息进行反复修改尝试,最终达到攻击目的。