暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

kkcms 1.371 代码审计-实战篇

pen4uin 2021-03-28
613

免责声明:

             “ 本公众号所有文章, 仅用于交流学习,禁止应用到不当途径,因滥用而产生的风险皆与本人无关!



目录:

  • 3处反射型xss (黑盒)

  • 3处存储型xss (黑盒)

  • 4处前台sql注入 (黑盒+白盒)

  • n处后台sql注入 (黑盒)


反射型XSS

发现参数m/cat/page, 开始挨个测试

    ?m=<script>alert(2021)</script>?cat=all&page=1
    复制

    没弹窗? 发现插入的payload变成了这样:

    这不就是妥妥的一枚xss嘛?

    先闭合标签a

      ?m=><script>alert(2021)</script>?cat=all&page=1
      复制

      再闭合"

        ?m="><script>alert(2021)</script>?cat=all&page=1
        复制

        小窗窗终于弹起来了:

        同样的payload,扔给第2个参数

          ?m=/dianying/list.php?cat="><script>alert(2021)</script>&page=1
          复制

          又一枚xss到手,果然挖洞得"敢想敢做"🤡

          。。。又一枚

            ?m=/dianying/list.php?rank="><script>alert(2021)</script>&page=1
            复制

            看完反射型xss(估计还有一堆),来看看存储型,一般漏洞触发的场景主要有以下两种:

            不需要注册账号

              客服,留言,友链,评论,提问等地方
              复制

              需要注册账号

                填资料的位置,比如家庭住址,邮箱,订单收货地址等
                复制

                所以黑盒测试的思路就是把大致的功能点和交互点过一遍,然后根据经验(漏洞复现/师傅们的博客/公开的漏洞报告等),挨个测就完事儿!

                注册账号

                登录

                凭感觉,先用上面的payload试试

                  "><script>alert(2021)</script>
                  复制

                  然而并没有弹窗,看看插入后的样子

                  嗯?目测存储型xss一枚, 重新构造payload

                    "><script>alert(2021)</script><
                    复制

                    闭合后面的尖括号

                    果然,第1枚存储型xss到手;继续,在底部发现一处申请友链的地方:


                    直接复用之前邮箱处的payload,毕竟讲究代码的复用性,我相信漏洞也是可以复用的

                      "><script>alert(2021)</script><
                      复制

                      开启上帝模式,去后台看看

                      这,,,果真就漏洞复用呗,第2枚存储型xss到手。继续,找到一处能留言的地方,但是验证码却一直刷不出来

                      上帝模式,直接把验证码的功能干掉,并不影响漏洞成因

                      先试试改动的代码生效没

                      提示"昵称不合法",证明已经通过了验证码的校验,可以继续弹窗了,继续复用上面的payload

                        捡漏"><script>alert(2021)</script><
                        复制

                        提交

                        点击"确定",??? 又一击命中 ?

                        这,第3枚存储型xss应该也稳了

                        去后台看看,最终在"求片留言"处成功触发

                        第3枚存储型xss到手。


                        SQL注入

                        回到首页,把前台功能点都点一遍,burp抓包,记录一下流量,然后慢慢看。

                        首先根据流量定位到注册用户处

                          账号:admin
                          复制

                          这意味着用户名和数据库很有可能是有交互的,也就很有可能产生注入点

                            sqlmap -r reg.txt
                            复制

                            注入1到手,看看payload

                              # 布尔盲注
                              name=admin' AND 9694=9694 AND 'mlpt'='mlpt&email=admin@admin.com&password=123456&submit=
                              # 时间盲注
                              name=admin' AND (SELECT 6574 FROM (SELECT(SLEEP(5)))QSrv) AND 'rFga'='rFga&email=admin@admin.com&password=123456&submit=
                              复制

                              burp验证-正常回显:

                              burp验证-延迟回显:

                              漏洞成因-/ucenter/reg.php:

                              跟进/system/inc.php

                              继续,,,在library.php中发现了这样一段处理代码

                              对$_POST使用addslashes_deep()函数进行处理,addslashes_deep定义如下

                              addslashes(): 添加反斜杠对单引号进行转义;

                              即addslashes_deep()的作用是对单引号的全局过滤。

                              理论上来说UTF-8编码+单引号全局过滤在这里是可以避免SQL注入的,但是作者来了一波"负负得正":


                              相当于,$_POST[name]经addslashes_deep()处理后转义了单引号,然后stripslashes()函数又把addslashes()添加的反斜杠给去掉,这不就是没有任何过滤嘛?

                              根据"漏洞复用准则"🧐,直接全局搜索stripslashes()

                              见ucenter/active.php:

                              第2枚注入到手

                                # 查看当前数据库
                                1' UNION ALL SELECT CONCAT(0x01,IFNULL(CAST(DATABASE() AS NCHAR),0x20),0x01)-- -
                                复制

                                继续全局搜索,见ucenter/repass.php,第3枚注入get

                                第4枚注入:

                                注入点cid,对应文件:/template/wapian/vlist.php

                                参数cid没有经过任何处理便拼接在sql语句

                                延迟验证

                                  cid=12) AND (SELECT 6127 FROM (SELECT(SLEEP(5)))xdxa) AND (8504=8504
                                  复制

                                  后台也有多处sql注入点

                                    /admin/cms_youlian.php
                                    /admin/cms_link.php
                                    /admin/cms_slideshow_edit.php
                                    /admin/cms_admin_edit.php
                                    /admin/cms_user_edit.php
                                    ...
                                    复制

                                    这里仅以为/admin/cms_user_edit.php例

                                    回显正常:and 1=1

                                    回显异常:and 1=2

                                    sqlmap验证

                                    分析漏洞成因,跟进/admin/cms_user_edit.php,定位关键代码

                                    文件入口先包含了3个文件,主要是对管理员登录状态的校验以及一次单引号全局过滤,然后就直接拼接sql语句


                                    虽然addslashes()可以防御这里的字符型注入,但是数字型呢?

                                    延迟验证:

                                    存储型xss分析-以email处为例,定位相关文件

                                    跟进/ucenter/userinfo.php,

                                    简单地匹配了用户名密码,便把数据插入到数据库中

                                    然后从数据库中取出数据未经过任何处理便输出




                                    本来还想个cnvd证书,结果


                                    加上该cms公网案例比较少,漏洞成因也很简单,所以还是公开给大家学习吧,毕竟对像我这样的新手还是蛮友好的。


                                      公众号留言: kkcms,获取文中源码
                                      复制


                                      文章转载自pen4uin,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                      评论