seay代码审计工具_代码审计(Code Review)实战教程

前言

yxtcmf6.1是一个基于thinkphp3.2.3的cms,19年3月份发布,用来练习代码审计是个不错的选择。

审计思路

由于这个cms采用MVC架构并且是基于thinkphp3.2.3的,所以先了解文件结构,知道不同的页面对应的文件位置在哪。然后搭建一个tp3.2.3了解一下这个框架,百度找找这个框架的漏洞,再通过Seay全局搜索可能因为这个框架存在漏洞的关键词。接下来上自动审计(自动审计的规则并不是很完全,所以可以通过自己审计的经验添加规则或者上百度找一些规则),对自动审计的结果进行验证,结果可能会有几百上千条,虽然不用每一条都去看,但是也是比较需要耐心的。最后可以拿AWVS之类的扫描器扫一扫,看看能不能扫出惊喜。

准备工具

phpstorm,Seay源码审计系统,phpstudy,AWVS

0x00 了解文件结构和路由方式

15866465589deccb8fae2558d6ac5a0c.png

路由方式

cf46f63685ed554483daf59d00cd0eee.png

例如前台登录界面的url为http://127.0.0.1:8014/index.php/User/Login/index

b0839792fad928d41eb3c74eb8719c7d.png

则对应的文件目录为/application/User/LoginController.class.php,函数为index()

6ddc83fb451e6c9f9aa664c471ea7a78.png

0x01 了解thinkphp3.2.3的漏洞

自己先搭建一个tp3.2.3,通过百度找到了一些thinkphp3.2.3存在的sql注入,然后记录下来简单说明一下

246220bf30185c8cfb14f89d73164381.png

tp3.2.3构造sql语句的函数如上,如果$option的值是可以任意传入的,那么就有可能达到sql注入的目的

1.->where(“可控参数”)->find()

$username = $_GET['username'];$data= M('users')->where(array("username"=>$username))->find();

测试代码如上,传入参数username[0]=exp&username[1]==’admin’ and updatexml(1,concat(0x3a,(user())),1)%23,然后调试跟进,主要代码段如下,$whereStr为构造sql语句的一部分

9fc2e4cba66a67868e2265aab5bb48d7.png

4537e757604efcddeba8a43a272f9a98.png

结果构成如下sql语句

c7deaa2580ce7b71d018f1afd337d14c.png

这里接收传参的方法必须不为I($_GET[‘username’]),否则会检测值内是否含有’exp’,如果有,就会加上空格变为’exp ‘

2.->find/select/delete(“可控参数”)

$id=I("id");$data=M("users")->find($id);

测试代码如上,传入id[where]=1 and updatexml(1,concat(0x7e,user(),0x7e),1) %23 ,然后调试跟踪

3e14b997a5f978d77d434b2b7ae0ff0f.png

最后得到sql语句如下,不需要单引号闭合也可完成注入

9e3064ee615f08cd519ed6ec483f144c.png

find()换成select()或者delete()也是一样的效果

3.->where

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值