File
文件分离
1.Binwalk
是一个自动提取文件系统,该工具可以自动完成指定文件的扫描,发现潜藏在文件中中所有可疑的文件类型以及文件系统。
- 命令
binwalk +file
扫描发现目标文件中包含的所有可识别的文件类型binwalk +file -e
提取文件
提取成功的话则会生成一个文件名extracted目录,目录中存放的就是提取的文件
SSH
SMB
深入挖掘
MD5绕过
ctfhub : md5 collision
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
攻击者可以利用这一漏洞,通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,尽管并没有真正的密码。
原值 和 他0e开头的md5
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1091221200a
0e940624217856561557816327384675
s1665632922a
0e731198061491163073197128363787
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
s878926199a
0e545993274517709034328855841020
以下值在sha1加密后以0E开头:
- aaroZmOk
- aaK1STfY
- aaO8zKZF
- aa3OFF9m
- 0e1290633704
- 10932435112
不可以用数组绕过的强比较
if(isset($_GET['a']) and isset($_GET['b']))
{
if($_GET['a']==$_GET['b'])
die();
else if(is_array($GET['a']) || is_array($GET['b']))
die();
else if(sha1($_GET['a'])===sha1($_GET['b']))
echo $flag;
else
die();
}
像这样,其中is_array()函数用来检测是否为数组,发现我们没法用数组进行绕过。
搜索发现SHA-1算法已经碰撞成功,原理是构建了两个SHA-1值相同但不一样的pdf文件1.pdf和2.pdf然而如何比较这两个文件的不同之处到底在哪里呢?
通过cmp命令
cmp -l 1.pdf 2.pdf
发现不同的部分在前320个字节。
但是如何把这个部分拿去登录呢?
将两个文件的前320个字节用url编码(urlencode),可以构造如下:
a=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01%7FF%DC%93%A6%B6%7E%01%3B%02%9A%AA%1D%B2V%0BE%CAg%D6%88%C7%F8K%8CLy%1F%E0%2B%3D%F6%14%F8m%B1i%09%01%C5kE%C1S%0A%FE%DF%B7%608%E9rr/%E7%ADr%8F%0EI%04%E0F%C20W%0F%E9%D4%13%98%AB%E1.%F5%BC%94%2B%E35B%A4%80-%98%B5%D7%0F%2A3.%C3%7F%AC5%14%E7M%DC%0F%2C%C1%A8t%CD%0Cx0Z%21Vda0%97%89%60k%D0%BF%3F%98%CD%A8%04F%29%A1
b=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01sF%DC%91f%B6%7E%11%8F%02%9A%B6%21%B2V%0F%F9%CAg%CC%A8%C7%F8%5B%A8Ly%03%0C%2B%3D%E2%18%F8m%B3%A9%09%01%D5%DFE%C1O%26%FE%DF%B3%DC8%E9j%C2/%E7%BDr%8F%0EE%BC%E0F%D2%3CW%0F%EB%14%13%98%BBU.%F5%A0%A8%2B%E31%FE%A4%807%B8%B5%D7%1F%0E3.%DF%93%AC5%00%EBM%DC%0D%EC%C1%A8dy%0Cx%2Cv%21V%60%DD0%97%91%D0k%D0%AF%3F%98%CD%A4%BCF%29%B1
双重MD5加密后0E开头:
- 7r4lGXCH2Ksu2JNT3BYM
- CbDLytmyGm2xQyaLNhWn
- 770hQgrBOjrcqftrlaZk
万能密码
**ffifdyop**
经过md5加密后:276f722736c95d99e921722cf9ed621c
再转换为字符串:'or'6<乱码> 即 <span>'or'6</span>6�]��!r,��b
用途:
select * from admin where password=''or'6<乱码>'
就相当于select * from admin where password=''or 1 实现sql注入
DIR 目录
sudo su
apt-get update
kali中安装命令:apt-get install dirsearch
安装完成后输入命令:
(1)可以使用命令 dirsearch -u http://ip -e*
(2)也可以使用下面的命令:
git clone https://github.com/maurosoria/dirsearch.git
然后在家目录进入dirsearch
cd dirsearch
然后再使用命令:
python3 dirsearch.py -u http://IP -e*
PHP杂项
php3,php5,pht,phtml,phps都是php可运行的文件扩展名
eval()
- 执行字符串作为PHP代码。这个函数非常危险,因为它可以执行任意代码,常被用于Web Shell。intval()
是一个 PHP 函数,用于将变量转换为整数。isset()
是一个PHP函数,用于检查变量是否已设置并且不是 null。如果变量已设置并且不为 null,则返回 true,否则返回 false。exec()
- 执行外部程序,并显示输出。它可以用来执行系统命令。system()
- 与exec()
类似,但它直接将执行结果输出到浏览器。shell_exec()
- 执行命令并通过字符串返回输出,不直接输出到浏览器。passthru()
- 执行外部命令并直接将原始输出传递给浏览器。popen()
- 打开进程文件指针。proc_open()
- 类似于popen()
,但提供更细粒度的控制。file_get_contents()
- 读取文件内容到字符串,常用于读取本地或远程文件。file_put_contents()
- 将一个字符串写入文件,常用于文件写入操作。fopen()
- 打开文件或URL。fclose()
- 关闭一个打开的文件指针。fwrite()
- 写入文件(文件必须是以写入模式打开的)。fread()
- 读取文件(文件必须是以读取模式打开的)。include()
- 包含并运行指定文件。require()
- 与include()
类似,但在文件无法加载时会产生致命错误。include_once()
- 仅在脚本执行期间包含并运行一次文件。require_once()
- 与include_once()
类似,但在文件无法加载时会产生致命错误。unserialize()
- 从已存储的表示中创建PHP的值。serialize()
- 产生一个可存储的值的表示。base64_encode()
- 数据编码为base64格式。base64_decode()
- 解码base64编码的数据。urldecode()
- 解码已编码的URL字符串。urlencode()
- 编码URL字符串。json_encode()
- 对变量进行JSON编码。json_decode()
- 对JSON格式的字符串进行解码。md5()
- 计算字符串的MD5散列。sha1()
- 计算字符串的SHA-1散列。hash()
- 对字符串使用给定的散列算法。preg_match()
- 执行一个正则表达式匹配。preg_replace()
- 执行一个正则表达式的搜索和替换。str_replace()
- 子字符串替换。strpos()
- 查找字符串首次出现的位置。stripos()
- 不区分大小写地查找字符串首次出现的位置。strstr()
- 查找字符串的首次出现并返回剩余部分。stristr()
- 不区分大小写地查找字符串的首次出现并返回剩余部分。explode()
- 使用一个字符串分割另一个字符串。implode()
- 将一个一维数组的值转化为字符串。trim()
- 去除字符串首尾处的空白字符。ltrim()
- 去除字符串开头的空白字符。rtrim()
- 去除字符串末端的空白字符。str_pad()
- 把字符串填充为新的长度。str_split()
- 将字符串转换为数组。substr()
- 返回字符串的一部分。strcmp()
- 二进制安全字符串比较。strcasecmp()
- 不区分大小写的字符串比较。ord()
- 返回字符的ASCII值。chr()
- 从指定的ASCII值返回字符。var_dump()
- 打印变量的相关信息,常用于调试。print_r()
- 打印关于变量的易于理解的信息。gettype()
- 获取变量的类型。escapeshellcmd()
- 对命令行字符串进行转义,防止命令注入。escapeshellarg()
- 对命令行参数进行转义。ini_get()
- 获取一个配置选项的值。ini_set()
- 为一个配置选项设置值。set_time_limit()
- 设置脚本最大执行时间。header()
- 发送原生HTTP头。headers_sent()
- 检查HTTP头是否已被发送。http_response_code()
- 获取或设置HTTP响应代码。session_start()
- 启动新会话或者重用现有会话。session_destroy()
- 销毁一个会话中的所有数据。session_id()
- 获取或设置会话ID。setcookie()
- 发送一个Cookie。setrawcookie()
- 发送一个没有URL编码的Cookie。parse_url()
- 解析URL并返回其组成部分。parse_str()
- 将字符串解析成多个变量。http_build_query()
- 生成URL-编码的查询字符串。curl_init()
- 初始化一个cURL会话。curl_setopt()
- 设置一个cURL传输选项。curl_exec()
- 执行一个cURL会话。curl_close()
- 关闭一个cURL会话。simplexml_load_string()
- 将XML字符串载入对象。simplexml_load_file()
- 将文件载入对象。json_last_error()
- 返回最后发生的JSON错误。libxml_use_internal_errors()
- 禁用标准的libXML错误,并启用用户错误处理。libxml_get_errors()
- 获取libxml错误。openssl_encrypt()
- 对数据进行加密。openssl_decrypt()
- 对数据进行解密。mcrypt_encrypt()
- 加密数据(注意:mcrypt扩展在PHP 7.1.0中已被废弃)。mcrypt_decrypt()
- 解密数据(注意:mcrypt扩展在PHP 7.1.0中已被废弃)。password_hash()
- 创建密码的哈希(散列)。password_verify()
- 验证密码是否和哈希匹配。crypt()
- 单向字符串散列。rand()
- 生成随机整数。mt_rand()
- 生成更好的随机数。array_filter()
- 用回调函数过滤数组中的元素。array_map()
- 为数组的每个元素应用回调函数。array_reduce()
- 用回调函数迭代地将数组简化为单一的值。array_merge()
- 合并一个或多个数组。array_intersect()
- 计算数组的交集。array_diff()
- 计算数组的差集。sort()
- 对数组排序。ksort()
- 对数组按照键名排序。usort()
- 使用用户自定义的比较函数对数组中的值进行排序。preg_split()
- 通过一个正则表达式分割字符串。preg_grep()
- 返回匹配模式的数组条目。preg_quote()
- 转义正则表达式字符。htmlspecialchars()
- 将特殊字符转换为HTML实体。htmlentities()
- 将所有适用的字符转换为HTML实体。strip_tags()
- 从字符串中去除HTML和PHP标签。addslashes()
- 使用反斜线引用字符串。
if(intval($num) < 2020 && intval($num + 1) > 2021){
echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>";
}else{
die("金钱解决不了穷人的本质问题");
}
我们需要传递一个 字符串 作为 $num 的值使得判断语句成立以 使得程序继续进行,而不是因为 die() 函数 的执行而停止。
从逻辑上来说,没有一个数值(字符串形式)可以使得 $num 满足判断语句。但请不要忘记,intval() 在某些 PHP 版本中 对使用科学计数法的数值(字符串)无法正常解析,这也就产生了绕过的可能。
绕过
$num 在第二个 intval() 函数中以 表达式 的形式出现,字符串在与数值进行运算时,PHP 会将字符串转化为数值。使用科学计数法的数值(字符串) 在某些版本中无法被 intval() 正确解析,但 PHP 是认得它的,在与数值 1 进行加法运算时,$num 将被 PHP 正确解析。于是,我们尝试将 $num="1e4"。
- 常见的php命令执行函数:
eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()
system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()
其他杂项
X-Forwarded-For
本地IP:client-ip: 127.0.0.1
来自于:referer: pornhub.com
浏览器设置:user-agent: Chrome
代理:via: Clash.win
Linux
find / -name 1.txt : 在根目录下开始寻找1.txt
find /root -name *1.txt
: 从root目录下开始寻找 带有名称1的txt文件
假设你知道flag的格式,你可以使用类似以下的命令来搜索:
grep -r "flag{.\*}" /path/to/directory/\*.txt
这将找到所有包含flag格式字符串的txt文件,并输出它们的内容。
grep -r "flag{.}" /path/to/directory/.txt | xargs cat
获取图片内容
strings '/home/kali/桌面/1.png' I grep {*}
此处评论已关闭