当前位置:   article > 正文

36Dweb整理_ctfshow 36d杯你没见过的注入

ctfshow 36d杯你没见过的注入

36Dweb整理

前言

因为5.1那天参加了协会内部的训练赛,没有去做36D的题目,赛后看了师傅们的WP跟着复现了一下,发现还是有很多要学习的地方

你没见过的注入

知识点

文件类型注入,exiftool工具的使用

解题

一开始以为是文件上传,其实不是,是文件类型注入,通过修改图片的type来完成注入(这里用到了exiftool工具)

可以猜测语句是 insert into file values (“filename”,“filetype”,“fileextra”),没有作任何过滤,可以写一句话进去

在这里插入图片描述
一般写成16进制形式,避免语句本身的单引号双引号对拼接造成干扰

在这里插入图片描述
一开始我觉得直接写16进制能被识别吗,后来我本地测试了一下,写进去的16进制会自动被计算机识别出ASCII

怎么把这个语句写到图片属性里面呢?用到exiftool工具:

语法:

exiftool -overwrite_original -comment="y1ng\"');select 0x3C3F3D60245F504F53545B305D603B into outfile '/var/www/html/1.php';--+"
  • 1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h7UHcXLX-1589008183581)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\image-20200507203414101.png)]

然后把7.jpg上传即可,接下来就是蚁剑get了。此题重点在找到注入点

你取吧

知识点

动态拼接,特殊webshell, php代码反混淆

解题

在这里插入图片描述

源代码是这样的

解法1 就是直接用P牛介绍的无字母马 传上去

解法2 利用到这个$hint 让eval把 h i n t 打 出 来 获 得 h h h . p h p 的 b a s e 64 编 码 后 的 代 码 , 主 要 就 是 怎 么 拼 接 hint打出来 获得hhh.php的base64编码后的代码,主要就是怎么拼接 hinthhh.phpbase64hint

因为给了$_这个数组,我们利用它来拼接,数组中 { }可以替代 [ ] 。
在这里插入图片描述
然后得到了代码。但是代码是php混淆的,这里用到了反混淆工具 ,来拿到反混淆之后的代码。

使用说明:
在这里插入图片描述

剩下的就是getflag了

wust朴实无华

知识点

PHP浮点数精度问题、md5、弱类型、命令执行绕过

解题

第一层是用到浮点数精度问题

example:

在这里插入图片描述
用到这个来绕过

第二层

在这里插入图片描述

找到一个 字符串 弱等于 两次md5加密之后的。 只能找到原本这个字符串带上0e,且两次md5后还是0e开头的,利用弱比较相等。

第三层

在这里插入图片描述

很多过滤,但是很容易绕

ca\t<f\ag.p\hp 空格绕过的方法有很多 这里可以用< 也利用到了斜杠

最后的payload: ?num=1000000000000000.00000000000000010&md5=0e1138100474&get_flag=ca\t<flag.ph\p

All_you_want

知识点

利用日志写入一句话木马、(日志包含)源代码泄露、linux查找命令。

解题

