Nctf_web_wp

1.签到题
    右键源代码便可
2.md5 collision
    这个考点是php"=="的弱相等,为什么会出现弱加密呢,是由于在比较==两边的时候,会将字符串类型转化为相同,在进行比较。例如“admin”== 0,这个比较是返回True的,由于会先强制的将admin转化为数值,转化出来的结果就是0==0,因此返回为True。那为何admin强制类型转化以后取值为0呢?这是由于php在强制转化的时候,若是字符串中没有出现"." "e" "E",则会按照int类型转换,不然转化成float,字符串开头就决定了取的值,若是在合法的数值开头,则使用该值,不然取0。举个例子就明白了:
    admin  == 0
    1admin == 1
    admin1 == 0
    而若是是带e的则是会识别为科学计数法,故而0e开头的都会识别为相等,由于0的多少次方都是0,因此这就是为何能够利用php弱相等绕过md5比较了。因此更加安全的比较是 === ,由于 === 会先比较数据类型,再去比较值 。能够直接去搜索百度,能获得一堆
 
3.签到题
    这题考简单的SQL万能密码,尝试在text1中简单地注入,发现注入不进去,另辟蹊径猜想该php中存在其余的参数能够注入,填写正确的密码,而后拼接上id使用万能密码,发现直接返回了flag
 
4.这题不是WEB
    没想到出题人说的是真的,这题确实不是Web,下载网页中gif图片,用winhex打开查看二进制,在文件的结尾处存在flag

5.层层递进
    看题目的提示,能够看出应该是信息收集,一步步收集信息的意思,直接查看源码分析连接。
 
 
 
 
 
 
6.AAencode
    平台代码可能有点问题。
7.单身二十年

    这题直接看网页源代码此处再也不赘述。

8.php decode
   
    这题考察典型的使用gzinflate+base64对php进行加密的解密,百度一波,提示的是将eval替换成echo便可。
    这里都是针对的是一层加密的,调研的过程当中,发现有更高级的用法就是多层加密的,即经过上述的方法,解密出来的东西仍是同样的。
下面附上多重加密的代码,替换eval,匹配你想要的字符串便可。
9.文件包含

    进入题目,思路很清楚,file参貌似存在文件包含漏洞。
    故而这里详述一下文件包含的原理。为何会存在文件包含呢,开发人员通常会把重复使用的函数写到一个文件中,须要使用的时候直接调用,就免去了再次编写的麻烦,而在调用这些文件的过程就被称为文件包含。几乎全部的脚本都存在文件包含,但漏洞多出如今php中,这是语言设计的漏洞,但这并不表明其余的语言不存在。
    其中常见的函数是include() , include_once() , require_once() , fopen() , readfile() ....
    下面接收下各个函数的意思:
    include():执行到include时才包含文件,找不到包含文件时就会产生警告,但会继续执行脚本。
    require():程序运行一开始,就会包含文件,若是找不到包含文件,中止脚本。
    include_once()和 require_once():若是文件中的代码已经被包含,则不会再次包含。
    其中文件包含的方法总结下来以下几种,应该还有其余方法,往后若是遇到超越以下方法的题目,能够作下标记。
    1.直接包含
    2.经过PHP内置协议直接读取代码
    协议基础:php://伪协议>>访问各个输入/输出流
        2.1 php://filter
            解释:php://filter是一种元封装器,被设计用于数据流打开时的筛选过滤,简单的讲,就是在代码运行前将代码换一种方式读取。这种方法不须要开启allow_url_include选项。
        payload:?file=php://filter/read=convert.base64-encode/resource=xxx.php
        
        2.2 php://input
            解释:上面filter支持读文件,确定还能写文件,而写文件就是利用input将数据post过去。
            用法:?file=php://input 数据利用POST传过去,其中若是allow_url_include=on,php<5.30,能够形成任意代码执行,即post一句话过去便可执行。
            data://伪协议>>数据流封装器,即include的文件流重定向到了用户可控制的输入流中
        2.3 data://text/plain
            解释:
            用法:?file=data://text/plain;base64,base64编码的payload
            phar://伪协议 >> 数据流包装器,自 PHP 5.3.0 起开始有效,正好契合上面两个伪协议的利用条件。说通俗点就是php解压缩包的一个函数,解压的压缩包与后缀无关。
        2.4 phar://
            解释:
            用法:?file=phar://压缩包/内部文件
