现在越来越多的网站采取RESTFUL架构,传输的数据多是JSON格式,那么会对传统的安全测试有什么改变呢?
首先,我们模拟一个这种网站试试。
import web
import json
import requests
urls = (
'/', 'hello'
)
app = web.application(urls, globals())
class hello:
def POST(self):
payload = web.input()
data = web.data()
data = json.loads(data)
print data
#payload = {"artist": "1"}
url = '<http://testphp.vulnweb.com/artists.php?artist='>; + data["artist"]
print url
req = requests.get(url)
return req.content
if **name** == "**main**":
app.run()
然后我们提交正常的请求。
可以看到网站正常响应。
然后使用burpsuite捕获数据包。
POST / HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 14
Connection: close
{"artist":"1"}
使用SQLMAP -r 进行注入。
SQLMAP会自动识别JSON格式SQL注入。
成功注入。
对于这些JSON数据,也一样可以使用FUZZ的手段进行漏洞挖掘。
之前就在我们公司的一个产品中发现,恶意修改id的值,造成数据处理异常的问题。
下面开始谣言粉碎。
百度搜索 :SQLMAP注入json格式数据
嗯,出现一堆文章,但是这种直接 --data 然后加星号的手段有效么?
C:\Users\xi4okv>sqlmap -u "[http://127.0.0.1:8080/" --data={"artist":"1*"}
不好意思,在服务端直接报错,数据格式不识别的错误。所以http://127.0.0.1:8080/%22%C2%A0%C2%A0--data=%7B%22artist%22:%221*%22%7D[/code]%E4%B8%8D%E5%A5%BD%E6%84%8F%E6%80%9D%EF%BC%8C%E5%9C%A8%E6%9C%8D%E5%8A%A1%E7%AB%AF%E7%9B%B4%E6%8E%A5%E6%8A%A5%E9%94%99%EF%BC%8C%E6%95%B0%E6%8D%AE%E6%A0%BC%E5%BC%8F%E4%B8%8D%E8%AF%86%E5%88%AB%E7%9A%84%E9%94%99%E8%AF%AF%E3%80%82%E6%89%80%E4%BB%A5 --data 是不能直接提交JSON格式数据的。因为服务端只接受json格式的数据。
File "D:\Python27\lib\json__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "D:\Python27\lib\json\decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "D:\Python27\lib\json\decoder.py", line 382, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
127.0.0.1:6338 - - [10/Jul/2017 09:38:48] "HTTP/1.1 POST /" - 500 Internal Server Error
所以以后遇到json格式的数据,想检测SQL注入,请使用 sqlmap -r的操作。 还有sqlmapapi怎么调用检测json,请各位思考。
本文描述的是个人见解。或许会有错误,欢迎评论中指出。
谢谢大家。