四川省信息安全技术大赛 AWD部分WriteUp

写在前面

有一年多没打过awd了,这次awd的题目正好遇到了会的,一道PHP一道python还有一个java,队伍里面正好有个java佬,直接起飞。

初始分七万,15分钟一轮,一个flag一百分,最后打了22w多分,我们14w分的时候第二名才11w,具体最后差我们多少不太清楚。

题外话:敢欺负我师弟?无所谓,我会出手。(

我主要做的php和python题,所以就说下这两道题怎么做的

PHP

由于前30分钟是加固时间,所以可以不慌不忙的把php修好。

php这道题拿到手SSH上去之后首先做的就是对网站进行整站备份,为了加快scp/sftp传输速度,直接tar压缩整站。

源代码搞下来之后用D盾、河马进行webshell查杀,使用seay进行自动代码审计,一共找到了两三个读flag点,一个文件上传点

在复原的时候还是尽量按照AWD赛时的思路去还原,争取还原选手赛时最真实的思路。

备份下源代码之后我们尝试开启waf的流量记录功能或者weblogger,但是我们自己魔改后的waf开不起来,并且担心主办方check原版waf的路径,所以最后没有开waf。

weblogger部署之后站点无法正常访问,遂放弃,本次AWD PHP题所有的漏洞点均为人工审计得出。

接下来先随意看一下目录有没有隐藏文件或者敏感文件,在根目录发现db.sql,直接删掉

image-20221114211911607

接下来根据经验去查看uploads目录是否有可疑文件

image-20221114211950195

在检查完之后还需要做的就是连接数据库进行备份,这里我疏忽了忘记了备份,不过问题不大,应该是没有人能成功打进来我们的靶机进行提权或者破坏,不过无法确定,因为这次的平台没有给每道题的状态,如靶机是否down,每轮是否被check等,呵呵。

进入数据库之后要做的就是修改网站后台密码,这也是常识了,一般来说网站后台密码是弱口令,试了下123456还是admin来着就进去了。

这里改密码出了点问题,我以为密码是MD5之后的值 但是我md5之后的结果和网站存储的结果不太一样,所以后面我改掉之后自己的网站也没有再上去了,只要保证别人登不进去后台就可以,我自己需要的话可以在改回去默认的密码。

网站后台改完基本上数据库也OK了,接下来进行代码审计

命令执行与任意SQL执行

manage_comment_del.php

image-20221114212500151

这个点有命令执行,但是我无法执行命令,因为当时加固阶段网站被waf搞down了,所以我直接修了

image-20221114212544836

image-20221114212641835

这里的修复方式同理,不再赘述。

Manage_rce.php

image-20221114212809933

image-20221114213001674

修复方式也很简单 直接把对应的代码删掉

manage_sql.php

这题给👴🏻整乐了,看到SQL注入都不load_file是吧,说句题外话,在打网站后台漏洞的时候我根本没打过rce,直接打SQL语句这个点,过了很久了大部分人还没修,乐。

image-20221114213126545

把TRUE改成FALSE就可以修复了。

任意文件上传

user_upload.php

image-20221114213328286

没啥过滤,修复方法如下

image-20221114213441556

PHP题基本就到这里了,后面或许出了新洞,没有再审计了,一直在干flask内存马。

Python

python这题给了一个blog系统,是flask写的,那么我首先想到的就是模板注入。

代码看了半天也没啥收获,其实这里我的思路有点问题,我忘记直接去搜render_template_string了。直接搜的话可以在加固阶段直接定位到漏洞点。在加固阶段这题也没看出来啥,代码太多了,上去网站功能也很多,前两个小时就没怎么管这道题。

后面我们java和php题都搞完了之后发现有扣分,估计就是python题出问题了,好巧不巧根目录给了web日志

image-20221114213804022

那么就可以充分发挥流量人的特长,看日志。

日志中有大量扫描器等垃圾流量,试了试不太行,最后发现扣分的时候一直有向/auth/reset路由发送请求,遂进入代码查看

image-20221114213936187

看最后的渲染方法是什么,flask人狂喜,已经可以定位漏洞点就在这里了,我首先做的是修复,其次是批量攻击

这题修也非常简单,我直接把花括号过滤了,传了花括号直接返回

image-20221114214124190

下面需要做的就是对这题进行利用,知道这个漏洞点之后我自己试了一下,但是并没有回显SSTI打过去的payload,比较奇怪,我以为是自己payload的问题,遂写了几句话看一下别人payload

image-20221114214314454

最后看到payload就是最简单的ssti payload,由于备份没有存所以展示不了了。可以去看hackbar最简单的那个。

既然确定了是在这里利用漏洞,那么回显的flag在哪里?

我从burp直接看了render后的结果,然后翻了一下源代码发现回显结果是以注释的形式体现,所以这题也就解出来了,最后写脚本批量交,每一轮能打四千多分。