SQL注入漏洞检测

一个度过菜鸟期的后台程序员都会小心的避开SQL注入常见低级错误。

除了白盒和代码评审,作为第三方的渗透测试,使用sqlmap这样的常用工具进行SQL注入扫描可以降低上述问题发生概率。

工具环境准备

0.先检查一下是否安装过sqlmap工具,显示下版本


sqlmap --version

如果运行成功说明已经安装此工具,比如返回


1.1.6#pip

如果没有安装过sqlmap,请参考后面两个步骤

1.安装pip工具

多数新的发行版linux都带有python和pip,检查pip版本


[jim@host]$ pip --version

pip 9.0.1 from /usr/lib/python2.6/site-packages (python 2.6)

对于centos 6.5 或者以下,没有安装pip的话,请用root用户安装


[root@host]# wget https://bootstrap.pypa.io/get-pip.py

[root@host]# python get-pip.py

注:如果需要升级到 python2.7,可以参考 centos_6.5安装python2.7

2. 安装sqlmap工具,建议使用国内的源,比如阿里云,速度快很多


[root@host]# pip install sqlmap  -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

...

Successfully built sqlmap

Installing collected packages: sqlmap

Successfully installed sqlmap-1.1.6

很多步骤和依赖包安装完毕后可回到 步骤0 检查工具安装结果

常规注入扫描

最简单的注入原理就是在请求参数中增加“;sql statment”, 如果响应告诉扫描工具请求成功,那么这个请求就是有严重注入攻击漏洞的。

0. 了解常用的参数


sqlmap -h

常用到的必选项


-u URL, --url=URL  Target URL (e.g. "http://www.site.com/vuln.php?id=1")

--data=DATA        Data string to be sent through POST

--cookie=COOKIE    HTTP Cookie header value

-H HEADER, --hea..  Extra header (e.g. "X-Forwarded-For: 127.0.0.1")

暴力的扫描选项


-a, --all          Retrieve everything

如果已经知道目标数据库,比如mysql,请指定数据库参数,否则sqlmap会遍历尝试各种数据库注入


--dbms mysql

  1. 匿名访问和使用cookie来授权用户 如果要检测的应用属于匿名用户公开访问,不用考虑cookie

如果要检测的应用属于用户登录授权的,则需要使用cookie来保持授权用户会话,参考如何模拟http_https请求头和cookie

  1. 准备被扫描对象 找到api的列表,作为被扫描对象,但是构造参数可能是琐碎的事情,此外还要注意几点:

尽量从本机 127.0.0.1 来访问目标请求api

目的是降低网络要求和防火墙等安全产品的误报

不要在生产环境运行,可能是有破坏性的

获得访问请求api和参数,对于上线的系统,可从生产日志里面找到扫描请求

  1. 运行和查看扫描结果 我们看一个简单的扫描例子,只有一个参数的GET方法

sqlmap -u'http://127.0.0.1:8118/app/dealreport/query/user-info?user_name=%E4%B8%81%E4%BF%8A&_=1498102883406' -a --dbms mysql

___

__H__

___ ___[)]_____ ___ ___  {1.1.6#pip}

|_ -| . [.]    | .'| . |

|___|_  ["]_|_|_|__,|  _|

|_|V          |_|  http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illeg\

al. It is the end user's responsibility to obey all applicable local, state and federal laws. Dev\

elopers assume no liability and are not responsible for any misuse or damage caused by this progr\

am

[*] starting at 14:49:49

[14:49:49] [INFO] testing connection to the target URL

[14:49:49] [INFO] testing if the target URL is stable

[14:49:50] [INFO] target URL is stable

[14:49:50] [INFO] testing if GET parameter 'user_id_assistant' is dynamic

[14:49:50] [WARNING] GET parameter 'user_id_assistant' does not appear to be dynamic

[14:49:50] [WARNING] heuristic (basic) test shows that GET parameter 'user_id_assistant' might no\

t be injectable

[14:49:50] [INFO] testing for SQL injection on GET parameter 'user_id_assistant'

[14:49:50] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'

[14:49:51] [INFO] testing 'MySQL >= 5.0 boolean-based blind - Parameter replace'

[14:49:52] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)'

...

...

[14:50:01] [INFO] testing 'MySQL >= 5.0 error-based - Parameter replace (FLOOR)'

[14:50:01] [INFO] testing 'MySQL inline queries'

[14:50:01] [INFO] testing 'MySQL >= 5.0.12 AND time-based blind'

[14:50:02] [INFO] testing 'Generic UNION query (NULL) - 1 to 10 columns'

[14:50:08] [WARNING] GET parameter '_' does not seem to be injectable

[14:50:08] [CRITICAL] all tested parameters appear to be not injectable. Try to increase '--level'/'--risk' values to perform more tests. Also, you can try to rerun by providing either a valid value for option '--string' (or '--regexp'). If you suspect that there is some kind of protection mechanism involved (e.g. WAF) maybe you could retry with an option '--tamper' (e.g. '--tamper=space2comment')

[*] shutting down at 14:50:08

注意到 [14:50:08] [CRITICAL] all tested parameters appear to be not injectable. , 那么这个api通过了常规注入套路的检测,未见可疑。

进阶注入扫描

  1. 我们需要用到更详细和高级的sqlmap运行选项

sqlmap -hh

  1. 更高效的api参数组合

使用代理来记录遍历所有的有效请求

  1. 快速评估

当不能对所有的api进行扫描,需要抽样评估,这是一个抽样数量计算的工具https://www.surveysystem.com/sscalc.htm,根据可接受误差和置信度来决定抽样数量

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容

  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sq...
    xuningbo阅读 10,281评论 2 22
  • sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息。 ======...
    wind_飘阅读 2,039评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工...
    linkally阅读 6,869评论 1 40
  • sqlmap也是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工...
    查无此人asdasd阅读 1,538评论 0 1