下面是所有现在可以做的web题的wp!

建议使用CTRL+F查找所需题目,我都有标注!这样方便!

1、签到题

直接查看源码即可

2、md5 collision

解读代码:

$md51 = md5('QNKCDZO');$a = @$_GET['a'];$md52 = @md5($a);if(isset($a)){if ($a != 'QNKCDZO' && $md51 == $md52) {echo "nctf{*****************}";

}else{echo "false!!!";

}}else{echo "please input a";}

经典的md5加密题:个人感觉这题考的就是两个等于号,双等于号漏洞,也就是可以通过0e,科学计数法绕过的!所以只要前面是0e开头的md5加密的也就基本可以了,也不需要找,这个百度一大堆的!

md5('s878926199a')=0e545993274517709034328855841020

md5('s155964671a')=0e342768416822451524974117254469

找了两个,随意选一个就行了!还有很多可以自己收藏!

3、签到题2

打开题目地址是这样的!

像这种类型的一般就是输入框长度被限制了,所以直接右键点击检查,改一下就行了!

其实11也就行了,这样的题就这样的套路,比较简单!再遇到一些做sql注入啥的被限制了长度都可以这样改!

4、这题不是WEB

点开题目地址发现是一张图片!

这样的题,首先先看一下源码,或者检查一下F12看里面是否存在,若不存在那应该再图里面了!下载图片,拉进HEXEdit里面查看,再最后发现flag!是个图片隐写了!

5、层层递进

点开题目地址是这样的!

还是直接点击查看源码,和右击检查,都是老套路,也就不多说了!

再检查源码的时候发现:一个SO.html点击去查看~!~

然后发现有个404.html!

再点击去看:

点击检查:发现flag

6、AAencode

很不幸,这个不能做了,原来还可以,应该是帮aaencode.txt文件给删除了吧,就说说这样的解码吧,这个解码也就是一些符号组成的,一般只要放在控制台里面就可以了!

如果不行再找一下解码的平台啥的!

7、单身二十年

有点意思,看看题目:

看题么应该是个闪图啥的!或者快速跳转啥的,这种的用burp就比较简单了!进题目地址看看!

是个跳转页面,不要怕我们有神器==burp==

直接出来,burp不会的那自己去百度一下吧!各种骚姿势!

8、php decode

