从Web日志还原SQL注入拖走的数据

从Web日志还原SQL注入拖走的数据

黑客资讯访客1970-01-01 8:00:003404A+A-

利用SQL注入漏洞拖库,从而导致数据泄漏。一般的排查方式,我们可以使用关键字进行搜索,找到可疑的url尝试进行漏洞复现,通过Web访问日志来还原攻击路径,从而确定问题的根源。

但是,有一个问题却一直困扰着我,攻击者通过SQL注入漏洞到底获取了什么数据?是所有的数据,还只是访问了其中的一张表?

理论上,假设所有的url参数请求日志都记录完整的话,只需要重放每一个请求,然后根据请求响应的情况,就可以一步步还原出被攻击者拖走的数据。为此,我们来搭建一个场景来做攻击数据还原,验证一下这个挺有意思的猜想。


01、构建SQL注入场景

通过PHP+MySql构建了一个GET请求的sql注入点,使用SQL注入自动化工具脱库,在access.log产生访问日志,我们以此作为分析源。

Union联合注入日志记录:

127.0.0.1 - - [04/Apr/2021:19:55:14 +0800] "GET /test.php?id=1+and+1%3D2+union+select+1%2C2%2Cconcat%280x7177657E%2Cschema_name%2C0x7E717765%29+from+information_schema.schemata HTTP/1.1" 200 329 127.0.0.1 - - [04/Apr/2021:19:55:17 +0800] "GET /test.php?id=1++union+select+1%2C2%2Cconcat%280x7177657E%2Ctable_name%2C0x7E717765%29+from+information_schema.tables+where+table_schema%3D%27test%27 HTTP/1.1" 200 219 127.0.0.1 - - [04/Apr/2021:19:55:21 +0800] "GET /test.php?id=1++union+select+1%2C2%2Cconcat%280x7177657E%2Ccolumn_name%2C0x7E717765%29+from+information_schema.columns+where+table_name%3D%27admin%27 HTTP/1.1" 200 247

这里的三个请求,依次是Union联合查询数据库库名、表名以及表的列名的请求。

02、简单自动化实现

大致实现的思路:读取access.log文件,获取url_path,拼接成完整的url,重放HTTP请求,匹配请求响应的内容,得到被攻击者拖走的数据。

为此,我自己动手尝试实现了一个小demo来实现自动化。部分demo代码,如下:

 

def sql_log_analysis(path,pattern):   com = re.compile(pattern,re.I)    keys = com.findall(unquote(path))    a = keys[0][0].replace("0x","").decode('hex')    b = keys[0][2].replace("0x","").decode('hex')    url = domain_name+path  response = requests.get(url)    pattern = a+r"(.*?)"+b    com2= re.compile(pattern)      find_list=com2.findall(response.content)    if len(find_list)>0:      return keys,find_list

代码运行截图:

image.png

以上,就是一个简单的自动化实现的过程,通过重放请求,反向还原SQL注入的过程,我们可以进一步了解到攻击者到底动了哪些数据库和表,甚至更详细的数据字段。

03、存在的几个问题

事实上,大部分的Web日志只记录了GET类型的参数请求,而无法详尽的记录POST请求,这个给Web日志还原攻击数据带来极大的局限性。另外,不同的SQL注入类型,不同的SQL注入自动化工具,所构造的SQL语句变化很多,这也会加大自动化实现的难度。

基于以上,这种方式的应用场景,可能更适用于小范围内特定的攻击者请求日志,可以编写脚本重放请求,还原攻击者的SQL注入过程,获悉被拖走的数据。

点击这里复制本文地址 以上内容由黑资讯整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
  • 4条评论
  • 森槿掩吻2022-05-28 22:39:59
  • 句变化很多,这也会加大自动化实现的难度。基于以上,这种方式的应用场景,可能更适用于小范围内特定的攻击者请求日志,可以编写脚本重放请求,还原攻击者的SQL注入过程,获悉被拖走的数据。
  • 泪灼海夕2022-05-28 17:46:23
  • p?id=1+and+1%3D2+union+select+1%2C2%2Cconcat%280x7177657E%2Cschema_name%2C0x7E717765%29+from+information_schema.schemata HTTP/1.1" 200
  • 痴妓喜余2022-05-28 18:38:44
  • 657E%2Cschema_name%2C0x7E717765%29+from+information_schema.schemata HTTP/1.1" 200 329 127.0
  • 青迟眉妩2022-05-28 19:55:01
  • 拼接成完整的url,重放HTTP请求,匹配请求响应的内容,得到被攻击者拖走的数据。为此,我自己动手尝试实现了一个小demo来实现自动化。部分demo代码,如下: def sql_log_analysis(path,pattern): 

支持Ctrl+Enter提交

黑资讯 © All Rights Reserved.  
Copyright Copyright 2015-2020 黑资讯
滇ICP备19002590号-1
Powered by 黑客资讯 Themes by 如有不合适之处联系我们
网站地图| 发展历程| 留言建议| 网站管理