本文介绍: 我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!二、Seay代码审计系统漏洞报告审计结果发现可疑漏洞总数:34个如下所示,是我们index.php页面admin目录下的index.php页面源码:2、单一入口模式第一行注释里面有写”单一入口模式“,这个什么意思呢?简单来说就是****,例如不管是内容列表页,用户登录还是内容详细页,都是通过浏览器访问 index.php 文件来进行处理的,这里这个 index.php 文件就是这个应用程序的单一入口(具体造成

我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!

一、熊海CMS_v1.0网站目录结构

admin             	 --后台文件夹
css                  --css文件夹
files                --存放网站的各种功能页面文件images            	 --存放图片文件inc                  --配置文件文件install              --网站安装文件夹
seacmseditor  		 --网站的编辑器文件夹
template        	 --模板文件夹
upload           	 --上传文件夹,存放网站上传的文件
index.php      		 --网站入口文件

二、Seay代码审计系统漏洞报告

审计结果:发现可疑漏洞总数:34个

ID 漏洞描述 文件路径 漏洞详细
1 文件包含函数存在变量,可能存在文件包含漏洞 /index.php include(‘files/’.$action.‘.php’); //载入相应文件
2 文件包含函数中存在变量,可能存在文件包含漏洞 /admin/index.php include(‘files/’.$action.‘.php’); //载入相应文件
3 SQL语句delete条件变量单引号保护可能存在SQL注入漏洞 /admin/files/adset.php

q

u

e

r

y

=

U

P

D

A

T

E

a

d

w

o

r

d

S

E

T

a

d

1

=

query = “UPDATE adword SET ad1=’

query=UPDATEadwordSETad1=ad1’,

4 SQL语句delete条件变量单引号保护可能存在SQL注入漏洞 /admin/files/editcolumn.php

q

u

e

r

y

=

U

P

D

A

T

E

n

a

v

c

l

a

s

s

S

E

T

n

a

m

e

=

query = “UPDATE navclass SET name=’

query=UPDATEnavclassSETname=name’,

5 SQL语句delete条件变量单引号保护可能存在SQL注入漏洞 /admin/files/editcolumn.php

q

u

e

r

y

=

U

P

D

A

T

E

n

a

v

S

E

T

n

a

m

e

=

query = “UPDATE nav SET name=’

query=UPDATEnavSETname=name’,

6 SQL语句delete中条件变量无单引号保护可能存在SQL注入漏洞 /admin/files/editlink.php

q

u

e

r

y

=

U

P

D

A

T

E

l

i

n

k

S

E

T

n

a

m

e

=

query = “UPDATE link SET name=’

query=UPDATElinkSETname=name’,

7 SQL语句delete中条件变量无单引号保护可能存在SQL注入漏洞 /admin/files/editsoft.php

q

u

e

r

y

=

U

P

D

A

T

E

d

o

w

n

l

o

a

d

S

E

T

t

i

t

l

e

=

query = “UPDATE download SET title=’

query=UPDATEdownloadSETtitle=title’,

8 SQL语句delete中条件变量无单引号保护,可能存在SQL注入漏洞 /admin/files/editwz.php

q

u

e

r

y

=

U

P

D

A

T

E

c

o

n

t

e

n

t

S

E

T

n

a

v

c

l

a

s

s

=

query = “UPDATE content SET navclass=’

query=UPDATEcontentSETnavclass=navclass’,

9 SQL语句delete中条件变量无单引号保护,可能存在SQL注入漏洞 /admin/files/imageset.php

q

u

e

r

y

=

U

P

D

A

T

E

i

m

a

g

e

s

e

t

S

E

T

i

m

g

k

g

=

query = “UPDATE imageset SET img_kg=’

query=UPDATEimagesetSETimgkg=img_kg’,

10 SQL语句delete中条件变量无单引号保护,可能存在SQL注入漏洞 /admin/files/manageinfo.php

q

u

e

r

y

=

U

P

D

A

T

E

m

a

n

a

g

e

S

E

T

u

s

e

r

=

query = “UPDATE manage SET user=’

query=UPDATEmanageSETuser=user’,

11 SQL语句insert插入变量无单引号保护,可能存在SQL注入漏洞 /admin/files/newlink.php

q

u

e

r

y

=

I

N

S

E

R

T

I

N

T

O

l

i

n

k

(

n

a

m

e

,

u

r

l

,

m

a

i

l

,

j

i

e

s

h

a

o

,

x

s

,

d

a

t

e

)

V

A

L

U

E

S

(

query = “INSERT INTO link (name,url,mail,jieshao,xs,date) VALUES (‘

query=INSERTINTOlink(name,url,mail,jieshao,xs,date)VALUES(name’,‘

u

r

l

,

url‘,’

url,mail’,‘jieshao’,‘xs’,now())”;

12 SQL语句delete中条件变量无单引号保护,可能存在SQL注入漏洞 /admin/files/reply.php

q

u

e

r

y

=

U

P

D

A

T

E

i

n

t

e

r

a

c

t

i

o

n

S

E

T

x

s

=

query = “UPDATE interaction SET xs=’

query=UPDATEinteractionSETxs=xs’,

13 SQL语句delete中条件变量无单引号保护,可能存在SQL注入漏洞 /admin/files/seniorset.php

q

u

e

r

y

=

U

P

D

A

T

E

s

e

n

i

o

r

s

e

t

S

E

T

l

y

s

h

=

query = “UPDATE seniorset SET lysh=’

query=UPDATEseniorsetSETlysh=lysh’,

14 SQL语句delete中条件变量无单引号保护,可能存在SQL注入漏洞 /admin/files/siteset.php

q

u

e

r

y

=

U

P

D

A

T

E

s

e

t

t

i

n

g

s

S

E

T

n

a

m

e

=

query = “UPDATE settings SET name=’

query=UPDATEsettingsSETname=name’,

15 SQL语句delete中条件变量无单引号保护,可能存在SQL注入漏洞 /files/content.php

q

u

e

r

y

=

U

P

D

A

T

E

c

o

n

t

e

n

t

S

E

T

h

i

t

=

h

i

t

+

1

W

H

E

R

E

i

d

=

query = “UPDATE content SET hit = hit+1 WHERE id=

query=UPDATEcontentSEThit=hit+1WHEREid=id“;

16 读取文件函数中存在变量,可能存在任意文件读取漏洞 /files/downloads.php print (fread($fp, 1024 * 8)); //输出文件
17 读取文件函数中存在变量,可能存在任意文件读取漏洞 /files/downloads.php

f

p

=

f

o

p

e

n

(

fp = fopen(”

fp=fopen(sourceFile”, “rb”);

18 SQL语句delete中条件变量无单引号保护,可能存在SQL注入漏洞 /files/downloads.php

q

u

e

r

y

=

U

P

D

A

T

E

d

o

w

n

l

o

a

d

S

E

T

x

i

a

z

a

i

=

x

i

a

z

a

i

+

1

W

h

E

R

E

i

d

=

query = “UPDATE download SET xiazai = xiazai+1 WhERE id=’

query=UPDATEdownloadSETxiazai=xiazai+1WhEREid=fileid’”;

19 SQL语句delete中条件变量无单引号保护,可能存在SQL注入漏洞 /files/software.php

q

u

e

r

y

=

U

P

D

A

T

E

d

o

w

n

l

o

a

d

S

E

T

h

i

t

=

h

i

t

+

1

W

H

E

R

E

i

d

=

query = “UPDATE download SET hit = hit+1 WHERE id=

query=UPDATEdownloadSEThit=hit+1WHEREid=id”;

20 读取文件函数中存在变量,可能存在任意文件读取漏洞 /inc/db.class.php $line = fgets ( $f );
21 读取文件函数中存在变量,可能存在任意文件读取漏洞 /inc/db.class.php $f = fopen ( $sqlfile, “rb” );
22 读取文件函数中存在变量,可能存在任意文件读取漏洞 /inc/db.class.php if (! @$fp = fopen ( $dir . $filename, “w+” )) {
23 文件操作数中存在变量,可能存在任意文件读取/删除/修改/写入等漏洞 /inc/db.class.php if (! @fwrite ( $fp, $sql )) {
24 SQL语句insert插入变量无单引号保护,可能存在SQL注入漏洞 /inc/db.class.php $insert .= “INSERT INTO " . $table . " VALUES(”;
25 读取文件函数中存在变量,可能存在任意文件读取漏洞 /inc/mail.class.php if (!@file_exists(

t

h

i

s

>

l

o

g

f

i

l

e

)

!

(

this->log_file) || !(

this>logfile)!(fp = @fopen($this->log_file, “a”))) {

26 读取文件函数中存在变量,可能存在任意文件读取漏洞 /inc/mail.class.php fgets($this->sock, 512);
27 读取文件函数中存在变量,可能存在任意文件读取漏洞 /inc/mail.class.php KaTeX parse error: Can’t use function ‘r’ in math mode at position 25: …= str_replace(“̲r̲n”, “”, fgets(this->sock, 512));
28 存在文件上传,注意上传类型是否可控 /inc/up.class.php if ( move_uploaded_file( $this -> uploadFile[ ‘tmp_name’ ] , realpath( $this -> accessPath ) . “/” . $newFileName ) )
29 文件操作数中存在变量,可能存在任意文件读取/删除/修改/写入等漏洞 /install/index.php fwrite(

o

f

,

of,

of,content);

30 SQL语句delete中条件变量无单引号保护,可能存在SQL注入漏洞 /install/index.php

q

u

e

r

y

=

U

P

D

A

T

E

m

a

n

a

g

e

S

E

T

u

s

e

r

=

query = “UPDATE manage SET user=’

query=UPDATEmanageSETuser=user’,password=‘

p

a

s

s

w

o

r

d

,

n

a

m

e

=

password‘,name=’

password,name=user’”;

31 echo等输出中存在可控变量,可能存在XSS漏洞 /seacmseditor/php/controller.php echo htmlspecialchars($_GET[“callback”]) . ‘(’ . $result . ‘)’;
32 读取文件函数中存在变量,可能存在任意文件读取漏洞 /seacmseditor/php/Uploader.class.php readfile($imgUrl, false, $context);
33 文件操作函数中存在变量,可能存在任意文件读取/删除/修改/写入等漏洞 /seacmseditor/php/Uploader.class.php if (!(file_put_contents($this->filePath, KaTeX parse error: Expected ‘EOF’, got ‘&’ at position 6: img) &̲& file_exists(this->filePath))) { //移动失败
34 存在文件上传,注意上传类型是否可控 /seacmseditor/php/Uploader.class.php if (!(move_uploaded_file($file[“tmp_name”], KaTeX parse error: Expected ‘EOF’, got ‘&’ at position 17: …his->filePath) &̲& file_exists(this->filePath))) { //移动失败

三、漏洞1&2分析

ID 漏洞描述 文件路径 漏洞详细
1 文件包含函数中存在变量,可能存在文件包含漏洞 /index.php include(‘files/’.$action.‘.php’); //载入相应文件
2 文件包含函数中存在变量,可能存在文件包含漏洞 /admin/index.php include(‘files/’.$action.‘.php’); //载入相应文件

1、/index.php&/admin/index.php

如下所示,是我们的index.php页面和admin目录下的index.php页面源码:

<?php
//单一入口模式
error_reporting(0); //关闭错误显示
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file; //判断为空或者等于index
include('files/'.$action.'.php'); //载入相应文件
?>

2、单一入口模式

第一行注释里面有写”单一入口模式“,这个是什么意思呢?简单来说就是**一个文件处理所有的HTTP请求**,例如不管是内容列表页,用户登录还是内容详细页,都是通过浏览器访问 index.php 文件来进行处理的,这里这个 index.php 文件就是这个应用程序的单一入口(具体造成的影响我们后面使用文件时会再次提到来进行理解)。

3、error_reporting(0)

error_reporting(0); 表示关闭所有PHP错误报告。

4、string addslashes ( string $str )

本函数可在PHP4和PHP5下使用

本函数返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)。

默认情况下,PHP 指令 magic_quotes_gpcon,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测

5、三元运算符拼接字符串

通过三元运算符判断文件名是否为空为空则载入files/index.php文件,反之赋值就会把传递进来的文件名赋值给a c t i o n , ” . “ 在 P H P 里 是 拼 接 的 作 用 , 因 此 就 是 把 第 四 行 传 递 的 变 量 action,“.“在PHP里是拼接作用,因此就是把第四行传递的变量action,”.“在PHP里是拼接作用,因此就是把第四行传递的变量file(到这里是a c t i o n , 因 为 上 一 行 action,因为上一行action,因为上一行file赋值给了$action)也就是传递文件名字,拼接前面目录”files/”以及后面的”.php”这个后缀,最终载入拼接后的相应文件。

6、那么这里漏洞利用其实两个问题

1.跳出限定的files/目录。【使用…/】

2.截断拼接的.php后缀。【结合Windows文件名字的特性及Windows文件名路径最大长度限制进行截断】

7、特性+全路径最大长度限制截断的姿势:

Windows文件名特性

Windows下在文件名字后面加 “.” 和“/”不影响文件名。

Windows的文件名的全路径(Fully Qualified File Name)的最大长度为256字节

python打印256个点:

>>> print('.'*256);
................................................................................................................................................................................................................................................................

python打印128个./:

>>> print('./'*128);
././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

使用条件:

1.php版本=5.2.17
2.Virtual Directory Support=enable(默认开启)

但是5.2.67是默认关闭的!!!
如何开启呢?并没有给出明确的说明!!

点击跳转到Virtual Directory Suuport在stackoverflow上的说明

payload1:

http://www.xhcms.com/?r=../test.txt................................................................................................................................................................................................................................................................

payload2:

http://www.xhcms.com/?r=../test.txt/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

8、00截断拼接后缀原理:[在服务器端解析时]

00截断的条件:

1、php版本小于5.3.4		    //在PHP5.3之后的版本全面修复了文件名%00截断的问题
2、magic_quotes_gpc =off	   //gpc打开时候,就相当于使用了addslashes()函数
3、未使用addslashes()函数	    //使用了addslashes()函数,就相当于打开了gpc

浏览器传入%00,后台自动解码为,若遇到addslashes()函数,则会被自动转义为\。

00截断的原理:由于php借用了C语言字符串处理函数,%00在URL解码后为,是C语言字符串结束,遇到不能再读取后面的字符串

	PHP是一种跨平台服务器端嵌入式脚本语言,它大量地借用C,Java和Perl语言语法,并耦合PHP自己特性,这个%00便是使用了C语言中的字符串处理函数,在连接字符串的时候,0字节()将作为字符串结束符,%00在URL解码后为,是C语言中字符串结束符,遇到不能再读取后面的字符串。因此以它来进行截断。

	在C语言里面,字符时用,指针是用NULL,0x00很少见,一般直接用0代替;这三个本身是一个东西。
	
	%00就是一个返回符号,类似于C中的"/0"和对象语言中的NULL,也是WINDOWS 中的空格

URL编码解释

	url编码就是一个字符ascii码的十六进制。不过稍微有些变动需要前面加上“%”。比如“”,它的ascii码是92,92的十六进制是5c,所以“”的url编码就是%5c。
又比如:NULL字符的十进制为0,0的十六进制也为0,因此再加上%,NULL字符的URL编码成为了%00。
	
	在C语言中,NULL和0的值都是一样的,但是为了目的和用途及容易识别原因,NULL用于指针对象,0用于数值。对于字符串的结尾,使用'',它的值也是0,但是让人一看就知道这是字符串的结尾,不是指针,也不是普通的数值。
	
	因此%00是NULL字符的url编码,在C语言中NULL也是0的意思,也是字符串结束符的意思。

ASCII码表:

在这里插入图片描述
在这里插入图片描述

9、?和#截断拼接后缀原理:[在浏览器请求时]

?和#截断的本质是:

	因为?和#后面的内容都不进行解析的条件是:这只能算是url的一个特性,只能在发起请求的一端来截断,和服务端解析没什么关系。因此不会成功解析

?截断原理:问号后面的所有代码解释成URL的querystring请求字符串,也是一种“截断”。

#截断原理:在第一个#后面出现的任何字符,都会被浏览器解读为位置标识符。这意味着,这些字符都不会被发送服务器端,也是一种“截断”。

#代表网页中的一个位置。其右面的字符,就是该位置标识符比如http://www.example.com/index.html#print,其中#print代表网页index.htmlprint位置浏览器读取这个URL后,会自动将print位置滚动至可视区域
网页位置指定标识符,有两个方法。一是使用锚点比如<a name="print"></a>;二是使用id属性比如<div id="print">。

10、总结三种截断的含义

%00(是字符NULL,也是C中的'/0',或者是windows空格)		字符串结束符			  (服务器处理)			
?							  						请求字符串标识符	     (浏览器处理)
#							   						跳转位置标识符			  (浏览器处理)

11、Apache日志文件包含

(1)通过apache配置文件,找到日志存放地址find / -name "httpd.conf"

Ubuntu, Debian,Mint日志默认存放位置

/var/log/apache2/access.log

/var/log/apache2/access.log

CentOS, Fedora, RedHat的日志默认存放位置:

/var/log/httpd/access.log

/var/log/httpd/access.log

phpstudy日志默认存放位置:新安装phpstudy默认apache访问日志没有开启的,默认开启的只有一个错误日志

c:phpstudyphptutorialapachelogsaccess.log
c:phpstudyphptutorialnginxlogsaccess.log 
(2)日志文件位置如何设置

错误日志的位置可以通过ErrorLog指令设置ErrorLog "logs/error.log"

正确日志的位置可以通过CustomLog指令设置:CustomLog "logs/access.log" common

在这里插入图片描述

(3)日志文件的字段分析

这里我们要知道的是,apachenignxaccess.log访问日志对http请求记录机制。无论访问资源存在与否,它每次都会一行记录一次http请
求。

正确日志:7个字段,从左到右依次是【访问者IP、访问标识访问账号信息时间时区请求资源(GET请求时,记录的是请求行)、状态码、字节数】

access.log    216.35.116.91 - - [19/Aug/2000:14:47:37 -0400] "GET / HTTP/1.0" 200 654

错误日志:4个字段,从左到右依次是【访问时间、错误级别、访问者IP、请求资源

[Fri Aug 18 22:36:26 2000] [error] [client 192.168.1.6]  File does not exist:/usr/local/apache/bugletdocs/Img/south-korea.gif
(4)access.log如何记录GET请求的资源

access.log日志在记录的GET请求内容的时候,它是在浏览器页面渲染(编码)后才发送给服务器端的,之后再被记录到日志里面。所以此时若遇到空格、
括号等等字符,它会先被url编码后,再被记录到日志里面。

​ 若<>等等字符被URL编码,则文件包含后,该代码不能被php成功的解析,所以我们要使用Burpsuite拦截浏览器的渲染后的请求,我们对GET
请求进行URL解码后,再放通。

(5)文件包含三步走:
1.使用哪个文件包含函数?(主语是后台)
2.以什么形式获取待包含的文件?(主语是后台)
2.对变量是否可控?(主语是前台)(假如动态变量引入的形式获取待包含文件)
(6)access.log日志文件包含

当前网站首页位置:L:PHPphpStudyPHPTutorialWWWcmswww.xhcms.comindex.php

access.log日志文件位置:L:PHPphpStudyPHPTutorialApachelogs

又由于要跳出限定目录’file/’,因此需要使用…/4次目录穿越。

payload1:

http://www.xhcms.com/?r=../../../../apache/logs/access.log................................................................................................................................................................................................................................................................

payload2:

http://www.xhcms.com/?r=../../../../apache/logs/access.log././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

原文地址:https://blog.csdn.net/qq_45555226/article/details/125755289

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_30194.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注