# onethink漏洞【通过】

**URL:** <https://forum.90sec.com/t/topic/464>\
**Category:** 账号审核\
**Created:** [2019 年10 月 4 日 05:53 UTC](https://forum.90sec.com/t/topic/464 "2019-10-04T05:53:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

作者： ![z2681](https://forum.90sec.com/letter_avatar_proxy/v4/letter/z/dfb087/32.png) [@z2681](https://forum.90sec.com/u/z2681)\
发布日期： [2019 年10 月 4 日 05:53 UTC](https://forum.90sec.com/t/topic/464/1 "2019-10-04T05:53:35Z")

</div>

# 1. **搭建好onethink平台**

 ![image](https://forum.90sec.com/uploads/default/original/2X/4/42ea8a85615feb116e31a64a2dfe496324988144.png)

# 2. **通过phpstorm查看下源码**

 ![image](https://forum.90sec.com/uploads/default/original/2X/8/80f2220c364dfe3d21fca427b421c758dbe3d0f3.png)

可以发现使用的是thinkphp3.2，由此可见thinkphp版本相对比较老，所以可以直接审计thinkphp核心代码。

# 3. **函数追踪审计**

直接查看下后台登陆功能，burp抓包如下：

![image](https://forum.90sec.com/uploads/default/original/2X/d/da81a769babcc709bbf60855dd180667bb7ecf89.png)

根据路由s=/admin/public/login.html，可以看到调用了admin目录下的public控制器。

 ![image](https://forum.90sec.com/uploads/default/original/2X/c/cdf3b6486ad607b0fa30fee14b74acded360c797.png)

注释掉验证码，直接burp跟进$uid = $User-\>login($username, $password);

 ![image](https://forum.90sec.com/uploads/default/original/2X/8/8def9604e802cd2c46dfb8c506f7d6db9ccc317d.png)

注意到调用了UcenterMemberModel.class.php中的login方法，看到截图断点，跟进断点where方法。

 ![image](https://forum.90sec.com/uploads/default/original/2X/e/e4810ec091fe2696f13a18fa8ac75e578653f895.png)

查看上面注意到如果$where是数组，将会被直接赋值给$this-\>option[‘where’]。继续跟进find方法。

![image](https://forum.90sec.com/uploads/default/original/2X/8/84d877ed3c05be23179aa75f54c144d0c0884b28.png)

断点处有对$options进行赋值和验证操作，方法如下，这里可以注意到表达式过滤的方法默认为空。

 ![image](https://forum.90sec.com/uploads/default/original/2X/6/6334f42ab1e283f5a96289dfb2ad47ddda9310d5.png)

![image](https://forum.90sec.com/uploads/default/original/2X/2/271be18717ef0892bea94b67200fd4de614af7f2.png)

所以之前的$where的值可以没有过滤的赋值给$options。

 ![image](https://forum.90sec.com/uploads/default/original/2X/4/4a428f30fcd145fbe0089c8cd9aeb606c7046e98.png)

如上继续跟进$this-\>db-\>select($options)方法。

 ![image](https://forum.90sec.com/uploads/default/original/2X/f/f5953afebaf354d04c5930c6d91926e4c7c0de26.png)

跟进buildSelectSql方法，此时的获取到的$sql就是我们最终要执行的sql语句。

具体可以跟进$this-\>query方法如下所示：

 ![image](https://forum.90sec.com/uploads/default/original/2X/b/bfa34848d0e64f0c9bc2bb88dbcdd02011c35ce5.png)

不存在任何过滤。也就是说我们能够成功构造$sql语句就能够最终获取到我们想要的数据。回到buildSelectSql，重点关注蓝圈中的方法。

 ![image](https://forum.90sec.com/uploads/default/original/2X/5/5769e73f9372aeaa0d4769fea13833c35a2f2fc7.png)

继续跟进。

 ![image](https://forum.90sec.com/uploads/default/original/2X/9/964c7667c07b0cbc3da73a66b1941f274ba2dd43.png)

也就是说将$sql中的值进行了替换，换成options数组中对应的数据。重点关注parseWhere函数，这个是我们这次传参可以控制的，跟进。

 ![image](https://forum.90sec.com/uploads/default/original/2X/e/e26d30a6c718cc76fb042b6a2d4c7c13a635f76f.png)

 ![image](https://forum.90sec.com/uploads/default/original/2X/1/17143880bb0a340eaf2eb5559f853855b7213f7f.png)

可以看到会进入到foreach循环，看下foreach中的代码，发现对key进行安全检测，根据传过来的参数可以知道key为username。根据逻辑如果key正常，将会进入parseWhereItem（460行），跟进。

 ![image](https://forum.90sec.com/uploads/default/original/2X/d/de092a75648542a8ed7dbc6d65448711e96682e6.png)

 ![image](https://forum.90sec.com/uploads/default/original/2X/6/657ee04a0dcacb9101e47d32766d08b0b741a63b.png)

如上代码可以看到，其中btween和in的正则处理方式，并不存在^$，所以我们此处可以构造payload来实现注入。

如果想要登录后台，我们可以根据上面的分析构造指定的用户名密码来实现登录。

这里查看下登录代码。

 ![image](https://forum.90sec.com/uploads/default/original/2X/5/589e8d143d6a8cc9b319a2af13d313e68779a115.png)

通过用户名查询获取用户密码，判断密码加密后是否等于数据库获取到的密码，成功则登录成功，不过因为salt是随机生成的，我们无法解密，所以不好注入构造密码。

查看加密算法。

![image](https://forum.90sec.com/uploads/default/original/2X/5/50532dc46a18596e92285043bd3178907ac31007.png)

发现当str为空的时候，返回空。故可以用union select来达到指定password为’’。

1. **payload构造。**

```
username[]=like 1)and 1 in (2) union select 1,2,'',4,5,6,7,8,9,10,11%23&username[]=0&password=&verify=yzm

```

成功绕过登录管理员用户。

 ![image](https://forum.90sec.com/uploads/default/original/2X/3/3d4ebfb4f067bb42308a562a8d61d5814e2ffba7.png)

_Poll ([view on site](https://forum.90sec.com/t/topic/464/1))_

---

<div class="post-metadata">

作者： ![admin05](https://forum.90sec.com/user_avatar/forum.90sec.com/admin05/32/12_2.png) [@admin05](https://forum.90sec.com/u/admin05)\
发布日期： [2019 年10 月 7 日 02:40 UTC](https://forum.90sec.com/t/topic/464/2 "2019-10-07T02:40:18Z")

</div>



---

<div class="post-metadata">

作者： ![admin05](https://forum.90sec.com/user_avatar/forum.90sec.com/admin05/32/12_2.png) [@admin05](https://forum.90sec.com/u/admin05)\
发布日期： [2019 年10 月 7 日 02:50 UTC](https://forum.90sec.com/t/topic/464/3 "2019-10-07T02:50:20Z")

</div>