这一题使用的即是利用了filter协议读取了index.php的源码,
经过base64解密便可获得源码。
10.单身一百年也没用
    这题与先前的单身二十年一模一样,点击以后,会发现有个302的返回包,请求头中就存在flag
 
11.Download~!
    链接打不开,题目做废。
12.COOKIE
    根据题目意思,着手点在Cookie上,直接试着将Login=0改为Login=1便可获得flag    
 
13.MYSQL
    根据提示的robots.txt,直接访问获得的是一段源码,进行代码审计。发现以下问题,首先是提示文件的名字,试着访问是能够访问的,可是这段代码使用了intval()强制整数转化函数的安全处理,现在并无办法对intval进行注入的操做。一开始觉得是暴力破解id,后来发现也就1024可能存在东西,可是被这个if挡住了,因此要想办法绕过这个if,仔细观察if的条件,条件并非$id,而是$_GET[id],因此如今的思路就变成了,若是输入!=1024,可是intval[$id]=1024的问题了。
遂上网查一波资料发现以下规则
因此试一波小数,获得flag
     

14.GBK Injection
    这里考察的是宽字节注入,关于宽字节,这题的防护在于使用了反斜杠的转义,故而使用宽字节注入。
    
若是咱们输入1%df呢,咱们看看效果
 
发现反斜杠被吃掉了,这是由于%5c是反斜杠,前面加上%df合在一块儿数据库会当作双字节识别成一个%df%5c,因此就能形成注入了
 
那咱们只须要对http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df做为注入的网站,用sqlmap跑下来就好了
 
15./x00
    strpos() f函数查找字符串在另外一字符串中第一次出现的位置(区分大小写)。
    
    试一下传入一个数组,便可获得flag,由于这里的值都是与false做比较,若是函数出错返回NULL便可
 
这里还有一个作法就是是1%00#biubiubiu,这一种比较好理解,传nctf=1%00#biubiubiu 接收到1后被截断,后面也有所须要的#biubiubiu,条件成立,拿到flag!
16. bypass again
    这题强网杯中有一个更好的题目,这题的考点在于php中md5函数在接受数组的时候会返回NULL,因此若是传入两个数组,那么就会变成NULL===NULL,而强网杯的那一题是只能找出两个相同的md5值才行,也能构造,经过找到两个相同md5的文件,进行url编码,传上去就好了。

 
17.变量覆盖
    这题考察的是变量覆盖漏洞。
    常常引起变量覆盖漏洞的函数有:extract(),parse_str()和import_request_variables()    
    1.extract()
        目前使用最多见的就是这风格函数,使用的频率也是最高的,致使的漏洞也是最多的。
        extract(array,extract_rules,prefix)
        array:输入
        extract_rules:可选,做用是检查键名是否合法,其中要注意的是,若是该值等于EXTR_OVERWRITE(默认),若是键名有冲突,覆盖变量。EXTR_SKIP ,若是有冲突,不覆盖
        prefix:可选,请注意 prefix 仅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 时须要。若是附加了前缀后的结果不是合法的变量名,将不会导入到符号表中。前缀和数组键名之间会自动加上一个下划线。
    2.parse_str()
    parse_str函数的做用就是解析字符串并注册成变量,在注册变量以前不会验证当前变量是否存在,因此直接覆盖掉已有变量。
    3.import_request_variables()
    import_request_variables()函数就是把GET、POST、COOKIE的参数注册成变量,用在register_globals被禁止的时候bool     import_request_variables ( string $types [, string $prefix ] )
    $type表明要注册的变量,G表明GET,P表明POST,C表明COOKIE,第二个参数为要注册变量的前缀
    

这题的代码审计中就考察了这个点
 
    这里讲post进来的数据作了extract,而后比较了pass的值和¥thepassword_123的值,因此如今的目标是让pass和thepassword_123相等既能获得flag,因此这里我构造这样的输入数据,让等式两边都变成空。
 
能够看到咱们已经成功的将thepassword_123覆盖成了NULL,也不必定要是null,只要覆盖让他们相等便可。

18.PHP是世界上最好的语言
    网页没法打开,略。
19.    假装者
    看这题的题目就知道考察的点是ip伪造。
 
