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>查看框架历次更新说明,寻找可能的漏洞点。重点看每次版本迭代都修改了哪些代码,找到对应漏洞点。很多漏洞可能网上并没有发布,通过这种方法可以分析出来。

原文地址:https://www.cnblogs.com/zhengna/p/15179395.html