看代码吧:

}return $ZzvSWE;

}eval(CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA==")); //eval可以解析php代码,所以此题只需要帮eval改为输出就行了,echo、print,这样

$ZzvSWE也就被赋值了所echo的值!

?>

一看代码,发现这是个加解密的题目呀!

代码解析在上面,这个开启我的study,代码运行起来才能发现问题!

9、文件包含

文件包含,那就涉及到了伪协议,所以还是先做题!

这里使用一个php://filter/read/convert.base64-encode/resource=xxx.php,转为base64这样就能得到源码了!

再解码也就得到了源码:https://base64.supfree.net/ 解码地址、也可以自己用base64-decode(.......)来解码!

解码发现flag!

既然可以伪协议我再看看能否用一句话连接接!

发现想多了,哈哈哈!

做题要联想,这样才能加强自己的实力,虽然我还是个小白,小菜鸡,我会努力的,加油!

10、单身一百年也没用(这题目有点狠,单身一百年,一辈子光棍呗,哈哈哈)

题目地址点开发现还是跳转,不多说,上神器burp!

11、Download~!

这题不能做唉!

12、COOKIE(题目提示COOKIE就是甜饼的意思~TIP: 0==not)

这种有COOKIE的还是直接抓包看比较舒服!上burp!

发现有个Login=0,根据题目意思,0一般是假或者空,改为1,试试!

13、MYSQL

robots.txt?这个文件一般只要是个网站都会有的,相当于加载一些网站的一些xxx.php等文件名啥的!

代码吧:

一般sql注入我都直接sqlmap跑了,这个手注一波吧,讲解原理!

1、主要看一个函数intval() 函数用于获取变量的整数值。(这题的关键点)

2、再看if语句,这个需要id=1024就输出 no!try again,否则输出查询语句,应该是出flag的!

echo intval(4.2); //4

echo intval('42'); //42

echo intval('+42'); //42

echo intval('-42'); //-42

echo intval(042); //34

echo intval('042'); //42

echo intval(1e10); //1410065408

echo intval('1e10'); //1

echo intval(0x1A); //26

echo intval(42000000); //42000000

echo intval(420000000000000000000); //0

echo intval('420000000000000000000'); //2147483647

echo intval(42, 8); //42

echo intval('42', 8); //34

echo intval(array()); //0

echo intval(array('foo', 'bar')); //1

?>

所以直接构造payload,利用小数绕过if!

14、GBK Injection

宽字节注入发生的位置就是PHP发送请求到MYSQL时字符集使用character_set_client设置值进行了一次编码。在使用PHP连接MySQL的时候,当设置“character_set_client = gbk”时会导致一个编码转换的问题,也就是我们熟悉的宽字节注入

宽字节注入原理即是利用编码转换,将服务器端强制添加的本来用于转义的\符号吃掉,从而能使攻击者输入的引号起到闭合作用,以至于可以进行SQL注入。

这里的宽字节注入是利用mysql的一个特性,mysql在使用GBK编码(GBK就是常说的宽字节之一,实际上只有两字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围),而当我们输入有单引号时会自动加入\进行转义而变为\’(在PHP配置文件中magic_quotes_gpc=On的情况下或者使用addslashes函数,icov函数,mysql_real_escape_string函数、mysql_escape_string函数等,提交的参数中如果带有单引号’,就会被自动转义\’,使得多数注入攻击无效),由于宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,将后面的一个字节与前一个大于128的ascii码进行组合成为一个完整的字符(mysql判断一个字符是不是汉字,首先两个字符时一个汉字,另外根据gbk编码,第一个字节ascii码大于128,基本上就可以了),此时’前的\就被吃了,我们就可以使用’了,利用这个特性从而可实施SQL注入的利用。

最常使用的宽字节注入是利用%df,其实我们只要第一个ascii码大于128就可以了,比如ascii码为129的就可以,但是我们怎么将他转换为URL编码呢,其实很简单,我们先将129(十进制)转换为十六进制,为0x81,如图1所示,然后在十六进制前面加%即可,即为%81,任意进制在线转换网站请点击此处!另外可以直接记住GBK首字节对应0×81-0xFE,尾字节对应0×40-0xFE(除0×7F),则尾字节会被吃点,如转义符号\对应的编码0×5C!另外简单提一下,GB2312是被GBK兼容的,它的高位范围是0xA1-0xF7,低位范围是0xA1-0xFE(0x5C不在该范围内),因此不能使用编码吃掉%5c。

原文链接:https://blog.csdn.net/william_munch/article/details/100037244

这位博主说的原理挺好的,所以我就转载使用一下了!

所以再写数据库时还是最好使用utf-8比较安全的!

使用%df和'就会转义为 運 这样就绕过一些安全函数了!下面是payload,所以我也不再截图了!

payload:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,database()--+

回显:sae-chinalover

payload:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,group_concat(table_name) from information_schema.tables where table_schema = database()--+

回显:ctf,ctf2,ctf3,ctf4,gbksqli,news

应该是这个gbksqli这个表!!!

payload:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,group_concat(column_name) from information_schema.columns where table_name = 0x67626B73716C69--+

回显:flag

payload:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,flag from gbksqli--+

回显:nctf{gbk_3sqli}

这里的#过滤了所以使用的是--+

15、/x00

看代码吧:

view-source:

if (isset ($_GET['nctf'])) {if (@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE) //ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的。echo '必须输入数字才行';else if (strpos ($_GET['nctf'], '#biubiubiu') !== FALSE) //strpos() 函数查找字符串在另一字符串中第一次出现的位置。strpos() 函数对大小写敏感。

die('Flag: '.$flag);else

echo '骚年,继续努力吧啊~';

}

解析代码:

1、判断是否传入nctf

2、利用ereg函数绕过正则 (ereg函数一个漏洞,类似于0x00截断,都是因为这些函数遇到ASCII码为0的字符时,会自动默认到了结尾而停止)

3、绕过strpos函数

所以第一种方法出来了!

可以使用%00截断的这种

#需要改为%23,url编码问题,不改出不来!

第二种,因为ereg函数对数组只返回null!所以第二种也就出来了!

因为又做了强制判断 === 所以也就是false了

strpos函数也不解析数组,所以也返还null

16、bypass again

看源码:

if (isset($_GET['a']) and isset($_GET['b'])) {if ($_GET['a'] != $_GET['b'])if (md5($_GET['a']) == md5($_GET['b'])) //主要还是这个双等于漏洞die('Flag: '.$flag);else

print 'Wrong.';

}

这题思路点:

1、需要输入a和b

2、a和b不能相等

3、md5值又需要相等,才输出flag!

这题解题点,是这个双等于,都知道双等于可以利用科学计数法绕过,就是0e开头的!所以只要找两个0e开头的md5值就行了,上面有题就是的,就不多说了!

md5('s878926199a')=0e545993274517709034328855841020

md5('s155964671a')=0e342768416822451524974117254469

直接截图吧:

17、变量覆盖

参看所给源码:

考点:

1、extract函数

2、让$pass == $thepassword_123,这就利用到上面的函数extract()

让$pass、$thepassword_123赋值相同值就行了

如下:

18、PHP是世界上最好的语言

做不了!

19、伪装者

由题所知:需要修改本地也就是127.0.0.1,打开burp吧!

要么是X-Forwarded-For代理服务,或者是client-ip真实ip地址!

20、header

这个也做不了!

21、上传绕过

文件上传,还是用burp抓包、改包、发送!

选择比较小点的图片,最好不要超过1M的越小越好!最好是png的,文件内容不容易损坏!

上传发现需要后缀为php的,所以考虑用%00截断试试!

%00截断是文件后缀名就一个%00字节,可以截断某些函数对文件名的判断,在许多语言函数中,处理字符串的函数中0x00被认为是终止符,相当于sql注入中的#!

上传函数处理1.php%00.jpg时,后缀名是合法的jpg、png、gif格式,可以上传,在保存文件时,遇到%00字符,后面的jpg就不要了,文件后缀最终保存的后缀名为1.php

发现回显支持gif、png、jpeg!所以尝试用目录截断!

发现还是不行,应该是截断出现问题了,在去修改一下hex里面的,

文件上传建议去做  upload-labs  百度上都有

22、SQL注入1

点击source查看源码!

<?phpif ($_POST[user] && $_POST[pass]) {mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);mysql_select_db(SAE_MYSQL_DB);$user = trim($_POST[user]); //trim() 函数移除字符串两侧的空白字符或其他预定义字符!就是去空格!$pass = md5(trim($_POST[pass])); //被md5加密,所有这个只能在用户做手脚了!$sql="select user from ctf where (user='".$user."') and (pw='".$pass."')"; //后面的pw用%23给注释,主要构造前面的!echo ''.$sql;$query = mysql_fetch_array(mysql_query($sql));if($query[user]=="admin") { //只有user等于admin才给flag!echo "

Logged in! flag:********************

";

}if($query[user] != "admin") {echo("

You are not admin!

");

}

}echo $query[user];?>

