本文章由二农戏猪编辑
从上一篇审计完了入口文件和搞清楚路由规则之后,我们开始正式审计控制器。
从app/home/index.php
开始审计,前面没什么可说的,但是注意这里,虽然它是判断不是PC登陆时候执行,但是我们可以看到它调用的查询方法,感觉很熟悉,比较像think里面定义的查询方法,我们回想起上一篇审计的时候,审计到的过滤机制,我们全局搜索一下where(
,一个一个去查看,看看是否有where条件为两个参数,或者int类型。
功夫不负有心人,我们在此处,发现$sid未被单引号包裹,并且未被强制转换未int类型。目录为admin\controller\special.php,我们尝试复现。好的一处SQL注入漏洞。
正当我以为没有前台SQL注入的时候,突然间,有发现了一个位置。突然间想起一句话:缘,妙不可言。
找一下。看看$sid怎么传进来的,是否可控
全局搜一下这个get_category_list()
,发现在home/controller/special.php
中,category()
这个方法中,通过GET传入的sid这个值,虽然这个方法中对$sid加有单引号保护,但是在调用get_category_list()
时候就是在裸奔,好的,复现一下
完全ok。前台到这里就审计完成了
在home\controller\articles.php
,articles方法这个位置htmlspecialchars_decode
,这个函数将实体化的符号进行解码,突然就引起了我的注意,因为我们在前面审计到,它会将传入的值进行html实体化编码,然后存入数据库。这个位置它将数据又进行解码,菜鸡的直觉告诉我,一定是有问题的,我们找一下$data这个变量是哪里来的
在这个32行我们看到是从这个数据库中查询得来的。
我们找一下是如何写入的,这里因为内容太多,用下debug看一下查询语句:"SELECT * FROM
temmoku_articleAS
AINNER JOIN
temmoku_contentAS
BON A.aid =B.aid WHERE A.aid=3 ORDER BY A.aid DESC LIMIT 1"
在回溯的时候我犯了一个很难受的错误,我去搜索jab.'content
,没有搜索到,怀疑人生ing,但是,我后来想起来,搜索jab."content
才定位到位置,难受。
在这里,admin\public_class\article.php中,发现写入jab.content数据库。继续回溯
发现user\controller\articles.php
出现调用,往上看,add方法。
注册账号并且开启发文章权限。
存储型XSS复现成功