链接:https://www.secpulse.com/archives/141956.html
大家好,我是北京联合大学-小帽,也是本题的出题人。熟悉我的朋友们知道,平时喜欢做做欢乐杂项休闲休闲,所以这次的题目算是个披着web皮的半Misc。
由于微信小程序的开发简单、操作方便等优势,很多的公司、部门都喜欢制作小程序简化工作流程。在红蓝对抗、渗透测试等等场景,可能蓝队的信息中心会遗漏小程序这一边界(有可能是某个部门自己外包做的,信息中心根本不清楚)。而在程序开发过程中,开发者很容易信任某些用户输入,例如直接COPY官方文档中对麦克风、摄像头的操作而忘记了对上传的语音、视频检验。
另:复现可能会上BUUOJ,敬请期待
writeup
打开题目就看到了熟悉的健康宝,
先试一下业务,有登录、查健康宝和到访信息登记三个。登录时有提交表单和上传图片,然后在查健康宝的地方可以显示。登录表单看起来没什么破绽;检查html,他并没有想象中的包含,直接给了路径但是文件名被强制改了。
在防疫登记那里,有一些样例二维码,扫描看到是json(是的,这是彩蛋,留了我校在使用的8个校区)
扫描目录,在/www.zip得到部分源码(这是个hint,不然留的洞有点太脑洞了
在qr.php文件(也就是到放登记)看到用php扫描了刚刚上传的二维码,解json后将其中的id插入进数据库中。这里是没有任何检查的,进行insert注入即可。
给个payload,剩下的大家自行发挥。
1 | 1' and (case when (substr((select group_concat(flag) from flag) from 1 for 1 )='f') then sleep(3) else 1 end ),'11');# |
引申
平常遇到sql注入可以双写绕过、大小写绕过这些常见绕过时,直接用sqlmap的插件就可以了。但如果像这个题目一样中间有一些逻辑,就需要自己写脚本或者插件了。
渗透测试时遇到这种较复杂的业务,直接上漏扫工具或sql注入工具就不顶用了。之前听了一个好思路,自己写个转换脚本做工具与靶机之间的agent,把接收的攻击请求转换后再发出去。
抛砖引玉,用这个题目写了一个小demo👇。请求a的内容会转化进二维码转发给靶机
1 | import qrcode |
用xray扫描http://10.12.104.60:5000/?a=1 发现sql注入漏洞