Source

$sql="select user from ctf where (user='".$user."') and (pw='".$pass."')";

首先我们先看这个,看如何绕过,可以自己弄个记事本什么的自己来尝试一下,最好是在命令行中,在mysql中!

$sql="select user from ctf where (user='admin' or 1=1)%23 (后面的都不要了,被注释了)') and (pw='".$pass."')";

看这样就简单的闭合了,所有不要拿到题目就直接上手,先看sql语句,再看过滤机制,代码审计就这样的,看懂代码才是最重要的!直接去看一下行不行!

下面再尝试一下sqlmap跑一下!(使用kali中自带的,本机的卸载了)

因为是post传参,所有用burp抓包一下!

保存为1.txt,再用SQLmap跑!

payload:sqlmap -r 1.txt --dbs

payload:sqlmap -r 1.txt --tables -D sae-chinalover

下面的我也就不跑了,这里面有个是gbksqli的还有的是其他的!自己可以尝试玩玩!

这个是这一题的!

23、pass check

参看所给源码:

$pass=@$_POST['pass']; //post传参$pass1=***********;//被隐藏起来的密码

if(isset($pass)) //判断是否有pass参数传入

{if(@!strcmp($pass,$pass1)){ //比较两个字符串,也就是让post传进去的参数和pass1进行比较,要让这个成立也就输出flag了!echo "flag:nctf{*}";

}else{echo "the pass is wrong!";

}

}else{echo "please input pass!";

}?>

strcmp() 函数比较两个字符串。

注释:strcmp() 函数是二进制安全的,且对大小写敏感。

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

没思路,去找了strcmp漏洞!终于发现,这个函数,如果传入数组,那他会返回0,

要求传入字符串。如果传入非字符串呢?

结果函数报错!但是函数返回“0”  。 虽然报错了但函数的判断却是“相等”

如何传入非字符串?答案是传入数组

将变量的结尾加上“[ ]”  将其构造为数组。

尝试一下:成功!

