CTF-WEB进阶

CTF-WEB进阶

知识点1-弱类型问题

弱类型

=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较。

== 在进行比较的时候,会先将字符串类型转化成相同的的,再比较。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

当一个字符串被当作一个数值来取值时,其结果和类型如下:
如果该字符串没有包含 ‘.’,‘e’,‘E’ 并且其数值的值在整形的范围之内,该字符串被当作 int 来取值,其他所有情况下都被作为 float 来取值,该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用数值,否则其值为0。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

猜测key的值的类型为字符串,但是开始部分不是数字,使用HackBar Post一个message值:

message={‘key’:0}

即可获得flag。

例2

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

还是一样的题目,但是key的值发生了改变,无法使用例1的方法。

这种情况我们可以用穷举法,直接爆破一下:

message={‘key’: p a y l o a d payload payload}

弱类型-小结

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

知识点2-哈希(md5)绕过问题

我们想要绕过哈希验证,有以下几种方法:数组、0e开头的md5、字符串(md5碰撞)等等。

0e开头的md5

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

找到一对科学计数法形式md5值相等的字符串,即可实现绕过。

https://blog.csdn.net/weixin_45897324/article/details/108961503

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数组

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

直接给一对数组,即可实现绕过。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

演示数组,如何实现强相等
因为数组的md5值皆为null,所以两个不一样的数组结果都相等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在URL上传两个数组,示例如下:

http://IP地址:端口/文件名.php?a[]=a1&a[]=a2

如果想要自定义键值对的键,可以在 [ ] 中写入 :

http://IP地址:端口/文件名.php?a[1]=a1&a[2]=a2

例1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解法

?a[3]=需注入payload&a[4]=需注入payload&a[0]=正常数据&a[1]=正常数据

http://IP地址:端口/文件名.php?a[3]=a1&a[4]=a2&a[1]=a3&a[2]=a4

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

既可以绕过数组的0,1元素的检查,又可以取前两个元素做拼接,执行命令。

字符串(MD5碰撞)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

MD5碰撞
两个不同的东西拥有相同的md5:

https://www.jianshu.com/p/c9089fd5b1ba

例1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个例子,我需要关注的代码,简化如下:

<?php $md5= $_GET['md5']; if ($md5==md5($md5))

我们只需给一个开头是0e形式的字符串,其md5值也是0e形式的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

知识点3-变量覆盖

变量覆盖,则是用传参的值替换掉原有的变量的值。

一般会考到的两个函数Extract(),Parse_str()

Import_requests_variables() //deprecated in php>=5.4.0

Import_requests_variables() 在php5.4.0之后就被废弃了

Extract()函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例1

函数extract()重新给$arr 赋值
之后还有一句动态函数调用,可以通过此处进行攻击

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

$arr=(‘d’=system)
就可以通过post一个命令给a,实现攻击

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Parse_str()函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

例1

函数parse_str()重新给$arr 赋值,
之后还有一句动态函数调用,可以通过此处进行攻击。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因为arr的值为d=system
所以parse_str($arr) 则会输出 $d=system
因为最后一句的动态函数调用,可以post一个a参数,进行攻击。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

综合案例

分析代码,需要传一个值id, i d 会被进行重新赋值后面的 i f 判断 id会被进行重新赋值 后面的if判断 id会被进行重新赋值后面的if判断a的0号元素,不能等于 ‘QNKCDZO’ ,但是md5值,要与 'QNKCDZO’的md5值相等。而 ‘QNKCDZO’ 的md5值是0e开头的科学计数法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

构建payload

?id=a[0]=s878926199a

知识点4-命令执行漏洞

​ 命令执行漏洞是指应用有时需要调用一些执行系统命令的函数,如:system()、exec()、shell_exec()、eval()、passthru()等函数,代码未对用户可控参数做过滤,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。

如下:

cp /tmp/sourcefile /app/public/#{userinput}.jpg

漏洞位点

程序过滤不严谨,导致用户可以将代码注入并执行。
高危函数:eval()、assert()、preg_replace()、call_user_func()等等

对于执行命令的函数,参数过滤不严谨,导致直接命令执行。
高危函数:system(0)、exec()、shell_exec()、passthru()、pctnl_exec()、popen()、
proc_open() 注:反引号是shell_exec() 的别名

PHP:exec、shell_exec、system、passthru、popen、proc_open等
ASP.NET:System.Diagnostics.Start.Process、System.Diagnostics.Start.ProcessStartInfo等
Java:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec等

漏洞利用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正常情况下,该代码中的 ip 参数是直接通过 GET 方式传入并直接带入了命令中,
这是可以尝试使用分隔符并添加一条命令。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

知识点5-联合执行

分号

cmd1; cmd2; cmd3

cmd1将首先运行,不管cmd1运行成功还是出现错误,cmd2都会在它之后运行,当cmd2命令完成时,cmd3将会运行。

&&

有时候希望确保Linux命令中,只有在前一个命令成功结束时,下一个命令才会运行。这就是逻辑和运算符&&出现的地方:

cmd1 && cmd2 && cmd3

当第一个命令出现错误时,&&分隔的命令会停止执行后面的命令。

| |

可以使用逻辑操作符( || )运行命令行,但是只有在前一个命令出现错误时才运行下一个命令:

cmd1 || cmd2 || cmd3

如果cmd1运行失败,则运行cmd2。如果cmd2运行成功,cmd3将不会运行。

|

前一个命令的结果作为后一个命令的参数:

Cmd1 | cmd2

例如:echo xxx | base64

换行符

%0a;%0d,但不是所有编程语言中都能用于联合执行。

知识点6-Bypass

过滤空格

${IFS}
$IFS$9
<
<>
{cat,flag,php} //用逗号实现了空格功能,需要用{}括起来
%20
%09

过滤某关键字

ca\t yln\g.php //反斜杠绕过
cat yl’'ng.php //两个单引号绕过
echo “Y2F0IHkxbmcucGhw” | base64 -d | bash //base64编码绕过
echo “6361742079316E672E706870” | xxd -r -p | bash //hex编码绕过
cat yl[n]g.php //用[]匹配
cat yln* //用*匹配任意
cat yln?
cat yl{a…z}g
cat yl{a-z}g

内联执行
cat ‘ls | grep fla’ //查看flag

变量
a=fl; b=ag; cat a a ab.php

知识点7-代码执行漏洞

代码执行漏洞,由于服务器对危险函数过滤不严,导致用户输入的一些字符串可以被转换成代码来执行,从而造成代码执行漏洞。

常见代码执行函数:
PHP: eval、assert、preg_replace()、+/e模式(PHP版本<5.5.0)
Javascript: eval
Vbscript:Execute、Eval|
Python: exec

${ }执行代码

<?php
${phpinfo()};
?>

eval

<?php
eval('echo "hello";');
?>

assert

<?php 
assert($_POST['a']);
?>

洞。

常见代码执行函数:
PHP: eval、assert、preg_replace()、+/e模式(PHP版本<5.5.0)
Javascript: eval
Vbscript:Execute、Eval|
Python: exec

${ }执行代码

<?php
${phpinfo()};
?>

eval

<?php
eval('echo "hello";');
?>

assert

<?php 
assert($_POST['a']);
?>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值