初探php原生类的利用
同样是因为在校赛遇到了有关php反序列化原生类的文章,所以我写下了这篇文章。php原生类分为多种,如下。
利用Error类和Exception类来实现xss漏洞。Error类是在php7下存在的一个内置类,是所有PHP内部错误类的基类,那这和XSS和什么关系呢?那是因为这个类中有一个内置方法,叫做__toString()的魔术方法,我们都知道当把对象当成字符串的时候它就会自动调用这个方法,而它会将Error以字符串的形式表达出来;那么假如有一个echo将它输出出来,而输出内容是我们是我们可以控制的,那我们就可以用<script>标签来执行js代码了
示例
我们可以看到其程序运行结果出现了xss漏洞。这是因为其__toString方法直接将Error中的字符串输出到了浏览器中导致的。注意经过反序列化之后的在被输出时也会输出其定义的字符串。
遍历文件目录类我们可以使用一下几种原生类对文件进行遍历123DirectoryIterator FilesystemIterator GlobIterator 上面三种原生类的功能相差不多都可以对目录进行遍历,当toString被触发时 ...
php反序列化之字符串逃逸
web的信息收集内容太多了学的我头疼,所以我想写一下这个php反序列化的字符串逃逸。字符增多的逃逸字符串逃逸的成因是waf将一些敏感字符进行了一些替换导致了字符串的字符数量的增多减少。如下面的代码12345function black_list($str){$str=preg_replace('/flag/i','hacker',$str);return $str;}可以看到上面的代码回将flag改为hacker那么这个字符数量就多了两个,那么我们思考一些,如果waf对我们传入的pop链进行字符替换那么会发生什么呢?比如我们反序列的pop链为O:1:"E":1:{s:1:"a";s:4:"flag";}那么这个再经过black_list的处理后就会变为O:1:"E":1:{s:1:"a";s:4:"hacker";}那么这是时候我们是无法进行反序列的,因为s的数量小于字 ...
初探python原型链污染
在校赛里我遇到了有关python原型链污染的题目,虽然做了出来但是我个人认为我对这个的了解还是不够的,所以我会写下这篇文章来记录我学习python原型链污染的全部过程python原型链污染的成因python其实是没有原型这一说法的,只有子类继承父类。但是其继承关系和js的原型比较相似,这也就导致了python也存在与js相似的漏洞(python原型链污染)python原型链污染的主要成因也与js相似都是因为merge这个合并函数错误的将base等当成了键值导致其父类被添加了属性,或者被修改了属性的值而导致的污染。下面是一个python的合并函数123456789101112def merge(src, dst): # Recursive merge function for k, v in src.items(): if hasattr(dst, '__getitem__'):#判断dst中是否含有魔术方法__getitem__ if dst.get(k) and type(v) == dict:#判断dst[k]是否 ...
校赛wp
基本信息队伍名:啦啦啦啦
队伍成员:
LSE(2023级)
HBQ(2023级)
ZWK(2023级)
WEBSign_in解题:LSEF12打开源码搜索100000会发现base64编码直接解码就是flag或者直接使用控制台来调用js函数
PermissionDenied解题人:LSE这题一打开就是文件上传,我们直接自己写一个html的文件上传文件123456789101112131415<html><head><meta charset="utf-8"><title>文件上传</title></head><body><form action="http://node5.anna.nssctf.cn:28191/" method="post" enctype="multipart/form-data"> <label for="file">文件名:</label> ...
hgameweek3
说起来很可耻这周的hgame我没有打,这篇博客只能算我的赛后复现,过个年把人给过的太颓废了。webvpn说实话这道题目不算太难,虽然我是看了wp先入为主说的话。首先这道题目需要使用js反序列化,在看wp的时候我都已经把之前学js原型链污染的内容忘了一大半了。初探js原型链污染题目给了源码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415 ...
hgameweek2
search4member又是一道java题,果然现在的web全是java这道题目我们需要先审计源码,一开始我看的了下面的这段代码发现了sql注入,于是我狠狠的注入了进去,结果发现表都是null,只注出来了数据库H2,于是我就在网上查了一下。发现H2数据库的漏洞还不少,最典型的就是存在sql注入时可以将sql注入升级成RCE。原因是H2数据库允许用户定义函数名,可以执行java代码,那么我们只要能够RCE的代码别名后再使用CALL调用即可进行RCE1234CREATE ALIAS EXEC AS $$ void e(String cmd) throws java.io.IOException {java.lang.Runtime rt= java.lang.Runtime.getRuntime();rt.exec(cmd);}$$CALL EXEC('whoami');即如果再对H2数据库使用以上语句就会执行whoami。但是再执行时发现如果存在{网页会崩。由于CREATE ALIAS指令可以使用字符串(String)作为源代码(也就是 ...
php命令执行
我发现我经常会忘记php命令执行的绕过的方式所以我想这在这里写这篇关于php命令执行的总结以及题目的总结命令执行的常见函数1234561.system()//有回显2.exec()//无回显,返回值为数组,需要使用print_r()输出3.passthru()//有回显,与system差不多4.shell_exec()//无回显,返回值为字符串,使用echo或print()5.popen()//返回的是一个文件类型可以使用echo fread(popen('ls','r'),1000);执行。6.``无回显需要使用echo输出
常见的读取命令1234567891011121314ls //目录读取find//目录读取dir //目录读取cat //文件读取(正向读取)tac //文件读取(反向读取)more//文件读取(东西多的时候一页一页读取)less//和more相似tail//读取文件的最后几行nl //显示时顺便输出行号od //以二进形式读取文档 可以直接使用也可以system('od -A d -c fla\g.php& ...
hgame-week1
第一周我就有点开摆了,只吧web,逆向,和杂项给ak了(其他都懒得写了),密码只写了个rsa算法的题目,对rsa算法有了一些了解。下周要打起精神了,不能摆下去了。web1.2048*16这道题目我们打开一个发现是一个2048的游戏,题目要求我们组合出32768这一个方块。我们查看源码会发现,该题目对源码进行了混淆,非常难看。我们先进行常规搜索。如搜索alert,flag,32768都没有用但是这道题目在下方给出了,2048这个游戏的原地址,那么这个游戏肯定是将2048进行了一些魔改。我们点开2048一些的原址,f12查看源码搜索2048我们会发现一个变量e.value,我们虽然不知道这个e变量是什么但是我们可以进行调试,我们先在这一含加一个断点,运行我们可以发现这个e里含有value,x和y,而且value值为2那么我们可以猜测一下,这个就是方块这个元素,xy代表位置和value代表值,我们尝试在控制台修改e.value的值,取消断点,运行程序发现多了个2048的方块。那么我们只要在我们的题目里找到e.value然后进行修改即可。我们点开题目的控制台会发现其无线debug导致我们无法调 ...
初探JavaScript原型链污染
写这篇文章的原因是我在放寒假经过了长久的摆烂后痛定思痛不能再这么下去了,因为明天就是hgame了所有我想着刷点hgame的内容,结果找不到复现平台,只在NSS上找到一些,这篇文章是我在写week4的Shared Diary Antel0p3时遇到了原型链污染,一点都不会所以我就打算学习一下JavaScript的原型链污染。原型链污染的前置知识js的对象对象创建的几种方式1.通过字面量模式创建1var a={a:"aa",b="cc"}
2.通过类来进行创建12345678calss a{ constructor(name,age) { this.name=name; this.age=age; }}var b=new a(lss,18);
通过类来创建对象,constructor()是自带的函数。
3.通过构造函数来进行创建对象12345function Add(){ this.a="a"; this ...