前两天朋友小程序后台,有异常登陆,怀疑原来外包公司写的代码有问题,把源代码发给我让我帮忙看看找找漏洞,话不多说搭建起来,看看.

首先判断,异地登陆了后台,服务器没有找到木马,应该是通过sql injection方式入侵.

粗略看了下他们代码,php写的,结构到是很清晰,传参方式用的HTTP_RAW_POST_DATA ,头文件包含了360防sql注入的代码,封装了一个safe_input()函数针对 file_get_contents(“php://input”) 的过滤,代码太老,文件太多,懒得一个一个看.感觉需要写一个辅助测试工具实时监控sql语句,辅助自己找到sql语句漏洞.

我的想法是写个程序hook到mysql query的函数,获取当前执行的 sql 语句先在我的程序里面检查有没有漏洞

拿起x64dbg 开干.下断点 bp recv

漫长的跟踪后找到

确定这个函数入口里面可以找到当前正在执行的 sql语句. 祭出python 写代码

from __future__ import print_functionimport fridaimport sysimport safesession = local.attach("mysqld.exe")script = session.create_script("""Interceptor.attach(ptr("%s"), {onEnter: function(args) {//console.log(args[2]);var rbx=this.context.rbx;var sql=Memory.readUtf8String(Memory.readPointer(rbx.add('0x40')));send(sql);}});""" % int("0x7FF75BCD1B20", 16))#0x7FF75AE81B20def on_message(message, data):safe.chksql(message['payload'])script.on('message', on_message)script.load()sys.stdin.read()session.detach()

看下成果,手工检测漏洞一目了然.

在看前端页面的时候发现在/app/userinfo 接口没有用 safe_input() 而直接使用file_get_contents(“php://input”)

提交朋友收工,代码写得比较仓促直接使用的内存地址,以后完善.

代码审核是在公司授权下审核,禁止恶意差评.

不接游戏外挂开发….再次说明!!谢谢.

原创不易,请关注点赞.