web

0x01 滴

2019 DDCTF 部分题目Writeup-Alkaid

进来以后看到了这个,从url就感觉像是任意文件读取,就是把要读取的文件名进行一次转16进制再两次base64得到,可以读下页面源码:

利用上面的出题人的blog提示,访问 https://blog.csdn.net/fengbanliuyun/article/details/80913909 可以找到swp文件的提示(我惊了),之后还可以看到评论里大家对出题人的亲切问候。。。。2019 DDCTF 部分题目Writeup-Alkaid

2019 DDCTF 部分题目Writeup-Alkaid

访问practice.txt.swp文件,有一个f1ag!ddctf.php,直接如法炮制读源码,由于上面源码中,会把config替换为!,所以利用这个规则去绕过感叹号过滤,读到了base64过的f1ag!ddctf.php源代码

2019 DDCTF 部分题目Writeup-Alkaid

2019 DDCTF 部分题目Writeup-Alkaid

这是一个简单的变量覆盖漏洞,直接构造?k=&uid=

也就是利用新传入的值为空的k替换原有的k的值。构造空等于空,即可得到flag。

 

0x02 web签到题

可以得到Auth.php是可以访问的,但是提示没有权限,可以通过burp抓包修改用户名didictf_username为admin,通过这种方式修改权限,得到源码之后进行审计:

这里一看到sprintf,就想起之前做的格式化字符串漏洞,利用格式化字符进行关键信息泄露,设置nickname为%s,那么key的值就会打印出来,知道key的值以后,剩下的事情就是反序列化的payload构造了。

 

0x03 upload

一开始抓包改包无用,思路转为去搜文章,搜到了一篇php上传的,讲到了php-gd绕过的知识点利用文章思路拿图片试了下,发现应该就是这个了

https://wiki.ioin.in/soft/detail/1q

2019 DDCTF 部分题目Writeup-Alkaid

2019 DDCTF 部分题目Writeup-Alkaid

有一个写好的脚本,只不过命令是写入shell的,这里需要将脚本改成写入phpinfo(),经过尝试发现得这样写,才能保证可以写入完整的phpinfo()

2019 DDCTF 部分题目Writeup-Alkaid

保存下的上传后返回的图片:

2019 DDCTF 部分题目Writeup-Alkaid

之后刚才修改好的shell生成器:

php jpg_payload.php 4.jpg

2019 DDCTF 部分题目Writeup-Alkaid

上传图片

2019 DDCTF 部分题目Writeup-Alkaid

0x04 大吉大利 晚上吃鸡

这题上来没搞懂,后来在抓包改包的时候才明白,第一个考点是整形溢出:

2019 DDCTF 部分题目Writeup-Alkaid

首先利用burp抓包,将金额改为整数溢出值,试了下发现正好2的32次方就可以0元买票,payload为/ctf/api/buy_ticket?ticket_price=4294967296,之后的思路就是,写脚本不断注册新用户买票,再把id和ticket传给主号,让主号去除机器人,脚本如下:

Reverse

0x01 Windows Reverse1

用手脱壳是不可能的,脱完还得重建导入表,直接上工具:

2019 DDCTF 部分题目Writeup-Alkaid

将脱完壳的程序放入IDA,看下系统主要逻辑:

2019 DDCTF 部分题目Writeup-Alkaid

大概就是把输入的字符串放入sub_401000中进行加密,把加密后的数据和DDCTF那一串进行比较,相同就行,那就跟进去sub_401000看下是什么操作:

2019 DDCTF 部分题目Writeup-Alkaid

看了下byte_402ff8这个数组,里面是空的,估计是有地方进行写入,但是没找到,不过可以直接上OD动调一下:

2019 DDCTF 部分题目Writeup-Alkaid

上面就是byte数组里的值,其实这道题就是一个替换加密,这个就是替换表,程序把输入的值作为偏移量进行取值,比如Z对应的就是D,所以直接上脚本:

2019 DDCTF 部分题目Writeup-Alkaid

0x02 Windows Reverse2

先查壳,发现是asp的壳,还是直接上脱壳机,脱完之后IDA静态分析一波:

2019 DDCTF 部分题目Writeup-Alkaid

发现进入关键函数sub_D41240以后,

2019 DDCTF 部分题目Writeup-Alkaid

做完以后发现,修改后的base64密码表其实是原来的密码表和0x76异或的生成的。。。。

0x03 Confused

借了同学的MAC电脑,终于把这道题做出来了,软件打开是这样的:

2019 DDCTF 部分题目Writeup-Alkaid

进入主要的函数,可以看到很详细的伪代码:

2019 DDCTF 部分题目Writeup-Alkaid

跟进去这个关键的比较函数里,里面是一个生成表的操作:

2019 DDCTF 部分题目Writeup-Alkaid

生成的数据表如下所示:

2019 DDCTF 部分题目Writeup-Alkaid

之后发现F0-F9各对应一个函数,关键函数是F2,在这里会进行flag的比较,如下所示:

2019 DDCTF 部分题目Writeup-Alkaid

如果这个地方的比较不成功的话,直接会跳转到下面的F6,直接把下面的jnz改汇编为jz,就可以不跳转了,这样就可以把flag一步一步对着动调出来

2019 DDCTF 部分题目Writeup-Alkaid

DDCTF{helloYouGotTheFlag}

MISC

0x01 [PWN] strike

保护情况如下所示:

exp如下所示:

0x02 Wireshark

从里面总共可以提取出三张图片:

2019 DDCTF 部分题目Writeup-Alkaid

其中两张图片是一样的,还有一把钥匙图,把图片的长宽修改下就可以看到key值:

2019 DDCTF 部分题目Writeup-Alkaid

结合流量包里访问过的 http://tools.jb51.net/aideddesign/img_add_info ,可以在线解密出两张相同图片中较大的一张里隐写的内容。

2019 DDCTF 部分题目Writeup-Alkaid

最后直接base64即可解出flag