![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CTF web题目
文章平均质量分 62
buuctf和攻防世界都有,方便我自己以后看QWQ
孤丞OVO
这个作者很懒,什么都没留下…
展开
-
[SWPU2019]Web1
构造payload:-1'/**/union/**/select/**/1,(select/**/group_concat(c)/**/from/**/(select/**/1/**/as/**/a,2/**/as/**/b,3/**/as/**/c/**/union/**/select/**/*/**/from/**/users)/**/as/**/d),database(),4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22'原创 2024-07-27 19:33:33 · 343 阅读 · 1 评论 -
[CISCN2019 华东南赛区]Web11
进来先做信息收集,右上角显示当前ip,然后有api的调用地址和请求包的格式以及最重要的是最下面的smarty模版,一看到这个就得想到smarty模版注入测试了一下两个api都无法访问直接切到数据包看看能不能通过XFF来修改右上角ip成功修改!结合给的信息smarty模版来看这道题应该是在XFF这里进行模版注入。原创 2024-07-27 16:10:20 · 464 阅读 · 0 评论 -
[网鼎杯 2020 朱雀组]Nmap(详细解读版)
这道题考察nmap的一些用法,以及escapeshellarg和escapeshellcmd两个函数的绕过,可以看这里两种解题方法:第一种通过nmap的-iL参数读取扫描一个文件到指定文件中第二种是利用nmap的参数写入webshell-oN 标准保存-oX XML保存-oG保存-oA 保存到所有格式。原创 2024-07-27 13:59:36 · 473 阅读 · 0 评论 -
[ASIS 2019]Unicorn shop
搜索1000,国外网站用英文,然后找一个字符串拿去放到price里面买马即可。这道题买马,但是限定输入一个字符,我们输入10后会报错。这道题考的就是Unicode码下的单字符转换后大于一千。直接上这个网站搜索就行。原创 2024-07-26 19:30:49 · 79 阅读 · 0 评论 -
[强网杯 2019]高明的黑客
转,方便以后我自己看。原创 2024-07-26 15:13:12 · 178 阅读 · 0 评论 -
BUUCTF [安洵杯 2019]easy_serialize_php
然而因为filter函数的过滤,将php和flag过滤掉,因为指定的键名长度为10,产生了字符串逃逸,我们在后面随便添加几个垃圾字符让它往后读取形成一个新的键名,形成一个键值对,如下所示是payload过滤加上字符串逃逸后形成的序列化数据。php反序列化的过程中必须严格按照序列化规则才能成功实现反序列化,如果出现这种情况s:10:"flag",键名长度为4,但规定长度为10,就会造成字符串逃逸向后读取,这里是我们解题的关键。s:3:"img";后面代码中先进行序列化操作,原本的序列化数据应该为。原创 2024-07-25 18:42:49 · 839 阅读 · 0 评论 -
BUUCTF [MRCTF2020]Ezpop
b->source->str = $c中$b->source已经成为一个新的Show实例对象,通过该对象访问str,为其赋值为$c(Test类的对象),又因为Test类中访问不到source资源从而触发get方法。$b->source = new Show()因为通过$b这个对象进行访问的,所以需要source赋值一个新的Show对象,用来触发__toString方法。$c->p = $a将Test中的p赋值为一个Modify对象,用来触发invoke方法。得到一串base64。原创 2024-07-24 20:37:47 · 617 阅读 · 0 评论 -
SSTI 攻防世界 Confusion1
具体来说,__class__是一个内置属性,表示一个对象所属的类。即""[request.args.__class__]和"".__class__效果是一样的,但是因为在语句中过滤了基础类,我们可以采取变量赋值的方式绕过限制。解析:"".__class__.__mro__[2].__subclasses__()方法返回的是可用类(classes),而不是对象(objects)。综上所述,"".__class__.__mro__[2].__subclasses__()方法返回的是可用类(classes)。原创 2024-07-24 11:52:50 · 815 阅读 · 0 评论 -
攻防世界 wife_wife
大概原理就是类那里属性值也被修改,已经提前知道了,打个比方:你妈生下来了你自然知道你是她儿子,你就不用再证明你是她儿子了!会被认为是一个真正的“键名”,如果修改实例化对象的__proto__属性的值也会将类的prototype值进行修改,结合这道题实现越权以管理员身份登录。这道题两个功能点,登录和注册,注册选择是否管理员,选择是要输入邀请码,不然就是普通用户,进去里面给了个假flag调戏我!还有个妮露图片(我不是原皮!我是大致明白了,实例化的对象会继承类的prototype属性,JSON 解析的情况下,原创 2024-07-23 19:45:59 · 204 阅读 · 0 评论 -
BUUCTF [安洵杯 2019]easy_web
结合刚才ctrl+U发现输出base64编码的文件内容,index.php里面多半有源码,我们需要按照上面这个相反方式把index.php 字符转16进制ascii,记得去掉空格,空格会影响编码结果,我就是吃了这个的亏!这个东西看着就像base64编码,解码两次得到一串数字,可能还是什么东西我又解了一次,发现是十六进制转字符。burp修改请求方式,cmd传参dir列出当前目录文件(因为我试了ls不行哈哈哈),但是没有flag。输入到img参数中,把这串base64编码解码得到源码,正席开始!原创 2024-07-22 19:58:19 · 385 阅读 · 0 评论 -
BUUCTF [BJDCTF2020]Cookie is so stable
这道题先点了一下没发现什么get参数,dirsearch和githack都扫了一下没啥收获,后面在hint源码中发现一行注释让我们仔细看cookie又回去在flag页面随便输个名字(只有这里有操作的地方),看到发了两个数据包,post方式包里面带两个请求体参数,不过cookie没有什么异常get型数据包里面发现多了一个参数usercookie一般存在什么问题,伪造身份,注入?这里伪造身份肯定不存在,那就只能注入了,但是有个问题是我们输入的数据被当做数据打印出来了,那就没法sql注入。原创 2024-07-22 17:19:45 · 291 阅读 · 0 评论 -
BUUCTF [WUSTCTF2020]朴实无华
第一块就是intval函数的绕过,逻辑上是不存在小于2020又大于2021的数,但是php低版本好像是7点多和以下该函数对不同类型的数据处理有偏差,第二处则是md5函数绕过,原创 2024-07-22 16:42:40 · 658 阅读 · 0 评论 -
unseping
将我们的base64编码并且序列化的数据经过post请求发送到PHP文件处理,代码首先接受数据然后base64解码反序列化,又因为wakeup这个魔术方法在反序列化前会被优先调用,所以执行wakeup方法:遍历关联数组args,将每个键对应的值用waf方法进行正则匹配,如果匹配通过后返回原字符串,否则打印hack,由此可以看出args存放的是系统命令这些。"、空格字符、斜杠字符"/",以及字符串"cat"、"flag"、"tac"、"php"、"ls"。okk,到这里差不多读懂代码了,原创 2024-07-15 16:12:05 · 647 阅读 · 0 评论 -
攻防世界easyphp
array_search函数又是弱类型比较,所以我们在c["n"]嵌套的数组再加一个0即可绕过,不让他终止程序,c["n"]数组中没有这个字符串循环里面不可能终止程序,然后得到$key2=2。先从第一部分开始,要让a取整的值大于六百万而且长度不能大于3,我们可以使用科学计数法,比如7e6,结果七百万而且长度刚好为3。最终payload:?a=7e6&b=53724&c={"m":"2023a","n":[[],0]}得出53724符合这个条件,所以?a=7e6&b=53724即可让$key1=1。原创 2024-07-13 10:42:02 · 235 阅读 · 0 评论 -
攻防世界shrine
flask模版注入加沙盒逃逸,触及到知识盲区了,直接看这篇文章吧。原创 2024-07-12 18:07:56 · 274 阅读 · 0 评论 -
攻防世界lottery
burp抓包放七个true在数组里边就行了,因为前面循环是a[i]所以把双引号去掉丢数组里面即可,多玩几次就可以凑够钱。这是一个大乐透网站,猜七位数和开奖的七位数相等就可以拿到最高奖项,多玩几次筹够钱直接去买flag即可。这道题我看了很久附件最后发现没啥用,就是一个弱类型比较。Claim your prize这里直接买flag!进来首先点击去玩创个号,输个名字。审计代码,在api.php里面。原创 2024-07-12 16:25:29 · 399 阅读 · 0 评论 -
BUUCTF [极客大挑战 2019]Http
UA改为对应特征浏览器后又报错提示我们只能在本地观看,怎么判断是否本地呢,我们可以设置请求ip为本地环回地址127.0.0.1。发现一个超链接,点击跳转后页面显示我们的跳转网址不是这个,所以需要伪造防盗链Referer,打开bp改吧。截获数据包添加防盗链为上面要求的跳转地址后看到页面回显让我们用Syclover这个浏览器,看来得改UA。可以用X-Forwarded-For设置请求头里的ip。上来把整个页面看了一下没什么东西,那就直接看源码。设置好后直接报出flag。原创 2024-04-15 22:31:23 · 181 阅读 · 1 评论 -
BUUCTF [ACTF2020 新生赛]Upload
发现一大堆都上传成功了,我们随便选一个放包吧,我经常用phtml所以就选这个了(当一个文件的扩展名为".phtml"时,服务器会将其视为包含PHP代码的文件,并通过PHP解析器来执行其中的代码)丢到攻击器使用后缀名字典爆破一下看看有没有遗漏没过滤的。发现只能上传jpg,png,gif格式图片。先直接上传一句话木马看看有没有过滤规则。将文件后缀名修改为jpg上传,bp抓包。将路径拼接到url里面成功访问。上传成功,路径也显示出来了。鼠标悬停发现文件上传点。根目录下看到flag。原创 2024-04-16 15:07:58 · 179 阅读 · 0 评论 -
攻防世界 Web_python_template_injection(flask模版注入)
通过调用__class__.__mro__,可以获取该类的方法解析顺序(Method Resolution Order,MRO),它是一个元组,按照查找方法时的顺序列出了对象所属类及其父类。解析:"".__class__.__mro__[2].__subclasses__()方法返回的是可用类(classes),而不是对象(objects)。综上所述,"".__class__.__mro__[2].__subclasses__()方法返回的是可用类(classes)SSTI与这个方法密不可分。原创 2024-07-06 11:42:12 · 1157 阅读 · 0 评论 -
BUUCTF [极客大挑战 2019]BabySQL
使用payload:1' union selselectect 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23发现有报错,看了一下还能过滤的多半是where。使用payload:1' union select database(),version(),1%23报错,可能是union或者select中一个或者都是。双写by后不再报错,说明by被过滤需双写。原创 2024-04-16 16:15:28 · 331 阅读 · 0 评论 -
攻防世界 (Django @宽字节注入)Cat
POST方式说明这里数据提交的逻辑是:客户端将get数据提交给PHP,php使用post方式给Djanjo写的api,在报错页面中可以看到应该是/api/ping。带着上面的疑问不知道该怎么办,看了一一篇别人的wp才发现脑子瓦特了,直接全复制html代码找个在线运行html网站跑一下发现是Django的报错页面,这么看就方便多了,看数据大多是刚才那个表单提交的。表单提交的地址我搜了一下发现还能访问但是不知道是干嘛的,ai搜了一下原来是个协作写代码的平台。这html代码太多了,我找到个表单发现了很多东西。原创 2024-07-09 11:10:23 · 671 阅读 · 0 评论 -
BUUCTF [极客大挑战 2019]LoveSQL
构造payload:1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='geekuser' and table_schema='geek'%23。使用group by在4时报错说明查询列数为三,使用payload为:admin' group by 4#,url里面插入#号必须得url编码,随便找个在线编码网站把payload url编码一下。原创 2024-04-15 22:10:51 · 593 阅读 · 1 评论 -
BUUCTF [RoarCTF 2019]Easy Calc
这是一个打印函数,用于以可读的方式输出变量的内容。查到斜杠的ascii码值为47,我们可以用chr(47)代替'/',但是执行的效果和这个是一样的。我的判断来看,这个需要给num参数传入我们能绕过黑名单过滤的攻击语句即可拿到flag。这段代码是一个简单的PHP脚本,它包含了一个简单的输入验证和执行用户输入的功能。的作用是将根目录下的文件和文件夹的名称以可读的方式打印出来。检查是否存在名为"num"的GET参数。函数用于获取指定目录下的所有文件和文件夹的名称。的作用是获取根目录下的所有文件和文件夹的名称。原创 2024-04-18 19:59:26 · 668 阅读 · 4 评论 -
BUUCTF [强网杯 2019]随便注
虽然我们改变不了原有的查询语句,但是我们可以借鸡生蛋,把flag在的表的名字和列名改成原本语句查询words表名和列名,这样就可以直接查出我们要的东西。#查words表发现有两列,说明原本的sql查询语句是从words表中进行查询,并且我们可以猜测查询语句为select id,data from words......前两行改表名,第三行因为原本id限制长度为10,但是flag应该没这么短,所以修改words表中的列定义,将flag列的数据类型更改为varchar(100),后两行不做解释。原创 2024-04-14 11:09:01 · 420 阅读 · 1 评论 -
BUUCTF [ZJCTF 2019]NiZhuanSiWei
我们只需添加两行代码即可得到序列化后数据O:4:"Flag":1:{s:4:"file";}(别忘了赋值给$file!查看代码后发现参数给变量password前需要进行反序列化,说明原本的数据是序列化后的数据。第二层:代码中用正则匹配过滤flag,发现变量中含flag就exit停止执行。但是下面代码给我们提示了useless.php文件,文件包含执行。显示成功,在源码(ctrl+U和鼠标右键都可查看)中发现flag。上面提示我们flag.php文件,估计flag就在这里面。原创 2024-04-28 17:07:10 · 461 阅读 · 3 评论 -
攻防世界(PHP过滤器过滤)file_include
该过滤器不支持参数,但可使用输入/输出的编码名称,组成过滤器名称,比如 convert.iconv.. 或 convert.iconv./ (两种写法的语义都相同)。转换过滤器官方文档:https://www.php.net/manual/zh/filters.convert.php#filters.convert.iconv。burp爆破用这个字典。原创 2024-07-11 11:26:18 · 470 阅读 · 0 评论