又学习了!又找到一些图,看这些图我基本没懂,应该我是菜鸡吧!

如果哪位大佬刷到了,可以方便给我留个思路呗,感谢!

24、起个名字真难

参看所给源码:

{$one = ord('1');$nine = ord('9');for ($i = 0; $i < strlen($number); $i++) //循环传入的number

{$digit = ord($number{$i}); //进行循环过后的值if ( ($digit >= $one) && ($digit <= $nine) ) //如果 $digit>1或者小于9就false!

{return false;

}

}return $number == '54975581388';

}$flag='*******';if(noother_says_correct($_GET['key'])) //必须输入key=54975581388就输出flag!

echo $flag;else echo 'access denied';?>

要点就是要key=54975581388,输出flag!又被过滤数字,所有这个点我只有用16进制来进行绕过!

提交:(需要加0xccccccccc)因为是16进制!

25、密码重置

点进去发现用户名怎么都改不了的!

所以点击右键,点击检查:

根据题目改为admin

点击重置:flag出来

26、php 反序列化(暂时无法做)

参看所给源码:

}if (isset($_GET['pass'])) {$pass = $_GET['pass'];if(get_magic_quotes_gpc()){$pass=stripslashes($pass);

}$o = unserialize($pass);if ($o) {$o->secret = "*";if ($o->secret === $o->enter)echo "Congratulation! Here is my secret: ".$o->secret;else

echo "Oh no... You can't fool me";

}else echo "are you trolling?";?>

进行序列话:(解释我都写再里面了,注释方就是)

进行验证,看看序列话出来的值

最后验证:

知识点:

主要说的是面向对象,涉及到了魔法函数__construct(),和为变量$this,面向对象我博客首页有点知识点,可以自己看一下,不好的地方请指出,感谢!

27、SQL注入2

<?phpif ($_POST[user] && $_POST[pass]) {mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);mysql_select_db(SAE_MYSQL_DB);$user = $_POST[user]; //post传参$pass = md5($_POST[pass]); //md5加密$query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'")); //sql语句! 存储结果集if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) { //strcasecm比较两个字符串(不区分大小写):echo "

Logged in! Key: ntcf{**************}

";

}else{echo("

Log in failure!

");

}

}?>

Source

如果变量存在,并且,$pass与$query[pw]相等(不区分大小写)