在ddctf2018中web第一题也考察了这个点,遂伪造一下ip
 
可是啥也没有,上网看一波其余人的wp,好像是直接添加了X-Forwarded-For就能够获得flag,多是后台网站的缘由,这题的知识点介绍到这里。
20.Header
    题目没法打开,略。
21.上传绕过
    这题考察的是文件上传绕过。
    一个一个试
     Content-Type:pass
     00截断文件名:pass
     扩展名绕过:pass
     00截断文件夹名:成功
 
22.SQL注入1
      这题考察代码审计,给出源码
    
进行源代码的审计,观察其中的数据库查询语句,发现对输入的pass进行了md5加密,故而没有办法对其进行注入,而user的输入采起了直接拼接的方式,故而直接对user进行注入,输入admin')#将后面的注释,前面的闭合便可,
    
23.pass check
    这里进行源代码审计
 
发现使用了strcmp进行比较,并做为了if的判断条件,这个和上面提到的md5()弱相等有殊途同归之妙。原理在于这是对两个字符串进行比较,但若是传入函数的不是字符串类型的话,strcmp会返回0,因此这里咱们构造数组进行传入,便可获得flag。
24.起名字真难
    进行源代码审计
    
    这里有两个条件,一个是必须得是判断key中存不存在数字,第二个输入的数==54975581388,不存在数字如何让他等于54975581388呢,这里一样考察的是php的弱相等,上面提到,==两边会强制转化为同一类型,因此这里咱们将54975581388转化为16进制的话也会先转化为十进制,在进行比较
 
刚好转化出来也并不含数字。获得flag
 
25.密码重置
    
这里题目要求的是重置admin,user1没法更改,使用了base64编码,故而这里将admin进行base编码再更改请求主体。便可。。
26.php反序列化
    题目不可用,略。
27.SQL Injection
    继续源码审计
    
这里使用了get_magic_quotes_gpc()-,一种默认的配置,若是开启的话,会将特殊字符加上\转义。stripslashes(),删除全部的\字符,htmlentities(),其中的ENT_QUOTES参数的意思是将全部的单引号和双引号。可是要经过闭合单引号怎么办呢?这里根据提示使用\对后面的单引号进行转义,闭合。
 
后台的语句变成了这样
 
28.综合题
    这里一打开,是下面这个样子。
 
这里使用的是js编码,直接在控制台中输入。返回一个地址。
 
继续访问,提示在脑壳里,查看http头发现tip:提示history of bash
 
    这里考察的知识点是--history命令能够用来显示曾执行过的命令。执行过的命令默认存储在HOME目录中的.bash_history文件中,能够经过查看该文件来获取执行命令的历史记录。须要注意的是.bash_history不包含当前会话所执行的命令,执行过的命令在关机时才会写入文件,除非执行命令history -w。
    一开始还觉得是命令执行,后来找不到参数试了几下也试不出来,后来直接访问.bash_history试了试。
 
提示刚执行了系统命令 解压了flagbak.zip包,而后访问这个zip包,下载下来,得到flag
 
29.system(暂时没法作)
30.SQL注入2
    一样的是代码审计。
    

31.综合题2
    这题先作前期的信息收集,查看下方有个连接,点击进去。
    
 
观察多是文件包含漏洞,试了一下,果真存在文件包含漏洞,试了一下文本中提示的index.php,say.php

 
美化后的代码如图
信息收集的过程当中还发现了不少文件,均可以经过这文件包含来读取源代码。
 
其中so.php最为可疑,而且存在sql注入漏洞。
 
题目有问题,做罢。
32.密码重置2
    先看tip,把tip的内容都找到
    
    第一个tip
    
    第二个tip
    
    根据右键源码,访问index.php.swp和submit.php.swp,发现后者有东西
    
    token长度为10,且值要等于0,故而输入10个0试试,获得flag。其实这里用到了弱类型!=,在做比较时也是会先强制转换成整数再作比较。
    
    
33.file_get_contents
    这题右键源码
 
发现file_get_contents函数,一样考察的是文件包含漏洞,这里正是用到了上面说的php://input协议任意写
 
 

34.变量覆盖
    这里题目直接提示了变量覆盖,咱们先观察一下源代码。
    
    直接覆盖。。
    
35.注意!!

php

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息