WEB_代码审计

代码审计

Bugku

1.decrypt

进入场景 下载看到源代码

通过审计

密钥为 $key 之位MD5加密’ISCC '后的 729623334f0aa2784a1599fd374c120d

$char 为32为密钥循环拼接。

最后加密方法为加密方法 将data和密钥的每一位ascii值相加后除以128得余数 的值 再 返回为字符串 拼接起来

找个脚本

<?php

    $key = md5('ISCC');

    $x = 0;

    $base64_str = 'fR4aHWwuFCYYVydFRxMqHhhCKBseH1dbFygrRxIWJ1UYFhotFjA=';

    $data = base64_decode($base64_str);

    $len = strlen($data);

    $char = '';

    $str = '';

    $klen = strlen($key);

    for ($i=0; $i < $len; $i++) {

        if ($x == $klen)

        {

            $x = 0;

        }

        $char .= $key[$x];

        $x+=1;

    }

    for ($i=0; $i < $len; $i++) {

        $str .= chr(ord($data[$i]) - ord($char[$i]));

        print($str."\n");

       

    }

?>

跑出来了

2. 各种绕过哟

进入场景

通过简单审计发现要只要使unamesha1的值与passwdsha1的值相等即可,但是同时他们两个的值又不能相并且发送passwd[]=2 postdata 请求即可

需要构造http://120.24.86.145:8002/web7/?uname[]=1&id=margin   并发  passwd[]=2 postdata 请求即可得到flag

3. 闪电十六鞭

简单审计要get上传要符合字符长度        $hack=mlag;$hack{0}=f;111111111111;?><?=$$hack;?>

得到flag

4. file_get_contents

简单审计需要ac=f出flag 还有file_get_contents()绕过用php:filter-php://data-file://

找ac评论区说有个flag.txt文件访问得到bugku

现在直接构造ac=f

Payload;?ac=bugku&f=flag.txt得到flag

另一种思路

5. No one knows regex better than me

简单审计

1.本题主要使用的是preg_match_all()函数匹配,其中只要我们在变量second中含有Yeedo,wants,a,girl,friend,or,a,flag等字符就可以匹配成功

2.传入的参数中不要有flag或两个连续的点(…)时,即可跳出匹配,这两里的话输入单个点的话,会被转义

3. 两个反斜杠(\),而php在解析字符串的过程中,会把两个反斜杠(\)转换成一个(),所以这里的管道符(|)没有被解析,就会和后面的编码组合成被匹配的对象

在Php和Python中的编码中

(\+数字)-------->属于八进制编码

(\x+数字)------->属于十六进制编码

构造:/?zero=ZmxhZw==&first=aaaa|.php得到flag

6.变量1

简单审计要用get方式上传srgs匹配正则 但题目提到变量我们直接构造payload:srgs=globals得到flag

7.矛盾

简单审计题目要求unm不能为数字又要他等于1矛盾

==看到第一时间想到弱类项绕过

构造py ?unm=1admin 得到flag

8.源代码

题目提示说源代码

像是url拿去解码得到源代码

然后更具下一句拼接在一起

上传得到flag

9.shwll

进入场景什么也没有

只剩下开头提示的一句话过狗 审计 传个s过去 拼接过waf 直接用sysmat等等命令获取flag

10.点login没反应

进入场景

像题目说的一样什么也点不动 f12发现一个超链接

进入看到一串字符 好像要传参

果然发现源代码

1.审计发现要使传入的参数是空的,cookie的值反序列化后等于key,则显示flag

cookie的值反序列化  构造反序还是不太会

2.简单审计使cookie反序==key才能得到flag;Isset判断上传是否空 是则马上执行elseif;先要得到cookie反序 因为要等于key所以拿他去

然后抓包写入ckool 得到flag

攻防世界

1.fileclude

进入场景看到一串代码

搜索知道File_get_contents()把整个文件读入一个字符串可以通过php://input绕过

通过审计知道要使file2放入该函数并且要求返回值为hello ctf  file1被放入index中需要获取flag.php文件中内容用php.filter伪协议读取源代码—构造

?file1=php://filter/convert.base64-encode/resource=flag.php&file2=data://text/plain,hello ctf   得到文件base64

解密得到flag

2. fileinclude

进入场景看到一段英语翻译 知道绝对路径

F12 查看源代码 发现一段代码

审计知道cookie值传入$lan而$lan可控 $lan又包含在include用php.filter读取base64源码 抓包修改cookie得到base64

转码得到flag

3. file_include

题目描述:怎么读取文件呢?

进入场景

审计代码后 感觉是用 php://filter  convert.base64-encode 文件读取 flag.php 试一试提示这个

通过搜索知道应该是黑名单检测敏感字符串。 尝试出read base64等给禁了(在黑名单中)

尝试其他php://filter过滤器 得到flag

4. easyphp

进入场景

is_numeric检测变量是否为数字或数字字符串

is_array是一个函数,若变量为数组类型则返回true,否则返回false,

array_search ()函数是PHP的一个内置函数,用于在数组中搜索特定的值,如果找到该值,它将返回相应的键。

构造

?a=1e9&b=53724&c=%7B%22m%22%3A%222033%2500%22%2C%22n%22%3A%5B%5B1%5D%2C0%5D%7D

语句得到flag

5.web2(难)

进入场景 看到题目提示逆向解密

代码审计

strlen() 函数返回字符串的长度

strrev()  反转字符串顺序

   

substr() 函数返回字符串的一部分。substr(string,start,length)

注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。