$query[pw]) && (!strcasecmp($pass, $query[pw])

这个成立才输出flag。

这个主要是传进去的user用户里面的密码pass和md5加密的pass比较,所有需要绕过这个md5加密。

先看sql语句:

("select pw from ctf where user='$user'")

直接构造一下payload吧,利用union select联合查询:

pass=1对应的是md5(1)!只要md5()里面的数和pass所等于的对上就可以了

28、综合题2

29、密码重置2

看题目提示:

根据第一点找到管理员邮箱!

根据第二点vim的备份文件,先了解vim的备份文件!

看一些博客写的感觉太麻烦了,直白的理解就是再编辑vim文件时,或生成一个.xxx.swp的文件。

vim中的swp即swap文件,在编辑文件时产生,它是隐藏文件,如果原文件名是submit,则它的临时文件

就是.submit.swp!

所以这里的临时文件应该时..submit.php.swp

看截图中所框的,需要$token字段等于10,并且都为0!

所以这题出来了,结合上面的管理员邮箱地址!

30、file_get_contents

查看源码,因为一进去发现是空白页面,不是404,说明应该还是有东西的!

看到这个file_get_contents()函数,这个是post传参的,一般会结合伪协议一起使用,例如:file_get_contents("php://input")截取post传进来的参数值!

所以这一题应该就是利用伪协议中的php://input了!

出来了!

31、变量覆盖

还是代码审计题:

主要说的是两个$$符号,因为$$key= $value,当$value = name时, (就是给get传入参数)$$key = name 即$name =  meizijiu233!

所以就出来了!

变量覆盖,我们遇到两个了,一个是extract()函数,一个是现在这个双$$符号,还有两个分别为parse_str()函数、import_request_variables()函数,感兴趣可以自己去找找度娘!

结束!下面三题不能做了!所以CG-ctf之web结束,下期做攻防世界里面的!南邮这个算是入门,题目是前面难后面慢慢加大难度,

攻防世界过段时间继续更新!

mysql 南邮ctf_南邮ctf之web之wp相关推荐

  1. mysql 南邮ctf_南邮CTF平台WEB题writeup

    https://cgctf.nuptsast.com/login 1.签到题 F12查看网页源代码就有flag 2.md5 collision 附上题目给的源代码md51 = md5('QNKCDZO ...

  2. mysql 南邮ctf_南邮ctf web

    签到题 查看源码就可得到 md5 collision Poc:a=240610708 签到2 关键点:输入框设定了最大的长度限制 层层递进 在iframe标签属性都为0,查看链接,一直点下去发现404 ...

  3. mysql 南邮ctf_南邮ctf web题记录(上)

    1.签到题 f12看源码就行了. md5 collision 题目贴出了源码,按照题意,a不等于QNKCDZO但是md5与QNKCDZO的md5相等时就可以获得flag. 如果两个字符经MD5加密后的 ...

  4. 学计算机去南邮还是南信,南信大和南邮相比怎么样 南信大怎么样

    南信大和南邮相比怎么样,南京邮电大学简称南邮,南京信息工程大学简称南信大,都是南京的高校,那么南信大和南邮相比怎么样呢?南信大怎么样呢? 南信大和南邮相比怎么样 南信大,坐落于南京江北新区,全称为南京 ...

  5. 南邮计算机考研太难,南京邮电大学的学生要考研到清华的话,有多困难?(南理工、南邮计算机考研近五年分数线复试录取比例各多少?)...

    南京邮电大学考研计算机专业分数线 南邮网站上都有 复试线:信息安全300 计算机系统结构300 计算机软件与理论300 计算机应用技术295 软件工程300 计算机技术(专硕)310 软件工程(专硕) ...

  6. CTF学习-web解题思路

    CTF学习-web题思路 持续更新 基础篇 1.直接查看源代码 2.修改或添加HTTP请求头 常见的有: Referer来源伪造 X-Forwarded-For:ip伪造 User-Agent:用户代 ...

  7. koa+mysql+vue+socket.io全栈开发之web api篇

    原文地址:koa+mysql+vue+socket.io全栈开发之web api篇 目标是建立一个 web QQ的项目,使用的技术栈如下: 后端是基于koa2 的 web api 服务层,提供curd ...

  8. I春秋CTF训练营web题解(一)

    I春秋CTF训练营web题解(一) (1)include ==hint:没错!就是文件包含漏洞.== 点开链接,发现 通过源码可知可以提交一个path的变量,通过ctrl+f搜索allow_url_i ...

  9. ctf训练 web安全暴力破解

    ctf训练 web安全暴力破解 暴力破解漏洞介绍 穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕.若某个情况验证符合题目的全部条件, ...

最新文章

  1. requestAnimationFrame,Web中写动画的另一种选择
  2. Java-----applet小程序简介
  3. 启明云端分享|PX30核心板 怎么烧录
  4. 在 IE 中使用 HTML5 元素
  5. HTML+Javascript制作拼图小游戏详解(一)
  6. Security+ 学习笔记35 配置管理
  7. dede后台文章不能上传图片及缩略图的解决办法
  8. getAttribute实例例java,Java AttributedCharacterIterator.getAttribute方法代码示例
  9. 【腐蚀率预测】基于matlab GUI BP神经网络钢筋腐蚀率预测【含Matlab源码 107期】
  10. wps页眉怎么设置不同页码_如何设置 页眉页脚和页码
  11. 前端实现在线预览文档(pdf、doc文件)
  12. QString 转toLatin1 toUtf8 toLocal8Bit区别
  13. RIPS user guide for fresh
  14. android 正则句子按照标点符号断句,正则Pattern;
  15. ios小米手环6最新固件获取auth_key更换第三方表盘
  16. 新路由3 H大老毛子,2月20日padavan固件
  17. html给input添加边框,html input怎么设置虚线边框样式
  18. Delong test比较两个ROC曲线的性能
  19. 【特征工程概要】解释什么是特征,特征工程的步骤
  20. win11更新后没有声音?来这里一站解决

热门文章

  1. 如何查找一张照片的拍摄地点
  2. spring集成kafka,以及常见错误解决
  3. PVE系列教程(十九)、ubuntu22.04使用Nginx配置chevereto服务器
  4. 新版本如何给微信小程序配置vant-weapp
  5. 关于byte溢出问题
  6. 为何美国掌握了5G的核心技术,有一直在阻挠5G的推广
  7. 【张宇2021考研】数学一(样卷)扫描版
  8. Glog剖析之DLOG
  9. 一文读懂2016上半年ICT产业政策供给:过度与短缺
  10. 50+PSD用户界面Web设计素材