54:代码审计-TP5框架审计写法分析及代码追踪
思维导图
案例1:demo代码段自写和规则写分析
具体见上一篇文章
案例2:hsycms-TP框架-不安全写法-未过滤
<1>分析程序源码,首先找到入口文件
<2>然后修改config.php文件,使app_debug=true,app_trace=true,打开调试模式。
<3>寻找网址对应的程序文件。
方法1:使用phpstorm或者seay系统打开程序源码,寻找路由,查看路由规则,找到各url访问地址对应的程序文件。比如product/133.html对应的程序文件就是/index/show/index,即app/index/controller/show.php页面中的index()方法。-->优点是可以直接找到对应的方法。
方法2:刷新页面,查看调试信息-流程页面,找到网址对应的文件,一步到位。-->缺点是只能找到对应的文件show.php,至于对应的方法还需进一步分析。
<4>查看新闻,发现每个新闻对应不同的id,比如下面新闻对应id=150
<5>查看该新闻页面对应的程序源码,发现了使用TP5框架规则写好的sql语句
<6>刷新页面时,使用数据库监控软件监控到了执行的SQL语句,正好与源码对应。
<7>尝试注入测试,将id修改为150sads,发现值未被过滤,直接被带入SQL语句。
<8>使用sqlmap尝试扫描,确定有sql注入。
小技巧:在注入点处加*,提示sqlmap扫描此处。
sqlmap.py -u http://127.0.0.1/news/150*.html --batch --current-user --current-db
<9>寻找原因。查询源代码,发现虽然SQL语句使用规则写法,但是接收变量id时不规范,使用了自定义的input方法。
进一步跟进input方法,发现使用其方法传参无过滤,导致ID可控,存在注入。
<10>修复建议:使用规范方法传参,比如:
$id = input(‘?get.id’); $id = input('?post.id'); $id = request()->get('id/a');
参考:https://www.cnblogs.com/7bit/articles/10551499.html
案例3:weipan21-TP框架-规则写法-内置过滤
<1>通过url地址可以猜测到路由地址未更改
<2>审计源码,发现均使用了规则写法,追踪调试,也没发现漏洞。
<3>查看版本,网上搜索相关版本对应的漏洞,使用公开payload测试,寻找可能的漏洞点。
thinkphp历史漏洞集合:https://github.com/Mochazz/ThinkPHP-Vuln
<4>查看框架历次更新说明,寻找可能的漏洞点。重点看每次版本迭代都修改了哪些代码,找到对应漏洞点。很多漏洞可能网上并没有发布,通过这种方法可以分析出来。