<?php echo substr("Hello world",6); ?>从字符串中返回 "world":

ord() 函数返回字符串中第一个字符的 ASCII 值。

chr() 函数从指定 ASCII 值返回字符。并可以指定ASCII是十进制或是十六进制或是八进制。

 “.” 是字符运算符,作用是把两个字符串连接起来,其使用方法:首先创建一个PHP示例文件;然后定义两个变量;最后通过“$result.$result”方式将两个变量连接起来即可

str_rot13() 函数对字符串执行 ROT13 编码。

ROT13 编码是把每一个字母在字母表中向前移动 13 个字母得到。数字和非字母字符保持不变。

由此构造逆向代码 得到flag

6.warmup

进入场景 看到一张表情包 f12看到注释文件

进入看看

发现代码 仔细观察发现另一个php文件进入看看 看到题目提示flag就在ffflllaaaggg中

现在审计代码

mb_substr()截取问号前面的 返回字符串的一部分

mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置

is_string (); 判断是不是字符型 变量是否为字符串

isset (); 检测变量是否设置并且非null

checkfile(); 检测传入函数是否为空 检测文件是否为存在

empty(); 检测一个变量是否为空

in_array();搜索数组是否存在指定的值

知道要满足2的任何一个条件就可得到flag

构造?file=source.php?/../../../../ffffllllaaaagggg

7.web_php_include

进入场景

审计代码发现是限制php上传 可以通过php伪协议绕过 得到flag

用deta协议

用cat进去看注释得到flag

8.php_rce

进入场景 查看源代码发现三个网站其中,一个跳转一个拒绝来访问,还有一个显示一串看不懂的东西 琢磨半天没发现什么东西

看首页

百度搜索thinkphp v5

漏洞分析

程序未对控制器进行过滤,导致攻击者可以用 \(斜杠)调用任意类方法。

/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=

其中:s[1][]=(Linux指令)

直接构造payload 寻找flag

从目录中看到flag 接下来用cat进入 得到flag

9.ics_05

进入场景 点击了很多东西 发现只有设备维护中心可以点击

常规f12发现一个函数 常规f12发现一个函数 ?page=index page这个get参数
自然联想到可能存在利用文件包含读取网页源码的漏洞


利用php内置filter协议读取文件的代码

?page=php://filter/read=convert.base64-encode/resource=index.php得到加密base64

解密得到php代码

   基础知识

strpos() 函数查找字符串在另一字符串中第一次出现的位置。 注释: strpos() 函数对大小写敏感

ctype_alnum()函数PHP中的字符类型(CType)函数,用于检查给定的字符串是否包含字母数字字符。

preg_replace 函数执行一个正则表达式的搜索和替换返回值 如果 subject 是一个数组, preg_replace() 返回一个数组, 其他情况下返回一个字符串。     如果匹配被查找到,替换后的 subject 被返回,其他情况下 返回没有改变的 subject。如果发生错误,返回 NULL

语法

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

搜索 subject 中匹配 pattern 的部分, replacement 进行替换。

参数说明:

    $pattern: 要搜索的模式,可以是字符串或一个字符串数组。

    $replacement: 用于替换的字符串或字符串数组。

    $subject: 要搜索替换的目标字符串或字符串数组。

    $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。

    $count: 可选,为替换执行的次数。

/e 修正符使 preg_replace() replacement 参数当作 PHP 代码(在适当的逆向(该函数漏洞)

引用替换完之后

提示:要确保 replacement 构成一个合法的 PHP 代码字符串,

否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。

仔细审查发现 输入的参数有三个,并且会代入到一个preg_replace函数中

先要构造伪造ip

preg_replace函数/e漏洞:查看所有文件

payload/index.php?pat=/abc/e&rep=system("ls")&sub=asdsadasabc

Cd s3chahahaDir 这个文件夹下查看内容

cd命令为 system("cd%20s3chahahaDir%26%26%20ls")

发现可以进行命令执行,并且发现可疑目录,进入目录并查看文件
payload/index.php?pat=/abc/e&rep=system("cd%20s3chahahaDir%26%26%20ls")&sub=asdsadasabc

进入文件 发现flag文件

使用cat命令读取flag.php中的内容

命令代码:system("cat%20s3chahahaDir/flag/flag.php")

?pat=/abc/e&rep=system("cat%20s3chahahaDir/flag/flag.php")&sub=asdsadasabc得到flag

10.php2

进入场景—看到一句话:您能访问此网站吗?(Can you anthenticate to this website?)

常规操作f12看原代码没有发现-进入indexphp也没有反应用目录扫描软件发现index.phps进入发现源代码

在此之前搞清楚urldecode urlencode的区别

urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%。 urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符

.浏览器本身会进行因此url解码,这里相当于进行两次url解码,只需要让id后的值等于admin进行两次url编码,为了方便我们可以将a进行两次编码

通过审计发现要使admin不等于get【id】经过urldecode()后相等构造id=%2561dmin得到flag

Buuctf

1. BackupFile

打开靶机只有一句话要求我们找出源码,扫描后台工具可以用御剑或者dirsearch来进行扫描

这里使用dirsearch来扫描后台文件

常见的备份文件后缀名有 .git .svn .swp .~ .bak .bash_history

对这两个进行检验看看那个是

对下载的源码进行代码审计

源码显示要传递一个key

当key=str时flag值出现

而且注意到key==str是弱类型

构造key=123即可出现flag

2. havefun

打开页面发现一只小猫咪

页面没有其他东西了F12查看源码

当传递的值cat==dog时会出现东西

获得falg值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值