这个点我还是第一次见(太菜了 , 记录一下

搜先F12 提示用 scanner 扫描器

然后找到index.php.bak 备份文件 读取源代码

在这里插入图片描述

很难直接猜到flag文件到底在哪,所以我觉得直接利用file拼接是很困难的。

先读取它的日志文件 all_info_u_want.php?file=…/…/…/…/…/var/log/nginx/access.log

/var/log/nginx/access.log 主要就是记录一下访问信息,user-agent的内容也会被记录到文件里面,那如果我们在user-agent里面写入 一句话 ,就可以蚁剑连接 getshell了 (这里用bp抓包之后 然后写,我的火狐插件似乎不是很好用)这个flag比较难找,在这里插入图片描述用到了linux的这个命令,问题是 蚁剑连接上去的话,好像是没权限用这个命令的, 可以反弹shell,然后执行这个命令(因为没有自己的服务器,弹不了23333)要尽快搞一台服务器玩玩。

Login_onlg_for 36D

知识点

盲注、fuzz测试、\的利用 (吞引号

解题

在这里插入图片描述

题目打开是这样的。应该就是要弄到admin的密码,然后登陆就行了,还给了语句

select * from 36d_user where username=‘ u n a m e ′ a n d p a s s w o r d = ′ uname' and password=' unameandpassword=passwd’;

简单试了一下万能密码,被ban了,然后fuzz测试一下,过滤了哪些字符

fuzz测试步骤 这里简单说一下:先用bp抓个包,然后 用 intruder模块。

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

在这里插入图片描述

然后就可以start attack了

在这里插入图片描述

可以根据回显的长度来判断哪些被ban了。很多被ban了

比如空格 双引号 单引号 分号 ascii等等

select * from 36d_user where username=‘ u n a m e ′ a n d p a s s w o r d = ′ uname' and password=' unameandpassword=passwd’;

结合这个语句,这里可以用到 \ 来吞掉$uname后面的‘ 语句就变成

select * from 36d_user where username=‘xxxx ’ and password=’$passwd’;

在这里插入图片描述

红色框框整题的值就成username了,然后xxxxx可以是我们可控的SQL注入语句 ,if /**/ regexp ^ or # sleep()都没被ban 掉

最后的脚本:
在这里插入图片描述

binary 可以不区分大小写,^ 是开头匹配

在这里插入图片描述

跑成这样 我估计是网络问题 ,毕竟我用的timeout来作为条件,有时候网路会有些延迟把。密码最后还是跑出来了。
在这里插入图片描述

登陆即可。

给你shell

知识点

代码审计、爆破、fuzz、RCE

解题

F12审计元素,发现两个提示

在这里插入图片描述

通过?view_source参数拿到第一层的源码

在这里插入图片描述

审计一下,先判断cookie的secret值是不是为空,如果为空,则setcookie,不为空,则为 j s o n 变 量 赋 值 。 然 后 把 json变量赋值。然后把 jsonjson变量扔到checkCookie()函数,这个函数主要是对格式要求做一些检查,如果符合,就返回True。然后三目运算,把 j s o n 变 量 d e c o d e 之 后 , 赋 值 给 json变量decode之后,赋值给 jsondecodeobj,然后在判断$obj[‘secret’] 是否等于 $flag_md5,如果等于,就把shell路径告诉我们。

havefun()函数,主要是把 f l a g m d 5 加 密 之 后 , 每 一 位 与 0 x C 0 作 逻 辑 与 运 算 , 这 里 我 们 其 实 可 以 反 推 flag md5加密之后,每一位 与 0xC0 作 逻辑与运算,这里我们其实可以反推 flagmd50xC0flag_md5每一位的类型的,看了ASCII码表之后我们知道,如果是字母,与 0xC0 作与运算 结果是64 ,如果是数字,与0xC0 作与运算 得出结果为0。我们只能根据回显来判断$flag_md5 每一位的类型(是数字还是字母)但无法得出具体的值,所以只能用到弱类型比较,来绕过去。所以先来看一下回显:
在这里插入图片描述

前三位是0,所以$flag md5加密后,前三位肯定是数字,后面是字母,所以我们只要保证 cookie的secret值 前三位数字和这个一样就OK了,所以我们需要伪造JSON,burpsute抓个包看一下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FuM4g3JN-1589008183595)(C:\Users\86186\AppData\Roaming\Typora\typora-user-images\image-20200508115656398.png)]

注意这里的secret值是 字符串类型 而不是 int类型 ,我们要构造的是 int类型 因为 “115” != “115DSFASFF” 而 115 == “115DSFASFF” 。

然后用burpsute 爆破一下

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

在这里插入图片描述
然后在115这里就爆破出来了,给了第二层的shell

在这里插入图片描述
结合前面的 flag in /flag.txt 我们的目的肯定是想读它,但是有waf,这里需要fuzz一下,过滤了哪些

在这里插入图片描述

发现过滤了很多,括号给ban了,很多函数都用不了了,分号 引号 空格 也被过滤了。

但是,取反~ 和 require没被过滤掉,require是不需要括号的,我们可以想办法包含/flag.txt 。

在这里插入图片描述

再就是解决分号的问题了, 我们可以利用php短标签 和单行模式
在这里插入图片描述

只有一行代码 不需要; 分号说白了就是把语句隔开的。

注意到eval语句里面有SESSION,所以先想办法逃逸出来,最后构造的payload:

?code=]=1?><?=require~%d0%99%93%9e%98%d1%8b%87%8b?>

  • 1
  • 2

1后面的?> 用来闭合开始<?php ,<?= 和 ?>形成单行模式 等效于 echo require

本地测试如下:

在这里插入图片描述

然后读到flag.txt的内容 , 告诉我们 flag在 /flag里面,同理 在构造一下,读 /flag。

总结

没有去打这个很遗憾,不过打了估计也是被吊锤,还是学了很多新东西(对我来说)未来的路很长,多就是少,少就是多。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/807648
推荐阅读
相关标签
  

闽ICP备14008679号