南邮CTF web练习

前言

还是南邮的一些题,比较基础的。仍然需要学习一些web知识,上次做着做着 因为证书的问题burp还没有解决。。正在努力尝试解决这个问题。。。这次估计用到burp 的题 还是动不了了。。。

web1:/0xx

题目

点开题目链接后发现是代码审计….题目提示有多种的做法,先看看代码。发现有个ereg函数跟strops函数
不太明白这两个函数的作用去看了看

PHP 函数 ereg()
语法

`int ereg(string pattern, string originalstring, [array regs])

定义和用途`

ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的。

可选的输入参数规则包含一个数组的所有匹配表达式,他们被正则表达式的括号分组。

Return Value

如果匹配成功返回true,否则,则返回false

还发现了一篇文章:https://www.jianshu.com/p/7b732d4b8eac

发现ereg函数有截断漏洞ereg函数存在NULL截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配,发现文章中例子跟这道题目用的函数基本一致
例子
也就是说nctf变量必须是数字,当遇到%00(NULL)时,函数就截止了。

还有一个函数strpos() 函数查找 “php” 在字符串中第一次出现的位置:

定义和用法
strpos() 函数查找字符串在另一字符串中第一次出现的位置。

strpos() 函数对大小写敏感。
这在题目中就是strpos ($_GET[‘nctf’], ‘#biubiubiu’)函数要求nctf变量中需要包含’#biubiubiu’字符串,才能返回。

了解完来试试
不会的函数还是问问度娘好使。。最终拿到flag

web2:bypass again

点进去 发现好像还是代码审计
get一个变量

还有isset函数

定义和用法
isset() 函数用于检测变量是否已设置并且非 NULL。

如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE。

若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。

同时要注意的是 null 字符(”\0”)并不等同于 PHP 的 NULL 常量。这里应该是设置isset检测ab不为空

再看发现代码的意思是让两个不一样的数使他们的md5相等,md5()函数要求接收一个字符串,若传递进去一个数组,则会返回null(加了‘ ’就相当于字符串的代表了)

因此向$_GET数组传入两个名为a、b的不相等的数组,从而导致md5()均返回空输出信息 退出脚本。
这种题前面有类似,考察md5碰撞,只要md5值开头为0ed, ==会认为两边都为0,即为true这样就好弄了根据前面的题a=240610708&b=QNKCDZO 还可以?a[]=&b[]=1 这样比较简单 这是因为md5不能处理数组结构的数据。出错返回的空NULL==NULL

web3:变量覆盖

看到一个输入框,难不成是XSS或者SQL注入的类型题目吗

题目说是变量覆盖 先找到相关的看看基础知识。
原来还是代码审计的相关知识里面的
代码审计|变量覆盖漏洞

【代码审计】变量覆盖漏洞详解

那之后来干一波。
映入眼帘的 还是一大波代码果然还是代码审计

$password 等于$thepassword_123就能够得到flag了
这样构造一下得到flag

web4:php是世界上最好的语言

好像题目崩了
等等看再写。

web:5伪装者


告诉我不是本地登录 然后只有本地 题目又是伪装者 看来是伪造IP 应该可以抓包改包 来过 可是burp暂时不能用, 试试火狐的软件


。。。不知道为啥 这样保存后不让用,,,暂时没了思路 等正好burp再来战。这样伪造应该也是可行的。

web6:SQL注入1


点进去 看账号密码都有提交白 看看有啥信息
Secure Web Login
You are not admin!

告诉我不是admin 那就再点开Source

看到重点
不是说好的注入吗 突然有了审计的味道。

1框说明 user 是 admin,所以要想办法避免密码的验证

在2中:$sql=”select user from ctf where (user=’”.$user.”‘) and (pw=’”.$pass.”‘)”

我们通过审计发现注入点 在(user=’”.$user.”‘)做手脚,在Username处输入 admin’)#

输入 admin’)#

因为后面的语句被#注释了,要把源码原来的)补上。

web7: pass check

打开就是源码

看源码只要(!strcmp($pass,$pass1))条件成立就可得到flag。

strcmp()是用于比较字符串的函数

定义:

int strcmp ( string $str1 , string $str2 )
参数 str1第一个字符串。str2第二个字符串。
如果 str1 小于 str2 返回 < 0;
如果 str1 大于 str2 返回 > 0;
如果两者相等,返回 0。

因此尝试数组绕过,只要我们$_POST[‘pass’]是一个数组或者一个对象就搞定了。

web8:起名字真难

。。题目挺有意思 不过起名字确实很难

看看代码 nother_says_correct 没有其他精确的方法?/?…先往下看 百度这个给了我一个是数字验证正则绕过的类型题目,继续看 题目告诉我们是 输入key,key的值需要等于54975581388,但是key的每一位数字不能是1-9

ord()函数返回字符串的首个字符的 ASCII 值。

不让输入数字还让等于54975581388 这进制转化白 转化成16进制0xccccccccc

得到flag

总结

暂时做到这,对代码审计又有了进一步的认识。


  转载请注明: Greypotato 南邮CTF web练习

 上一篇
隐写(一) 隐写(一)
前言之前做的隐写题,再来巩固学习一下。 欢迎来到地狱打开文件看到三个文件。。 打开发现文件无法显示那就丢到winhex 文件头出现错误。那就修补一下 文件头少了FF D8 FF E1 依次添加上去得到新的图片 https://pan.bai
2019-07-28 Greypotato
下一篇 
SQL靶场练习 SQL靶场练习
前言 之前进行了SQL注入的学习,这里找到安全龙的实验室进行一波小小的练习。 第一关首先进行注入点测试。 一般来说先加一个单引号(英文),来判断这里地址栏自动转化了URL编码输入“ ?id=1’ ”,回显为 “1” limit 0,
2019-07-21 Greypotato
  目录