sql注入实践简述(上)
安全突出实践,是一门实践大于理论的学科
下面笔者将用两个靶场实战题目,简述web安全领域中sql注入的实践
靶场链接1:
sql数字型get注入
靶场链接2:
SQL字符型注入
靶场1:
看到id=1,很容易猜测到是否为注入点
判断如下(三步)
当输入id=1’,报错如下
当输入id=1 and 1=1
回显正常
当输入id=1 and 1=2
页面回显异常
到此可以判断id处存在注入点
(然后按照正常注入流程走)
- 测试注入是否存在
- 判断字段数
- 联合查询得出回显点
- 查询数据库及系统信息
- 列出当前所有库名
- 列出表名
- 列字段名
- 查字段内容
有点啰嗦。。。。。。。
判断字段数 order by
从1开始尝试,测试到3时正常,测试到4时异常。即可断定字段数为3。
测试出字段数为3时,可以通过联合查询UNION SELECT得出回显点,如下图
可知回显点为2,3 然后测试时,把测试语句放在2,3位置即可
下面用concat(),查询数据库信息及系统信息详情
这一步对于进一步做内网渗透测试至关重要,别笑
可以看出系统版本型号及数据库具体信息
下一步 用列出当前所有库名
可以看到当前库名
下一步 列出表名
这里需要注意的是库名要加上单引号或双引号
这时已经看到flag表名,近在咫尺
下一步 列字段名
下一步 查flag字段内容
flag到手
到此sql注入靶场1,讲述到此,读者可自行去练习一下
靶场2:
其实两种注入,大同小异。只不过第二种字符型注入,需要去闭合sql语句的括号,以及注释掉后面多余代码。
1. 闭合要用 '
2. 注释要用 - -
现给出最终payload如下
http://www.whalwl.com:8005/bug/sql_injection/sql_string.php?title=1’ and 1=2 UNION SELECT 1,flag,3 from flag limit 0,1 – &submit=submit
flag到手